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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
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)