URI: 
       tmove tests to unittest format - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 30b608c6fb0f837de9211c43900d436742d3d882
   DIR parent c4d10f6d639707591c43e9c8c21465c503f01fbe
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Tue,  3 Jun 2014 09:34:59 +0200
       
       move tests to unittest format
       
       Diffstat:
         M lib/bitcoin.py                      |     108 ++++++++++++++++----------------
       
       1 file changed, 54 insertions(+), 54 deletions(-)
       ---
   DIR diff --git a/lib/bitcoin.py b/lib/bitcoin.py
       t@@ -693,72 +693,72 @@ MIN_RELAY_TX_FEE = 1000
        
        
        
       -def test_bip32(seed, sequence):
       -    """
       -    run a test vector,
       -    see https://en.bitcoin.it/wiki/BIP_0032_TestVectors
       -    """
       -
       -    xprv, xpub = bip32_root(seed)
       -    print xpub
       -    print xprv
       -
       -    assert sequence[0:2] == "m/"
       -    path = 'm'
       -    sequence = sequence[2:]
       -    for n in sequence.split('/'):
       -        child_path = path + '/' + n
       -        if n[-1] != "'":
       -            xpub2 = bip32_public_derivation(xpub, path, child_path)
       -        xprv, xpub = bip32_private_derivation(xprv, path, child_path)
       -        if n[-1] != "'":
       -            assert xpub == xpub2
       -        
       +import unittest
       +class Test_bitcoin(unittest.TestCase):
        
       -        path = child_path
       -        print path
       -        print xpub
       -        print xprv
       +    def test_crypto(self):
       +        for message in ["Chancellor on brink of second bailout for banks", chr(255)*512]:
       +            self.do_test_crypto(message)
        
       -    print "----"
       +    def do_test_crypto(self, message):
       +        G = generator_secp256k1
       +        _r  = G.order()
       +        pvk = ecdsa.util.randrange( pow(2,256) ) %_r
        
       -        
       +        Pub = pvk*G
       +        pubkey_c = point_to_ser(Pub,True)
       +        pubkey_u = point_to_ser(Pub,False)
       +        addr_c = public_key_to_bc_address(pubkey_c)
       +        addr_u = public_key_to_bc_address(pubkey_u)
       +
       +        print "Private key            ", '%064x'%pvk
       +        eck = EC_KEY(number_to_string(pvk,_r))
       +
       +        print "Compressed public key  ", pubkey_c.encode('hex')
       +        enc = EC_KEY.encrypt_message(message, pubkey_c)
       +        dec = eck.decrypt_message(enc)
       +        assert dec == message
       +
       +        print "Uncompressed public key", pubkey_u.encode('hex')
       +        enc2 = EC_KEY.encrypt_message(message, pubkey_u)
       +        dec2 = eck.decrypt_message(enc)
       +        assert dec2 == message
        
       -def test_crypto(message):
       -    G = generator_secp256k1
       -    _r  = G.order()
       -    pvk = ecdsa.util.randrange( pow(2,256) ) %_r
       +        signature = eck.sign_message(message, True, addr_c)
       +        print signature
       +        EC_KEY.verify_message(addr_c, signature, message)
        
       -    Pub = pvk*G
       -    pubkey_c = point_to_ser(Pub,True)
       -    pubkey_u = point_to_ser(Pub,False)
       -    addr_c = public_key_to_bc_address(pubkey_c)
       -    addr_u = public_key_to_bc_address(pubkey_u)
        
       -    print "Private key            ", '%064x'%pvk
       -    eck = EC_KEY(number_to_string(pvk,_r))
        
       -    print "Compressed public key  ", pubkey_c.encode('hex')
       -    enc = EC_KEY.encrypt_message(message, pubkey_c)
       -    dec = eck.decrypt_message(enc)
       -    assert dec == message
       +    def test_bip32(self):
       +        # see https://en.bitcoin.it/wiki/BIP_0032_TestVectors
       +        xpub, xprv = self.do_test_bip32("000102030405060708090a0b0c0d0e0f", "m/0'/1/2'/2/1000000000")
       +        assert xpub == "xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy"
       +        assert xprv == "xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76"
        
       -    print "Uncompressed public key", pubkey_u.encode('hex')
       -    enc2 = EC_KEY.encrypt_message(message, pubkey_u)
       -    dec2 = eck.decrypt_message(enc)
       -    assert dec2 == message
       +        xpub, xprv = self.do_test_bip32("fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542","m/0/2147483647'/1/2147483646'/2")
       +        assert xpub == "xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt"
       +        assert xprv == "xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j"
        
       -    signature = eck.sign_message(message, True, addr_c)
       -    print signature
       -    EC_KEY.verify_message(addr_c, signature, message)
        
       +    def do_test_bip32(self, seed, sequence):
       +        xprv, xpub = bip32_root(seed)
       +        assert sequence[0:2] == "m/"
       +        path = 'm'
       +        sequence = sequence[2:]
       +        for n in sequence.split('/'):
       +            child_path = path + '/' + n
       +            if n[-1] != "'":
       +                xpub2 = bip32_public_derivation(xpub, path, child_path)
       +            xprv, xpub = bip32_private_derivation(xprv, path, child_path)
       +            if n[-1] != "'":
       +                assert xpub == xpub2
       +            path = child_path
        
       -if __name__ == '__main__':
       +        return xpub, xprv
        
       -    for message in ["Chancellor on brink of second bailout for banks", chr(255)*512]:
       -        test_crypto(message)
        
       -    test_bip32("000102030405060708090a0b0c0d0e0f", "m/0'/1/2'/2/1000000000")
       -    test_bip32("fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542","m/0/2147483647'/1/2147483646'/2")
        
        
       +if __name__ == "__main__":
       +    unittest.main()