From 31ab5b2e0a911a014ea1398f6f73fa3f311e76ec Mon Sep 17 00:00:00 2001 From: ThomasV Date: Thu, 15 Jun 2017 10:03:18 +0200 Subject: [PATCH] pass hash to pubkey_from_signature --- lib/bitcoin.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/bitcoin.py b/lib/bitcoin.py index 6863a2f7c..770d35743 100644 --- a/lib/bitcoin.py +++ b/lib/bitcoin.py @@ -486,14 +486,14 @@ def msg_magic(message): def verify_message(address, sig, message): try: - public_key, compressed = pubkey_from_signature(sig, message) + h = Hash(msg_magic(message)) + public_key, compressed = pubkey_from_signature(sig, h) # check public key using the address pubkey = point_to_ser(public_key.pubkey.point, compressed) addr = public_key_to_p2pkh(pubkey) if address != addr: raise Exception("Bad signature") # check message - h = Hash(msg_magic(message)) public_key.verify_digest(sig[1:], h, sigdecode = ecdsa.util.sigdecode_string) return True except Exception as e: @@ -575,7 +575,7 @@ class MyVerifyingKey(ecdsa.VerifyingKey): return klass.from_public_point( Q, curve ) -def pubkey_from_signature(sig, message): +def pubkey_from_signature(sig, h): if len(sig) != 65: raise Exception("Wrong encoding") nV = ord(sig[0]) @@ -587,7 +587,6 @@ def pubkey_from_signature(sig, message): else: compressed = False recid = nV - 27 - h = Hash(msg_magic(message)) return MyVerifyingKey.from_signature(sig[1:], recid, h, curve = SECP256k1), compressed @@ -636,12 +635,12 @@ class EC_KEY(object): def verify_message(self, sig, message): - public_key, compressed = pubkey_from_signature(sig, message) + h = Hash(msg_magic(message)) + public_key, compressed = pubkey_from_signature(sig, h) # check public key if point_to_ser(public_key.pubkey.point, compressed) != point_to_ser(self.pubkey.point, compressed): raise Exception("Bad signature") # check message - h = Hash(msg_magic(message)) public_key.verify_digest(sig[1:], h, sigdecode = ecdsa.util.sigdecode_string)