diff --git a/sshagent/trezor/client.py b/sshagent/trezor/client.py index e0a5b41..31df421 100644 --- a/sshagent/trezor/client.py +++ b/sshagent/trezor/client.py @@ -71,10 +71,7 @@ class Client(object): assert len(result.signature) == 65 assert result.signature[0] == b'\x00' - sig = result.signature[1:] - r = util.bytes2num(sig[:32]) - s = util.bytes2num(sig[32:]) - return (r, s) + return parse_signature(result.signature) def sign_identity(self, label, expected_address=None, _strftime=time.strftime, _urandom=os.urandom): @@ -110,13 +107,11 @@ class Client(object): def _validate_signature(result, digest, curve=formats.ecdsa.SECP256k1): - sig = result.signature[1:] verifying_key = formats.decompress_pubkey(result.public_key, curve=curve) log.debug('digest: %s', binascii.hexlify(digest)) - signature = (util.bytes2num(sig[:32]), - util.bytes2num(sig[32:])) + signature = parse_signature(result.signature) log.debug('signature: %s', signature) try: verifying_key.verify_digest(signature=signature, @@ -130,6 +125,13 @@ def _validate_signature(result, digest, curve=formats.ecdsa.SECP256k1): return 0 +def parse_signature(blob): + sig = blob[1:] + r = util.bytes2num(sig[:32]) + s = util.bytes2num(sig[32:]) + return (r, s) + + def message_digest(hidden, visual): from bitcoin import electrum_sig_hash hidden_digest = formats.hashfunc(hidden).digest()