56 lines
1.6 KiB
Python
Executable File
56 lines
1.6 KiB
Python
Executable File
#!/usr/bin/python3 -tt
|
|
|
|
import sys
|
|
import os
|
|
|
|
from random import getrandbits
|
|
|
|
from util import *
|
|
import base58
|
|
import keys
|
|
import bip32
|
|
import bip39
|
|
|
|
if __name__ == '__main__':
|
|
# test bip39
|
|
wlen = 12
|
|
b39phrase = bip39.genPhrase( intBytes( getrandbits( wlen // 3 * 32 ) ) )
|
|
b39seed = bip39.genSeed( b39phrase )
|
|
|
|
# test bip32
|
|
# master private (key, chain) bytes
|
|
b32master = bip32.getMaster( b39seed )
|
|
# serialize master ext prv and pub key
|
|
b32masterxprv = bip32.serializeExtPrvKey( b32master )
|
|
b32masterxpub = bip32.serializeExtPubKey( (keys.getPubKey( b32master[0] ), b32master[1]) )
|
|
|
|
print( 'BIP39 phrase, seed\n\t', b39phrase + '\n\t', b39seed.hex() +
|
|
'\nBIP32 master\n' + f'\t{b32masterxprv}\n\t{b32masterxpub}' )
|
|
print()
|
|
|
|
prvmaster = (b32master[0], b32master[1])
|
|
prvroot0 = bip32.ckdPrv( prvmaster, 0 ) # m/0
|
|
|
|
parfp = keys.getPubKeyHash( keys.getPubKey( prvmaster[0] ) )[:4] # parent fingerprint
|
|
prvroot0ext = bip32.serializeExtPrvKey(
|
|
prvroot0, 1, parfp, 0 )
|
|
pubroot0ext = bip32.serializeExtPubKey(
|
|
(keys.getPubKey( prvroot0[0] ), prvroot0[1]), 1, parfp, 0 )
|
|
print( f'm/0 derived ext keys:\n\t{prvroot0ext}\n\t{pubroot0ext}' )
|
|
|
|
for i in range( 20 ):
|
|
# pubkey - prvkey
|
|
pk = bip32.ckdPrv( prvroot0, i )[0]
|
|
print( 'm/0/{}: {} - {}'.format( i, keys.getPubKey( pk ).hex(), keys.getPrvKeyWIF( pk ) ) )
|
|
|
|
"""
|
|
pp = b'poop' #input( 'Phrase: ' ).encode()
|
|
prvkey = b32master[0]
|
|
pubkey = keys.getPubKey( prvkey )
|
|
pubaddr = keys.getPubKeyAddr( pubkey )
|
|
print( f'prvkey hex: {prvkey.hex()}' )
|
|
print( f'b58 wif pk: {keys.getPrvKeyWIF( prvkey )}' )
|
|
print( f'pubkey: {pubkey.hex()}\n\thash: {keys.getPubKeyHash( pubkey ).hex()}\n\taddr: {pubaddr}' )
|
|
"""
|
|
|