cryptoKeyTools/keys.py

47 lines
1.2 KiB
Python

# public and private key utilities
# also addresses and hashes
from hashlib import new as newhash
from hashlib import sha256
from os import urandom
import base58
import ecdsa
from util import *
# configurable wif version byte
# 0x80 - bitcoin
# 0x9e - dogecoin
WIF_VER = b'\x9e' if DOGE_MODE else b'\x80'
# configurable pub addr version byte
# 0x00 - bitcoin
# 0x1e - dogecoin
ADDR_VER = b'\x1e' if DOGE_MODE else b'\x00'
# gen random 256bit prvkey bytes
def genRandPrvKey(): return urandom( 32 )
# get base58 wif privkey from raw privkey bytes
def getPrvKeyWIF( prv ):
return base58.encodeCheck( WIF_VER, prv + b'\x01' )
# get hash160 bytes of pubkey bytes. base58Check this for addr
# also used for bip32 ext key identifier. first 32bits of id is the fingerprint
def getPubKeyHash( pub ):
rmd = newhash( 'ripemd160' )
rmd.update( sha256( pub ).digest() )
return rmd.digest()
# pubkey bytes to address, aka base58Check( pubKeyHash )
def getPubKeyAddr( pub ):
return base58.encodeCheck( ADDR_VER, getPubKeyHash( pub ) )
# get the compressed point pubkey bytes from prvkey bytes
def getPubKey( prv ):
# multiplies ecdsa generator point by prvkey
pub = ecdsa.getPoint( int( prv.hex(), 16 ) )
return ecdsa.compressPoint( pub )