#!/usr/bin/env python # patched from https://bitcoin.stackexchange.com/questions/56923/is-this-how-to-generate-a-bitcoin-address-with-python # https://en.bitcoin.it/wiki/Protocol_documentation#Addresses # Adapted to litecoin, following https://bitcoin.stackexchange.com/questions/65282/how-is-a-litecoin-address-generated import hashlib import base58 # ECDSA bitcoin Public Key pubkey = '0450863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b23522cd470243453a299fa9e77237716103abc11a1df38855ed6f2ee187e9c582ba6' # See 'compressed form' at https://en.bitcoin.it/wiki/Protocol_documentation#Signatures compress_pubkey = True def hash160(hex_str): sha = hashlib.sha256() rip = hashlib.new('ripemd160') sha.update(hex_str) rip.update( sha.digest() ) print ( "key_hash = \t" + rip.hexdigest() ) return rip.hexdigest() # .hexdigest() is hex ASCII if (compress_pubkey): if (ord(bytearray.fromhex(pubkey[-2:])) % 2 == 0): pubkey_compressed = '02' else: pubkey_compressed = '03' pubkey_compressed += pubkey[2:66] hex_str = bytearray.fromhex(pubkey_compressed) else: hex_str = bytearray.fromhex(pubkey) # Obtain key: key_hash = '30' + hash160(hex_str) # Obtain signature: sha = hashlib.sha256() sha.update( bytearray.fromhex(key_hash) ) checksum = sha.digest() sha = hashlib.sha256() sha.update(checksum) checksum = sha.hexdigest()[0:8] print ( "checksum = \t" + sha.hexdigest() ) #while (key_hash[0:2] == '00'): # key_hash=key_hash[2:] print ( "key_hash + checksum = \t" + key_hash + ' ' + checksum ) print ( "litecoin address = \t" + (base58.b58encode( bytes(bytearray.fromhex(key_hash + checksum)) )).decode('utf-8') )