def make_signed_balance_proof( nonce, transferred_amount, channel_address, locksroot, extra_hash, private_key, sender_address ): data_to_sign = balance_proof.signing_data( nonce, transferred_amount, channel_address, locksroot, extra_hash, ) signature = signing.sign(data_to_sign, private_key) signed_balance_proof = BalanceProofSignedState( nonce, transferred_amount, locksroot, channel_address, extra_hash, signature, sender_address, ) return signed_balance_proof
def is_valid_signature( balance_proof: BalanceProofSignedState, sender_address: typing.Address, ) -> typing.SuccessOrError: data_that_was_signed = signing_data( balance_proof.nonce, balance_proof.transferred_amount, balance_proof.locked_amount, balance_proof.channel_address, balance_proof.locksroot, balance_proof.message_hash, ) try: # ValueError is raised if the PublicKey instantiation failed, let it # propagate because it's a memory pressure problem publickey = recover_publickey( data_that_was_signed, balance_proof.signature, ) except Exception: # pylint: disable=broad-except # secp256k1 is using bare Exception classes # raised if the recovery failed msg = 'Signature invalid, could not be recovered.' return (False, msg) is_correct_sender = sender_address == publickey_to_address(publickey) if is_correct_sender: return (True, None) msg = 'Signature was valid but the expected address does not match.' return (False, msg)
def make_signed_balance_proof( nonce, transferred_amount, locked_amount, token_network_address, channel_address, locksroot, extra_hash, private_key, sender_address, ): data_to_sign = balance_proof.signing_data( nonce, transferred_amount, locked_amount, channel_address, locksroot, extra_hash, ) balance_hash = hash_balance_data( transferred_amount, locked_amount, locksroot, ) data_to_sign = balance_proof.pack_signing_data( nonce=nonce, balance_hash=balance_hash, additional_hash=extra_hash, channel_identifier=channel_address, token_network_identifier=token_network_address, chain_id=UNIT_CHAIN_ID, ) signature = signing.sign(data_to_sign, private_key) signed_balance_proof = BalanceProofSignedState( nonce, transferred_amount, locked_amount, locksroot, token_network_address, channel_address, extra_hash, signature, sender_address, UNIT_CHAIN_ID, ) return signed_balance_proof
def make_signed_balance_proof( nonce, transferred_amount, locked_amount, token_network_address, channel_address, locksroot, extra_hash, private_key, sender_address, ): data_to_sign = balance_proof.signing_data( nonce, transferred_amount, locked_amount, channel_address, locksroot, extra_hash, ) balance_hash = hash_balance_data( transferred_amount, locked_amount, locksroot, ) data_to_sign = balance_proof.pack_signing_data( nonce=nonce, balance_hash=balance_hash, additional_hash=extra_hash, channel_identifier=channel_address, token_network_identifier=token_network_address, chain_id=UNIT_CHAIN_ID, ) signature = signing.sign(data_to_sign, private_key) signed_balance_proof = BalanceProofSignedState( nonce, transferred_amount, locked_amount, locksroot, token_network_address, channel_address, extra_hash, signature, sender_address, UNIT_CHAIN_ID, ) return signed_balance_proof