URI: 
       tpass hash to pubkey_from_signature - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 31ab5b2e0a911a014ea1398f6f73fa3f311e76ec
   DIR parent d4dcd551e41c885b8770d2bc7746511e53e35951
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Thu, 15 Jun 2017 10:03:18 +0200
       
       pass hash to pubkey_from_signature
       
       Diffstat:
         M lib/bitcoin.py                      |      11 +++++------
       
       1 file changed, 5 insertions(+), 6 deletions(-)
       ---
   DIR diff --git a/lib/bitcoin.py b/lib/bitcoin.py
       t@@ -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:
       t@@ -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])
       t@@ -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
        
        
       t@@ -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)