mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-23 06:48:16 +00:00
Merge pull request #936 from trezor/rework-serialize-deserialize
crypto: rework serialize/deserialize API
This commit is contained in:
commit
197218338a
@ -259,26 +259,6 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_derive_path(mp_obj_t self,
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_derive_path_obj,
|
||||
mod_trezorcrypto_HDNode_derive_path);
|
||||
|
||||
STATIC mp_obj_t serialize_public_private(mp_obj_t self, bool use_public,
|
||||
uint32_t version) {
|
||||
mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self);
|
||||
char xpub[XPUB_MAXLEN] = {0};
|
||||
int written;
|
||||
if (use_public) {
|
||||
hdnode_fill_public_key(&o->hdnode);
|
||||
written = hdnode_serialize_public(&o->hdnode, o->fingerprint, version, xpub,
|
||||
XPUB_MAXLEN);
|
||||
} else {
|
||||
written = hdnode_serialize_private(&o->hdnode, o->fingerprint, version,
|
||||
xpub, XPUB_MAXLEN);
|
||||
}
|
||||
if (written <= 0) {
|
||||
mp_raise_ValueError("Failed to serialize");
|
||||
}
|
||||
return mp_obj_new_str_copy(&mp_type_str, (const uint8_t *)xpub,
|
||||
written - 1); // written includes 0 at the end
|
||||
}
|
||||
|
||||
/// def serialize_public(self, version: int) -> str:
|
||||
/// """
|
||||
/// Serialize the public info from HD node to base58 string.
|
||||
@ -286,23 +266,20 @@ STATIC mp_obj_t serialize_public_private(mp_obj_t self, bool use_public,
|
||||
STATIC mp_obj_t mod_trezorcrypto_HDNode_serialize_public(mp_obj_t self,
|
||||
mp_obj_t version) {
|
||||
uint32_t ver = trezor_obj_get_uint(version);
|
||||
return serialize_public_private(self, true, ver);
|
||||
mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self);
|
||||
char xpub[XPUB_MAXLEN] = {0};
|
||||
hdnode_fill_public_key(&o->hdnode);
|
||||
int written = hdnode_serialize_public(&o->hdnode, o->fingerprint, ver, xpub,
|
||||
XPUB_MAXLEN);
|
||||
if (written <= 0) {
|
||||
mp_raise_ValueError("Failed to serialize");
|
||||
}
|
||||
// written includes NULL at the end of the string
|
||||
return mp_obj_new_str_copy(&mp_type_str, (const uint8_t *)xpub, written - 1);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_serialize_public_obj,
|
||||
mod_trezorcrypto_HDNode_serialize_public);
|
||||
|
||||
/// def serialize_private(self, version: int) -> str:
|
||||
/// """
|
||||
/// Serialize the private info HD node to base58 string.
|
||||
/// """
|
||||
STATIC mp_obj_t mod_trezorcrypto_HDNode_serialize_private(mp_obj_t self,
|
||||
mp_obj_t version) {
|
||||
uint32_t ver = trezor_obj_get_uint(version);
|
||||
return serialize_public_private(self, false, ver);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_serialize_private_obj,
|
||||
mod_trezorcrypto_HDNode_serialize_private);
|
||||
|
||||
/// def clone(self) -> HDNode:
|
||||
/// """
|
||||
/// Returns a copy of the HD node.
|
||||
@ -523,8 +500,6 @@ STATIC const mp_rom_map_elem_t mod_trezorcrypto_HDNode_locals_dict_table[] = {
|
||||
#endif
|
||||
{MP_ROM_QSTR(MP_QSTR_derive_path),
|
||||
MP_ROM_PTR(&mod_trezorcrypto_HDNode_derive_path_obj)},
|
||||
{MP_ROM_QSTR(MP_QSTR_serialize_private),
|
||||
MP_ROM_PTR(&mod_trezorcrypto_HDNode_serialize_private_obj)},
|
||||
{MP_ROM_QSTR(MP_QSTR_serialize_public),
|
||||
MP_ROM_PTR(&mod_trezorcrypto_HDNode_serialize_public_obj)},
|
||||
{MP_ROM_QSTR(MP_QSTR_clone),
|
||||
@ -566,38 +541,6 @@ STATIC const mp_obj_type_t mod_trezorcrypto_HDNode_type = {
|
||||
|
||||
/// mock:global
|
||||
|
||||
/// def deserialize(
|
||||
/// value: str, version_public: int, version_private: int
|
||||
/// ) -> HDNode:
|
||||
/// """
|
||||
/// Construct a BIP0032 HD node from a base58-serialized value.
|
||||
/// """
|
||||
STATIC mp_obj_t mod_trezorcrypto_bip32_deserialize(mp_obj_t value,
|
||||
mp_obj_t version_public,
|
||||
mp_obj_t version_private) {
|
||||
mp_buffer_info_t valueb;
|
||||
mp_get_buffer_raise(value, &valueb, MP_BUFFER_READ);
|
||||
if (valueb.len == 0) {
|
||||
mp_raise_ValueError("Invalid value");
|
||||
}
|
||||
uint32_t vpub = trezor_obj_get_uint(version_public);
|
||||
uint32_t vpriv = trezor_obj_get_uint(version_private);
|
||||
HDNode hdnode;
|
||||
uint32_t fingerprint;
|
||||
if (hdnode_deserialize(valueb.buf, vpub, vpriv, SECP256K1_NAME, &hdnode,
|
||||
&fingerprint) < 0) {
|
||||
mp_raise_ValueError("Failed to deserialize");
|
||||
}
|
||||
|
||||
mp_obj_HDNode_t *o = m_new_obj(mp_obj_HDNode_t);
|
||||
o->base.type = &mod_trezorcrypto_HDNode_type;
|
||||
o->hdnode = hdnode;
|
||||
o->fingerprint = fingerprint;
|
||||
return MP_OBJ_FROM_PTR(o);
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_trezorcrypto_bip32_deserialize_obj,
|
||||
mod_trezorcrypto_bip32_deserialize);
|
||||
|
||||
/// def from_seed(seed: bytes, curve_name: str) -> HDNode:
|
||||
/// """
|
||||
/// Construct a BIP0032 HD node from a BIP0039 seed value.
|
||||
@ -687,8 +630,6 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(
|
||||
STATIC const mp_rom_map_elem_t mod_trezorcrypto_bip32_globals_table[] = {
|
||||
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_bip32)},
|
||||
{MP_ROM_QSTR(MP_QSTR_HDNode), MP_ROM_PTR(&mod_trezorcrypto_HDNode_type)},
|
||||
{MP_ROM_QSTR(MP_QSTR_deserialize),
|
||||
MP_ROM_PTR(&mod_trezorcrypto_bip32_deserialize_obj)},
|
||||
{MP_ROM_QSTR(MP_QSTR_from_seed),
|
||||
MP_ROM_PTR(&mod_trezorcrypto_bip32_from_seed_obj)},
|
||||
#if !BITCOIN_ONLY
|
||||
|
@ -41,11 +41,6 @@ class HDNode:
|
||||
Serialize the public info from HD node to base58 string.
|
||||
"""
|
||||
|
||||
def serialize_private(self, version: int) -> str:
|
||||
"""
|
||||
Serialize the private info HD node to base58 string.
|
||||
"""
|
||||
|
||||
def clone(self) -> HDNode:
|
||||
"""
|
||||
Returns a copy of the HD node.
|
||||
@ -114,15 +109,6 @@ class HDNode:
|
||||
"""
|
||||
|
||||
|
||||
# extmod/modtrezorcrypto/modtrezorcrypto-bip32.h
|
||||
def deserialize(
|
||||
value: str, version_public: int, version_private: int
|
||||
) -> HDNode:
|
||||
"""
|
||||
Construct a BIP0032 HD node from a base58-serialized value.
|
||||
"""
|
||||
|
||||
|
||||
# extmod/modtrezorcrypto/modtrezorcrypto-bip32.h
|
||||
def from_seed(seed: bytes, curve_name: str) -> HDNode:
|
||||
"""
|
||||
|
@ -42,16 +42,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508'))
|
||||
self.assertEqual(n.private_key(), unhexlify('e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35'))
|
||||
self.assertEqual(n.public_key(), unhexlify('0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0']
|
||||
n.derive(HARDENED | 0)
|
||||
@ -59,16 +51,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('47fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141'))
|
||||
self.assertEqual(n.private_key(), unhexlify('edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea'))
|
||||
self.assertEqual(n.public_key(), unhexlify('035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0'/1]
|
||||
n.derive(1)
|
||||
@ -76,16 +60,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('2a7857631386ba23dacac34180dd1983734e444fdbf774041578e9b6adb37c19'))
|
||||
self.assertEqual(n.private_key(), unhexlify('3c6cb8d0f6a264c91ea8b5030fadaa8e538b020f0a387421a12de9319dc93368'))
|
||||
self.assertEqual(n.public_key(), unhexlify('03501e454bf00751f24b1b489aa925215d66af2234e3891c3b21a52bedb3cd711c'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0'/1/2']
|
||||
n.derive(HARDENED | 2)
|
||||
@ -93,16 +69,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('04466b9cc8e161e966409ca52986c584f07e9dc81f735db683c3ff6ec7b1503f'))
|
||||
self.assertEqual(n.private_key(), unhexlify('cbce0d719ecf7431d88e6a89fa1483e02e35092af60c042b1df2ff59fa424dca'))
|
||||
self.assertEqual(n.public_key(), unhexlify('0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0'/1/2'/2]
|
||||
n.derive(2)
|
||||
@ -110,16 +78,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('cfb71883f01676f587d023cc53a35bc7f88f724b1f8c2892ac1275ac822a3edd'))
|
||||
self.assertEqual(n.private_key(), unhexlify('0f479245fb19a38a1954c5c7c0ebab2f9bdfd96a17563ef28a6a4b1a2a764ef4'))
|
||||
self.assertEqual(n.public_key(), unhexlify('02e8445082a72f29b75ca48748a914df60622a609cacfce8ed0e35804560741d29'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJAyiLjTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0'/1/2'/2/1000000000]
|
||||
n.derive(1000000000)
|
||||
@ -127,16 +87,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('c783e67b921d2beb8f6b389cc646d7263b4145701dadd2161548a8b078e65e9e'))
|
||||
self.assertEqual(n.private_key(), unhexlify('471b76e389e528d6de6d816857e012c5455051cad6660850e58372a6c3e6e7c8'))
|
||||
self.assertEqual(n.public_key(), unhexlify('022a471424da5e657499d1ff51cb43c47481a03b1e77f951fe64cec9f5a48f7011'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
def test_secp256k1_vector_2_derive(self):
|
||||
# pylint: disable=C0301
|
||||
@ -150,16 +102,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('60499f801b896d83179a4374aeb7822aaeaceaa0db1f85ee3e904c4defbd9689'))
|
||||
self.assertEqual(n.private_key(), unhexlify('4b03d6fc340455b363f51020ad3ecca4f0850280cf436c70c727923f6db46c3e'))
|
||||
self.assertEqual(n.public_key(), unhexlify('03cbcaa9c98c877a26977d00825c956a238e8dddfbd322cce4f74b0b5bd6ace4a7'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0]
|
||||
n.derive(0)
|
||||
@ -167,16 +111,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('f0909affaa7ee7abe5dd4e100598d4dc53cd709d5a5c2cac40e7412f232f7c9c'))
|
||||
self.assertEqual(n.private_key(), unhexlify('abe74a98f6c7eabee0428f53798f0ab8aa1bd37873999041703c742f15ac7e1e'))
|
||||
self.assertEqual(n.public_key(), unhexlify('02fc9e5af0ac8d9b3cecfe2a888e2117ba3d089d8585886c9c826b6b22a98d12ea'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0/2147483647']
|
||||
n.derive(HARDENED | 2147483647)
|
||||
@ -184,16 +120,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('be17a268474a6bb9c61e1d720cf6215e2a88c5406c4aee7b38547f585c9a37d9'))
|
||||
self.assertEqual(n.private_key(), unhexlify('877c779ad9687164e9c2f4f0f4ff0340814392330693ce95a58fe18fd52e6e93'))
|
||||
self.assertEqual(n.public_key(), unhexlify('03c01e7425647bdefa82b12d9bad5e3e6865bee0502694b94ca58b666abc0a5c3b'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ85ySDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0/2147483647'/1]
|
||||
n.derive(1)
|
||||
@ -201,16 +129,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('f366f48f1ea9f2d1d3fe958c95ca84ea18e4c4ddb9366c336c927eb246fb38cb'))
|
||||
self.assertEqual(n.private_key(), unhexlify('704addf544a06e5ee4bea37098463c23613da32020d604506da8c0518e1da4b7'))
|
||||
self.assertEqual(n.public_key(), unhexlify('03a7d1d856deb74c508e05031f9895dab54626251b3806e16b4bd12e781a7df5b9'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0/2147483647'/1/2147483646']
|
||||
n.derive(HARDENED | 2147483646)
|
||||
@ -218,16 +138,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('637807030d55d01f9a0cb3a7839515d796bd07706386a6eddf06cc29a65a0e29'))
|
||||
self.assertEqual(n.private_key(), unhexlify('f1c7c871a54a804afe328b4c83a1c33b8e5ff48f5087273f04efa83b247d6a2d'))
|
||||
self.assertEqual(n.public_key(), unhexlify('02d2b36900396c9282fa14628566582f206a5dd0bcc8d5e892611806cafb0301f0'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0/2147483647'/1/2147483646'/2]
|
||||
n.derive(2)
|
||||
@ -235,16 +147,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('9452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271'))
|
||||
self.assertEqual(n.private_key(), unhexlify('bb7d39bdb83ecf58f2fd82b6d918341cbef428661ef01ab97c28a4842125ac23'))
|
||||
self.assertEqual(n.public_key(), unhexlify('024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
def test_secp256k1_vector_1_derive_path(self):
|
||||
# pylint: disable=C0301
|
||||
@ -259,16 +163,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('873dff81c02f525623fd1fe5167eac3a55a049de3d314bb42ee227ffed37d508'))
|
||||
self.assertEqual(n.private_key(), unhexlify('e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35'))
|
||||
self.assertEqual(n.public_key(), unhexlify('0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0']
|
||||
n = m.clone()
|
||||
@ -277,16 +173,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('47fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141'))
|
||||
self.assertEqual(n.private_key(), unhexlify('edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea'))
|
||||
self.assertEqual(n.public_key(), unhexlify('035a784662a4a20a65bf6aab9ae98a6c068a81c52e4b032c0fb5400c706cfccc56'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0'/1]
|
||||
n = m.clone()
|
||||
@ -295,16 +183,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('2a7857631386ba23dacac34180dd1983734e444fdbf774041578e9b6adb37c19'))
|
||||
self.assertEqual(n.private_key(), unhexlify('3c6cb8d0f6a264c91ea8b5030fadaa8e538b020f0a387421a12de9319dc93368'))
|
||||
self.assertEqual(n.public_key(), unhexlify('03501e454bf00751f24b1b489aa925215d66af2234e3891c3b21a52bedb3cd711c'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0'/1/2']
|
||||
n = m.clone()
|
||||
@ -313,16 +193,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('04466b9cc8e161e966409ca52986c584f07e9dc81f735db683c3ff6ec7b1503f'))
|
||||
self.assertEqual(n.private_key(), unhexlify('cbce0d719ecf7431d88e6a89fa1483e02e35092af60c042b1df2ff59fa424dca'))
|
||||
self.assertEqual(n.public_key(), unhexlify('0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0'/1/2'/2]
|
||||
n = m.clone()
|
||||
@ -331,16 +203,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('cfb71883f01676f587d023cc53a35bc7f88f724b1f8c2892ac1275ac822a3edd'))
|
||||
self.assertEqual(n.private_key(), unhexlify('0f479245fb19a38a1954c5c7c0ebab2f9bdfd96a17563ef28a6a4b1a2a764ef4'))
|
||||
self.assertEqual(n.public_key(), unhexlify('02e8445082a72f29b75ca48748a914df60622a609cacfce8ed0e35804560741d29'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJAyiLjTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0'/1/2'/2/1000000000]
|
||||
n = m.clone()
|
||||
@ -349,16 +213,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('c783e67b921d2beb8f6b389cc646d7263b4145701dadd2161548a8b078e65e9e'))
|
||||
self.assertEqual(n.private_key(), unhexlify('471b76e389e528d6de6d816857e012c5455051cad6660850e58372a6c3e6e7c8'))
|
||||
self.assertEqual(n.public_key(), unhexlify('022a471424da5e657499d1ff51cb43c47481a03b1e77f951fe64cec9f5a48f7011'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
def test_secp256k1_vector_2_derive_path(self):
|
||||
# pylint: disable=C0301
|
||||
@ -373,16 +229,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('60499f801b896d83179a4374aeb7822aaeaceaa0db1f85ee3e904c4defbd9689'))
|
||||
self.assertEqual(n.private_key(), unhexlify('4b03d6fc340455b363f51020ad3ecca4f0850280cf436c70c727923f6db46c3e'))
|
||||
self.assertEqual(n.public_key(), unhexlify('03cbcaa9c98c877a26977d00825c956a238e8dddfbd322cce4f74b0b5bd6ace4a7'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0]
|
||||
n = m.clone()
|
||||
@ -391,16 +239,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('f0909affaa7ee7abe5dd4e100598d4dc53cd709d5a5c2cac40e7412f232f7c9c'))
|
||||
self.assertEqual(n.private_key(), unhexlify('abe74a98f6c7eabee0428f53798f0ab8aa1bd37873999041703c742f15ac7e1e'))
|
||||
self.assertEqual(n.public_key(), unhexlify('02fc9e5af0ac8d9b3cecfe2a888e2117ba3d089d8585886c9c826b6b22a98d12ea'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0/2147483647']
|
||||
n = m.clone()
|
||||
@ -409,16 +249,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('be17a268474a6bb9c61e1d720cf6215e2a88c5406c4aee7b38547f585c9a37d9'))
|
||||
self.assertEqual(n.private_key(), unhexlify('877c779ad9687164e9c2f4f0f4ff0340814392330693ce95a58fe18fd52e6e93'))
|
||||
self.assertEqual(n.public_key(), unhexlify('03c01e7425647bdefa82b12d9bad5e3e6865bee0502694b94ca58b666abc0a5c3b'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ85ySDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0/2147483647'/1]
|
||||
n = m.clone()
|
||||
@ -427,16 +259,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('f366f48f1ea9f2d1d3fe958c95ca84ea18e4c4ddb9366c336c927eb246fb38cb'))
|
||||
self.assertEqual(n.private_key(), unhexlify('704addf544a06e5ee4bea37098463c23613da32020d604506da8c0518e1da4b7'))
|
||||
self.assertEqual(n.public_key(), unhexlify('03a7d1d856deb74c508e05031f9895dab54626251b3806e16b4bd12e781a7df5b9'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0/2147483647'/1/2147483646']
|
||||
n = m.clone()
|
||||
@ -445,16 +269,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('637807030d55d01f9a0cb3a7839515d796bd07706386a6eddf06cc29a65a0e29'))
|
||||
self.assertEqual(n.private_key(), unhexlify('f1c7c871a54a804afe328b4c83a1c33b8e5ff48f5087273f04efa83b247d6a2d'))
|
||||
self.assertEqual(n.public_key(), unhexlify('02d2b36900396c9282fa14628566582f206a5dd0bcc8d5e892611806cafb0301f0'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
# [Chain m/0/2147483647'/1/2147483646'/2]
|
||||
n = m.clone()
|
||||
@ -463,16 +279,8 @@ class TestCryptoBip32(unittest.TestCase):
|
||||
self.assertEqual(n.chain_code(), unhexlify('9452b549be8cea3ecb7a84bec10dcfd94afe4d129ebfd3b3cb58eedf394ed271'))
|
||||
self.assertEqual(n.private_key(), unhexlify('bb7d39bdb83ecf58f2fd82b6d918341cbef428661ef01ab97c28a4842125ac23'))
|
||||
self.assertEqual(n.public_key(), unhexlify('024d902e1a2fc7a8755ab5b694c575fce742c48d9ff192e63df5193e4c7afe1f9c'))
|
||||
ns = n.serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns, 'xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j')
|
||||
ns2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE).serialize_private(VERSION_PRIVATE)
|
||||
self.assertEqual(ns2, ns)
|
||||
ns = n.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns, 'xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt')
|
||||
n2 = bip32.deserialize(ns, VERSION_PUBLIC, VERSION_PRIVATE)
|
||||
self.assertEqual(n2.private_key(), bytes(32))
|
||||
ns2 = n2.serialize_public(VERSION_PUBLIC)
|
||||
self.assertEqual(ns2, ns)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -824,7 +824,7 @@ int hdnode_get_shared_key(const HDNode *node, const uint8_t *peer_public_key,
|
||||
}
|
||||
|
||||
static int hdnode_serialize(const HDNode *node, uint32_t fingerprint,
|
||||
uint32_t version, char use_public, char *str,
|
||||
uint32_t version, bool use_private, char *str,
|
||||
int strsize) {
|
||||
uint8_t node_data[78] = {0};
|
||||
write_be(node_data, version);
|
||||
@ -832,11 +832,11 @@ static int hdnode_serialize(const HDNode *node, uint32_t fingerprint,
|
||||
write_be(node_data + 5, fingerprint);
|
||||
write_be(node_data + 9, node->child_num);
|
||||
memcpy(node_data + 13, node->chain_code, 32);
|
||||
if (use_public) {
|
||||
memcpy(node_data + 45, node->public_key, 33);
|
||||
} else {
|
||||
if (use_private) {
|
||||
node_data[45] = 0;
|
||||
memcpy(node_data + 46, node->private_key, 32);
|
||||
} else {
|
||||
memcpy(node_data + 45, node->public_key, 33);
|
||||
}
|
||||
int ret = base58_encode_check(node_data, sizeof(node_data),
|
||||
node->curve->hasher_base58, str, strsize);
|
||||
@ -846,18 +846,18 @@ static int hdnode_serialize(const HDNode *node, uint32_t fingerprint,
|
||||
|
||||
int hdnode_serialize_public(const HDNode *node, uint32_t fingerprint,
|
||||
uint32_t version, char *str, int strsize) {
|
||||
return hdnode_serialize(node, fingerprint, version, 1, str, strsize);
|
||||
return hdnode_serialize(node, fingerprint, version, false, str, strsize);
|
||||
}
|
||||
|
||||
int hdnode_serialize_private(const HDNode *node, uint32_t fingerprint,
|
||||
uint32_t version, char *str, int strsize) {
|
||||
return hdnode_serialize(node, fingerprint, version, 0, str, strsize);
|
||||
return hdnode_serialize(node, fingerprint, version, true, str, strsize);
|
||||
}
|
||||
|
||||
// check for validity of curve point in case of public data not performed
|
||||
int hdnode_deserialize(const char *str, uint32_t version_public,
|
||||
uint32_t version_private, const char *curve,
|
||||
HDNode *node, uint32_t *fingerprint) {
|
||||
static int hdnode_deserialize(const char *str, uint32_t version,
|
||||
bool use_private, const char *curve, HDNode *node,
|
||||
uint32_t *fingerprint) {
|
||||
uint8_t node_data[78] = {0};
|
||||
memzero(node, sizeof(HDNode));
|
||||
node->curve = get_curve_by_name(curve);
|
||||
@ -865,18 +865,20 @@ int hdnode_deserialize(const char *str, uint32_t version_public,
|
||||
sizeof(node_data)) != sizeof(node_data)) {
|
||||
return -1;
|
||||
}
|
||||
uint32_t version = read_be(node_data);
|
||||
if (version == version_public) {
|
||||
memzero(node->private_key, sizeof(node->private_key));
|
||||
memcpy(node->public_key, node_data + 45, 33);
|
||||
} else if (version == version_private) { // private node
|
||||
if (node_data[45]) { // invalid data
|
||||
uint32_t ver = read_be(node_data);
|
||||
if (ver != version) {
|
||||
return -3; // invalid version
|
||||
}
|
||||
if (use_private) {
|
||||
// invalid data
|
||||
if (node_data[45]) {
|
||||
return -2;
|
||||
}
|
||||
memcpy(node->private_key, node_data + 46, 32);
|
||||
memzero(node->public_key, sizeof(node->public_key));
|
||||
} else {
|
||||
return -3; // invalid version
|
||||
memzero(node->private_key, sizeof(node->private_key));
|
||||
memcpy(node->public_key, node_data + 45, 33);
|
||||
}
|
||||
node->depth = node_data[4];
|
||||
if (fingerprint) {
|
||||
@ -887,6 +889,18 @@ int hdnode_deserialize(const char *str, uint32_t version_public,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int hdnode_deserialize_public(const char *str, uint32_t version,
|
||||
const char *curve, HDNode *node,
|
||||
uint32_t *fingerprint) {
|
||||
return hdnode_deserialize(str, version, false, curve, node, fingerprint);
|
||||
}
|
||||
|
||||
int hdnode_deserialize_private(const char *str, uint32_t version,
|
||||
const char *curve, HDNode *node,
|
||||
uint32_t *fingerprint) {
|
||||
return hdnode_deserialize(str, version, true, curve, node, fingerprint);
|
||||
}
|
||||
|
||||
const curve_info *get_curve_by_name(const char *curve_name) {
|
||||
if (curve_name == 0) {
|
||||
return 0;
|
||||
|
@ -133,9 +133,13 @@ int hdnode_serialize_public(const HDNode *node, uint32_t fingerprint,
|
||||
int hdnode_serialize_private(const HDNode *node, uint32_t fingerprint,
|
||||
uint32_t version, char *str, int strsize);
|
||||
|
||||
int hdnode_deserialize(const char *str, uint32_t version_public,
|
||||
uint32_t version_private, const char *curve,
|
||||
HDNode *node, uint32_t *fingerprint);
|
||||
int hdnode_deserialize_public(const char *str, uint32_t version,
|
||||
const char *curve, HDNode *node,
|
||||
uint32_t *fingerprint);
|
||||
|
||||
int hdnode_deserialize_private(const char *str, uint32_t version,
|
||||
const char *curve, HDNode *node,
|
||||
uint32_t *fingerprint);
|
||||
|
||||
void hdnode_get_address_raw(HDNode *node, uint32_t version, uint8_t *addr_raw);
|
||||
void hdnode_get_address(HDNode *node, uint32_t version, char *addr,
|
||||
|
@ -1167,8 +1167,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqji"
|
||||
"ChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
@ -1177,8 +1177,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2"
|
||||
"gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1209,8 +1209,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4"
|
||||
"cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1218,8 +1218,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP"
|
||||
"6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1250,8 +1250,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSx"
|
||||
"qu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1259,8 +1259,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFH"
|
||||
"KkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1291,8 +1291,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptW"
|
||||
"mT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1300,8 +1300,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgq"
|
||||
"FJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1332,8 +1332,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Ty"
|
||||
"h8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1341,8 +1341,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJ"
|
||||
"AyiLjTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1373,8 +1373,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8"
|
||||
"kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1382,8 +1382,8 @@ START_TEST(test_bip32_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNT"
|
||||
"EcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1430,8 +1430,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGds"
|
||||
"o3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1439,8 +1439,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSC"
|
||||
"Gu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1472,8 +1472,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT"
|
||||
"3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1481,8 +1481,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGm"
|
||||
"XUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1514,8 +1514,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYE"
|
||||
"eEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1523,8 +1523,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ"
|
||||
"85ySDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1556,8 +1556,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd"
|
||||
"25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1565,8 +1565,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5Ew"
|
||||
"VvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1598,8 +1598,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz"
|
||||
"7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1607,8 +1607,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJ"
|
||||
"bZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1640,8 +1640,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw"
|
||||
"7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1649,8 +1649,8 @@ START_TEST(test_bip32_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLF"
|
||||
"bdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1712,8 +1712,8 @@ START_TEST(test_bip32_vector_3) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprv9s21ZrQH143K25QhxbucbDDuQ4naNntJRi4KUfWT7xo4EKsHt2QJDu7"
|
||||
"KXp1A3u7Bi1j8ph3EGsZ9Xvz9dGuVrtHHs7pXeTzjuxBrCmmhgC6");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1721,8 +1721,8 @@ START_TEST(test_bip32_vector_3) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub661MyMwAqRbcEZVB4dScxMAdx6d4nFc9nvyvH3v4gJL378CSRZiYmhR"
|
||||
"oP7mBy6gSPSCYk6SzXPTf3ND1cZAceL7SfJ1Z3GC8vBgp2epUt13");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -1738,8 +1738,8 @@ START_TEST(test_bip32_vector_3) {
|
||||
ck_assert_str_eq(str,
|
||||
"xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu"
|
||||
"2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_private(str, VERSION_PRIVATE, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -1747,8 +1747,8 @@ START_TEST(test_bip32_vector_3) {
|
||||
ck_assert_str_eq(str,
|
||||
"xpub68NZiKmJWnxxS6aaHmn81bvJeTESw724CRDs6HbuccFQN9Ku14VQrAD"
|
||||
"WgqbhhTHBaohPX4CjNLf9fq9MYo6oDaPPLPxSb7gwQN3ih19Zm4Y");
|
||||
r = hdnode_deserialize(str, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node2, NULL);
|
||||
r = hdnode_deserialize_public(str, VERSION_PUBLIC, SECP256K1_NAME, &node2,
|
||||
NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -2716,8 +2716,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3hCznBesA6jBtmoyVFPfyMSZ1qYZ3WdjdebquvkEfmRfxC9VFEFi2YD"
|
||||
"aJqHnx7uGe75eGSa3Mn3oHK11hBW7KZUrPxwbCPBmuCi1nwm182s");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
@ -2727,8 +2727,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZ9169KDAEUnyoBhjjmT2VaEodr6pUTDoqCEAeqgbfr2JfkB88BbK77j"
|
||||
"bTYbcYXb2FVz7DKBdW4P618yd51MwF8DjKVopSbS7Lkgi6bowX5w");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -2759,8 +2759,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3kUQDBztdyjKuwnaL3hfKYpT7W6X2huYH5d61YSWFBebSYwEBHAXJkC"
|
||||
"pQ7rvMAxPzKqxVCGLvBqWvGxXjAyMJsV1XwKkfnQCM9KctC8k8bk");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -2769,8 +2769,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZCGVaKZBiMo7pMgLaZm1qmchjWenTeVcUdFQkTNsFGFEA6xs4EW8PKi"
|
||||
"qYqP7HBAitt9Hw16VQkQ1tjsZQSHNWFc6bEK6bLqrbco24FzBTY4");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -2801,8 +2801,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3nRtCZ5VAoHW4RUwQgRafSNRPUDFrmsgyY71A5eoZceVfuyL9SbZe2r"
|
||||
"cbwDW2UwpkEniE4urffgbypegscNchPajWzy9QS4cRxF8QYXsZtq");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -2811,8 +2811,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZEDyZgdnFBMHxqNhfCUwBfAg1UmXHiTmB5jKtzbAZhF8PTzy2PwAicN"
|
||||
"dkg1CmW6TARxQeUbgC7nAQenJts4YoG3KMiqcjsjgeMvwLc43w6C");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -2843,8 +2843,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3pYtkZK168vgrU38gXkUSjHQ2LGpEUzQ9fXrR8fGUR59YviSnm6U82X"
|
||||
"jQYhpJEUPnVcC9bguJBQU5xVM4VFcDHu9BgScGPA6mQMH4bn5Cth");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -2853,8 +2853,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZGLz7gsJAWzUksvtw3opxx5eeLq5fRaUMDABA3bdUVfnGUk5fiS5Cc3"
|
||||
"kZGTjWtYr3jrEavQQnAF6jv2WCpZtFX4uFgifXqev6ED1TM9rTCB");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -2885,8 +2885,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3r7zqYFjT3NiNzdnwGxGpYh6S1TJCp1zA6mSEGaqLBJFnCB94cRMp7Y"
|
||||
"YLR49aTZHZ7ya1CXwQJ6rodKeU9NgQTxkPSK7pzgZRgjYkQ7rgJh");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -2895,8 +2895,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZHv6Cfp2XRSWHQXZBo1dLmVM421Zdkc4MePkyBXCLFttVkCmwZkxth4"
|
||||
"ZV9PzkFP3DtD5xcVq2CPSYpJMWMaoxu1ixz4GNZFVcE2xnHP6chJ");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -2927,8 +2927,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3tJXnTDSb3uE6Euo6WvvhFKfBMNfxuJt5smqyPoHEoomoBMQyhYoQSK"
|
||||
"JAHWtWxmuqdUVb8q9J2NaTkF6rYm6XDrSotkJ55bM21fffa7VV97");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -2937,8 +2937,8 @@ START_TEST(test_bip32_decred_vector_1) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZL6d9amjfRy1zeoZM2zHDU7uoMvwPqtxHRQAiJjeEtQQWjP3retQV1q"
|
||||
"KJyzUd6ZJNgbJGXjtc5pdoBcTTYTLoxQzvV9JJCzCjB2eCWpRf8T");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -2989,8 +2989,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3hCznBesA6jBtPKJbQTxRZAKG2gyj8tZKEPaCsV4e9YYFBAgRP2eTSP"
|
||||
"Aeu4r8dTMt9q51j2Vdt5zNqj7jbtovvocrP1qLj6WUTLF9xYQt4y");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -2999,8 +2999,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZ9169KDAEUnynoD4qvXJwmxZt3FFA5UdWn1twnRReE9AxjCKJLNFY1u"
|
||||
"BoegbFmwzA4Du7yqnu8tLivhrCCH6P3DgBS1HH5vmf8MpNXvvYT9");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -3032,8 +3032,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3jMy45BuuDETfxi59P8NTSjHPrNVq4wPRfLgRd57923L2hosj5NUEqi"
|
||||
"LYQ4i7fJtUpiXZLr2wUeToJY2Tm5sCpAJdajEHDmieVJiPQNXwu9");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -3042,8 +3042,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZBA4RCkCybJFaNbqPuBiyfXY1rvmG1XTdCy1AY1U96dxkFqWc2i5KRE"
|
||||
"Mh7NYPpy7ZPMhdpFMAesex3JdFDfX4J5FEW3HjSacqEYPfwb9Cj7");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -3075,8 +3075,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3mgHPRgK838mLK6T1p6WeBoJoJtXA1pGTHjqFuyHekcM7UTuER8fGwe"
|
||||
"RRsoLqSuHa98uskVPnJnfWZEBUC1AVmXnSCPDvUFKydXNnnPHTuQ");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -3085,8 +3085,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZDUNkZEcCRCZEizDGL9sAQbZRKSnaxQLeqN9zpueeqCyq2VY7NUGMXA"
|
||||
"SacsK96S8XzNjq3YgFgwLtj8MJBToW6To9U5zxuazEyh89bjR1xA");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -3118,8 +3118,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3oFqwZZ9bJcUmhAeJyyshvrTWtrAsHfcRYQbEzNiiH5nGvM6wVTDn6w"
|
||||
"oQEz92b2EHTYZBtLi82jKEnxSouA3cVaW8YWBsw5c3f4mwAhA3d2");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -3128,8 +3128,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZF3wJh7SfggGg74QZW3EE9ei8uQSJEFgd62uyuK5iMgQzUNjpSnprgT"
|
||||
"pYz3d6Q3fXXtEEXQqpzWcP4LUVuXFsgA8JKt1Hot5kyUk4pPRhDz");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -3161,8 +3161,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3qF3177i87wMirg6sraDvqty8yZg6THpXFPSXuM5AShBiiUQbq8FhSZ"
|
||||
"DGkYmBNR3RKfBrxzkKDBpsRFJfTnQfLsvpPPqRnakat6hHQA43X9");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -3171,8 +3171,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZH38NEg1CW19dGZs8NdaT4hDkz7wXPstio1mGpHSAXHpSGW3UnTrn25"
|
||||
"ERT1Mp8ae5GMoQHMbgQiPrChMXQMdx3UqS8YqFkT1pqait8fY92u");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
@ -3204,8 +3204,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dprv3s15tfqzxhw8Kmo7RBEqMeyvC7uGekLniSmvbs3bckpxQ6ks1KKqfmH"
|
||||
"144Jgh3PLxkyZRcS367kp7DrtUmnG16NpnsoNhxSXRgKbJJ7MUQR");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_private(str, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
hdnode_fill_public_key(&node2);
|
||||
ck_assert_mem_eq(&node, &node2, sizeof(HDNode));
|
||||
@ -3214,19 +3214,18 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZJoBFoQJ35zvEBgsfhJBssnAp8TY5gvruzQFLmyxcqRb7enVtGfSkLo"
|
||||
"2CkAZJMpa6T2fx6fUtvTgXtUvSVgAZ56bEwGxQsToeZfFV8VadE1");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
memcpy(&node3, &node, sizeof(HDNode));
|
||||
memzero(&node3.private_key, 32);
|
||||
ck_assert_mem_eq(&node2, &node3, sizeof(HDNode));
|
||||
|
||||
// init m
|
||||
hdnode_deserialize(
|
||||
hdnode_deserialize_public(
|
||||
"dpubZF4LSCdF9YKZfNzTVYhz4RBxsjYXqms8AQnMBHXZ8GUKoRSigG7kQnKiJt5pzk93Q8Fx"
|
||||
"cdVBEkQZruSXduGtWnkwXzGnjbSovQ97dCxqaXc",
|
||||
DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE, SECP256K1_DECRED_NAME,
|
||||
&node, NULL);
|
||||
DECRED_VERSION_PUBLIC, SECP256K1_DECRED_NAME, &node, NULL);
|
||||
|
||||
// test public derivation
|
||||
// [Chain m/0]
|
||||
@ -3249,8 +3248,8 @@ START_TEST(test_bip32_decred_vector_2) {
|
||||
ck_assert_str_eq(str,
|
||||
"dpubZHJs2Z3PtHbbpaXQCi5wBKPhU8tC5ztBKUYBCYNGKk8eZ1EmBs3MhnL"
|
||||
"JbxHFMAahGnDnZT7qZxC7AXKP8PB6BDNUZgkG77moNMRmXyQ6s6s");
|
||||
r = hdnode_deserialize(str, DECRED_VERSION_PUBLIC, DECRED_VERSION_PRIVATE,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
r = hdnode_deserialize_public(str, DECRED_VERSION_PUBLIC,
|
||||
SECP256K1_DECRED_NAME, &node2, NULL);
|
||||
ck_assert_int_eq(r, 0);
|
||||
ck_assert_mem_eq(&node2, &node, sizeof(HDNode));
|
||||
}
|
||||
|
@ -7,14 +7,13 @@
|
||||
#include "ecdsa.h"
|
||||
|
||||
#define VERSION_PUBLIC 0x0488b21e
|
||||
#define VERSION_PRIVATE 0x0488ade4
|
||||
|
||||
void process_job(uint32_t jobid, const char *xpub, uint32_t change,
|
||||
uint32_t from, uint32_t to) {
|
||||
HDNode node, child;
|
||||
if (change > 1 || to <= from ||
|
||||
hdnode_deserialize(xpub, VERSION_PUBLIC, VERSION_PRIVATE, SECP256K1_NAME,
|
||||
&node, NULL) != 0) {
|
||||
hdnode_deserialize_public(xpub, VERSION_PUBLIC, SECP256K1_NAME, &node,
|
||||
NULL) != 0) {
|
||||
printf("%d error\n", jobid);
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user