URI: 
       tupdate bip32 derivations, using xpriv and xpub serialization format - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 91ba04c4d7a40454ae163b1f65c023771400a206
   DIR parent 328432f5f45ea12a22037adff133cb253c678896
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Mon, 31 Mar 2014 12:12:29 +0200
       
       update bip32 derivations, using xpriv and xpub serialization format
       
       Diffstat:
         M lib/bitcoin.py                      |      49 ++++++++++++-------------------
       
       1 file changed, 18 insertions(+), 31 deletions(-)
       ---
   DIR diff --git a/lib/bitcoin.py b/lib/bitcoin.py
       t@@ -577,20 +577,22 @@ def CKD_pub(cK, c, n):
            return cK_n, c_n
        
        
       -def parse_xprv(xprv):
       -    xprv = DecodeBase58Check( xprv )
       -    assert len(xprv) == 78
       -    assert xprv[0:4] == "0488ADE4".decode('hex')
       -    depth = ord(xprv[4])
       -    fingerprint = xprv[5:9]
       -    child_number = xprv[9:13]
       -    c = xprv[13:13+32]
       -    k = xprv[13+33:]
       -    K, cK = get_pubkeys_from_secret(k)
       -    key_id = hash_160(cK)
       -    print "keyid", key_id.encode('hex')
       -    print "address", hash_160_to_bc_address(key_id)
       -    print "secret key", SecretToASecret(k, True)
       +
       +def deserialize_xkey(xkey):
       +    xkey = DecodeBase58Check(xkey) 
       +    assert len(xkey) == 78
       +    assert xkey[0:4].encode('hex') in ["0488ADE4", "0488B21E"]
       +    assert sequence.startswith(branch)
       +    depth = ord(xkey[4])
       +    fingerprint = xkey[5:9]
       +    child_number = xkey[9:13]
       +    c = xkey[13:13+32]
       +    if xkey[0:4].encode('hex') == "0488ADE4":
       +        K_or_k = xkey[13+33:]
       +    else:
       +        K_or_k = xkey[13+32:]
       +    return depth, fingerprint, child_number, c, K_or_k
       +
        
        
        def bip32_root(seed):
       t@@ -607,15 +609,8 @@ def bip32_root(seed):
        
        
        def bip32_private_derivation(xprv, branch, sequence):
       -    xprv = DecodeBase58Check( xprv ) 
       -    assert len(xprv) == 78
       -    assert xprv[0:4] == "0488ADE4".decode('hex')
       +    depth, fingerprint, child_number, c, k = deserialize_xkey(xprv)
            assert sequence.startswith(branch)
       -    depth = ord(xprv[4])
       -    fingerprint = xprv[5:9]
       -    child_number = xprv[9:13]
       -    c = xprv[13:13+32]
       -    k = xprv[13+33:]
            sequence = sequence[len(branch):]
            for n in sequence.split('/'):
                if n == '': continue
       t@@ -635,15 +630,8 @@ def bip32_private_derivation(xprv, branch, sequence):
        
        
        def bip32_public_derivation(xpub, branch, sequence):
       -    xpub = DecodeBase58Check( xpub ) 
       -    assert len(xpub) == 78
       -    assert xpub[0:4] == "0488B21E".decode('hex')
       +    depth, fingerprint, child_number, c, cK = deserialize_xkey(xpub)
            assert sequence.startswith(branch)
       -    depth = ord(xpub[4])
       -    fingerprint = xpub[5:9]
       -    child_number = xpub[9:13]
       -    c = xpub[13:13+32]
       -    cK = xpub[13+32:]
            sequence = sequence[len(branch):]
            for n in sequence.split('/'):
                if n == '': continue
       t@@ -683,7 +671,6 @@ def test_bip32(seed, sequence):
            xprv, xpub = bip32_root(seed)
            print xpub
            print xprv
       -    #parse_xprv(xprv)
        
            assert sequence[0:2] == "m/"
            path = 'm'