def public_key_to_address(public_key, prefix='main'): if prefix == 'test': prefix = TEST_PUBKEY_HASH elif prefix == 'main': prefix = MAIN_PUBKEY_HASH else: raise ValueError('Invalid prefix.') # 33 bytes compressed, 65 uncompressed. length = len(public_key) if length not in (33, 65): raise ValueError('{} is an invalid length for a public key.'.format(length)) return b58encode_check(prefix + ripemd160_sha256(public_key))
def bytes_to_wif(private_key, version='main', compressed=False): if version == 'test': prefix = TEST_PRIVATE_KEY else: prefix = MAIN_PRIVATE_KEY if compressed: suffix = PRIVATE_KEY_COMPRESSED_PUBKEY else: suffix = b'' private_key = prefix + private_key + suffix return b58encode_check(private_key)
def generate_key_address_pairs(prefix, counter, match, queue): # pragma: no cover context = Context() while True: if match.is_set(): return with counter.get_lock(): counter.value += 1 private_key = ECPrivateKey(context=context) address = b58encode_check( b'\x00' + ripemd160_sha256(private_key.public_key.format())) if address.startswith(prefix): match.set() queue.put_nowait((private_key.secret, address)) return
def test_b58encode_check(): assert b58encode_check(MAIN_PUBKEY_HASH + PUBKEY_HASH) == BITCOIN_ADDRESS