def get_signer_address(message, signature, logger): """ Get signer address of a previous signed message :param str message: Message :param str signature: Signature obtain with web3.eth.personal.sign :param logger: logging object :return: Address or None in case of error """ try: logger.debug(f'got "{message}" as a message') address_recovered = Web3Helper.personal_ec_recover(message, signature) logger.debug(f'got "{address_recovered}" as address_recovered') return address_recovered except Exception as e: logger.error(f'get_signer_address: {e}') return None
def check_auth_token(token): parts = token.split("-") if len(parts) < 2: return "0x0" # :HACK: alert, this should be part of ocean-lib-py sig, timestamp = parts auth_token_message = (get_config().auth_token_message or "Ocean Protocol Authentication") default_exp = 24 * 60 * 60 expiration = int(get_config().auth_token_expiration or default_exp) if int(datetime.now().timestamp()) > (int(timestamp) + expiration): return "0x0" message = f"{auth_token_message}\n{timestamp}" address = Web3Helper.personal_ec_recover(message, sig) return Web3.toChecksumAddress(address)
def check(self, token): """ :param token: hex str consist of signature and timestamp :return: hex str ethereum address """ parts = token.split('-') if len(parts) < 2: return '0x0' sig, timestamp = parts if self._get_timestamp() > (int(timestamp) + self._get_expiration()): return '0x0' message = self._get_message(timestamp) address = Web3Helper.personal_ec_recover(message, sig) return Web3Provider.get_web3().toChecksumAddress(address)
def verify_signature(signer_address, signature, original_msg, nonce: int = None): if is_auth_token_valid(signature): address = check_auth_token(signature) else: assert nonce is not None, "nonce is required when not using user auth token." message = f"{original_msg}{str(nonce)}" address = Web3Helper.personal_ec_recover(message, signature) if address.lower() == signer_address.lower(): return True msg = (f"Invalid signature {signature} for " f"ethereum address {signer_address}, documentId {original_msg}" f"and nonce {nonce}.") raise InvalidSignatureError(msg)