def _test_wallet(self, wallet, data): self.assertEqual(wallet.serialize_b58(private=True), data["private_key"]) self.assertEqual(wallet.serialize_b58(private=False), data["public_key"]) self.assertEqual(wallet.export_to_wif(), data["wif"]) self.assertEqual(wallet.chain_code, ensure_bytes(data["chain_code"])) fingerprint = ensure_bytes(data["fingerprint"]) if not fingerprint.startswith(b"0x"): fingerprint = b"0x" + fingerprint self.assertEqual(wallet.fingerprint, fingerprint) self.assertEqual(wallet.depth, data["depth"]) self.assertEqual(wallet.private_key._private_key.privkey.secret_multiplier, data["secret_exponent"])
def _test_wallet(wallet, data): assert wallet.serialize_b58(private=True) == data['private_key'] assert wallet.serialize_b58(private=False) == data['public_key'] assert wallet.export_to_wif() == data['wif'] assert wallet.chain_code == ensure_bytes(data['chain_code']) fingerprint = ensure_bytes(data['fingerprint']) if not fingerprint.startswith(b'0x'): fingerprint = b'0x' + fingerprint assert wallet.fingerprint == fingerprint assert wallet.depth == data['depth'] assert wallet.private_key._private_key.privkey.secret_multiplier == \ data['secret_exponent']
def _test_wallet(self, wallet, data): self.assertEqual( wallet.serialize_b58(private=True), data['private_key']) self.assertEqual( wallet.serialize_b58(private=False), data['public_key']) self.assertEqual(wallet.export_to_wif(), data['wif']) self.assertEqual(wallet.chain_code, ensure_bytes(data['chain_code'])) fingerprint = ensure_bytes(data['fingerprint']) if not fingerprint.startswith(b'0x'): fingerprint = b'0x' + fingerprint self.assertEqual(wallet.fingerprint, fingerprint) self.assertEqual(wallet.depth, data['depth']) self.assertEqual( wallet.private_key._private_key.privkey.secret_multiplier, data['secret_exponent'])
def test_leading_zeros(self): """This zero-leading x coordinate generated by: pvk = '18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725' # nopep8 from ecdsa import SECP256k1 from ecdsa.ecdsa import Public_key from bitmerchant.wallet.utils import long_to_hex pubkey = Public_key( SECP256k1.generator, SECP256k1.generator * long(pvk, 16)) for i in range(1, 10000): p = pubkey.point * i x = p.x() k = long_to_hex(x, 64) if k.startswith('0'): print(i) print(long_to_hex(p.x(), 64)) print(long_to_hex(p.y(), 64)) break """ expected_key = ensure_bytes( "04" "02cbfd5410fd04973c096a4275bf75070955ebd689f316a6fbd449980ba7b756" "c559764e5c367c03e002751aaf4ef8ec40fe97cda9b2d3f14fdd4cd244e8fcd2") public_key = PublicKey.from_hex_key(expected_key) self.assertEqual(public_key.get_key(), expected_key)
def _test(self, key, private_key_b58, private_key_wif, pubkey_b58, pubkey_hex, address, include_private=True): if include_private: self.assertEqual(key.serialize_b58(), private_key_b58) self.assertEqual(key.export_to_wif(), private_key_wif) self.assertEqual(key.serialize_b58(private=False), pubkey_b58) self.assertEqual(key.get_public_key_hex(), ensure_bytes(pubkey_hex)) self.assertEqual(key.to_address(), address)
def setUpClass(cls): cls.expected_key = ensure_bytes( "0488ade4" # BitcoinMainNet version "00" # depth "00000000" # parent fingerprint "00000000" # child_number # chain_code "873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508" "00" # key identifier # private exponent "e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35") cls.master_key = Wallet.deserialize(cls.expected_key)
def _test_vector(self, key, id_hex, fingerprint, address, secret_key_hex, secret_key_wif, pubkey_hex, chaincode_hex, pubkey_serialized_hex, private_serialized_hex, pubkey_base58, private_base58, include_private=True ): self.assertEqual(key.identifier, ensure_bytes(id_hex)) self.assertEqual(key.fingerprint, ensure_bytes(fingerprint)) self.assertEqual(key.to_address(), address) self.assertEqual(key.get_public_key_hex(), ensure_bytes(pubkey_hex)) self.assertEqual(key.chain_code, ensure_bytes(chaincode_hex)) self.assertEqual(key.serialize(private=False), ensure_bytes(pubkey_serialized_hex)) self.assertEqual(key.serialize_b58(private=False), pubkey_base58) if include_private: self.assertEqual(key.get_private_key_hex(), ensure_bytes(secret_key_hex)) self.assertEqual(key.export_to_wif(), secret_key_wif) self.assertEqual(key.serialize(), ensure_bytes(private_serialized_hex)) self.assertEqual(key.serialize_b58(), private_base58)
def test_bad_checksum(self): wif = self.key.export_to_wif() bad_checksum = base58.b58encode(unhexlify(ensure_bytes('FFFFFFFF'))) wif = wif[:-8] + bad_checksum self.assertRaises(ChecksumException, PrivateKey.from_wif, wif)
def test_bad_checksum(self): wif = self.key.export_to_wif() bad_checksum = base58.b58encode( unhexlify(ensure_bytes('FFFFFFFF'))) wif = wif[:-8] + bad_checksum self.assertRaises(ChecksumException, PrivateKey.from_wif, wif)