diff --git a/bip32.c b/bip32.c index 554b101d7..331dc2977 100644 --- a/bip32.c +++ b/bip32.c @@ -14,8 +14,7 @@ void xprv_from_seed(uint8_t *seed, int seed_len, XprvNode *out) // this can be done because private_key[32] and chain_code[32] // form a continuous 64 byte block in the memory hmac_sha512((uint8_t *)"Bitcoin seed", 12, seed, seed_len, out->private_key); - ecdsa_get_public_key33(out->private_key, out->public_key); - ecdsa_get_address(out->public_key, 0, out->address); + xprv_fill_public(out); } void xprv_descent(XprvNode *inout, uint32_t i) @@ -44,6 +43,12 @@ void xprv_descent(XprvNode *inout, uint32_t i) inout->child_num = i; bn_write_be(&a, inout->private_key); - ecdsa_get_public_key33(inout->private_key, inout->public_key); - ecdsa_get_address(inout->public_key, 0, inout->address); + xprv_fill_public(inout); +} + +void xprv_fill_public(XprvNode *xprv) +{ + const uint8_t version = 0x00; + ecdsa_get_public_key33(xprv->private_key, xprv->public_key); + ecdsa_get_address(xprv->public_key, version, xprv->address); } diff --git a/bip32.h b/bip32.h index 417ac8ef6..fe2a28b94 100644 --- a/bip32.h +++ b/bip32.h @@ -20,4 +20,6 @@ void xprv_from_seed(uint8_t *seed, int seed_len, XprvNode *out); void xprv_descent(XprvNode *inout, uint32_t i); +void xprv_fill_public(XprvNode *xprv); + #endif diff --git a/ecdsa.c b/ecdsa.c index 92765e58f..ce2b39021 100644 --- a/ecdsa.c +++ b/ecdsa.c @@ -293,7 +293,7 @@ void ecdsa_get_public_key65(const uint8_t *priv_key, uint8_t *pub_key) bn_write_be(&R.y, pub_key + 33); } -void ecdsa_get_address(const uint8_t *pub_key, char version, char *addr) +void ecdsa_get_address(const uint8_t *pub_key, uint8_t version, char *addr) { const char code[] = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"; char *p = addr, s; diff --git a/ecdsa.h b/ecdsa.h index 0aa221bff..cea9749ef 100644 --- a/ecdsa.h +++ b/ecdsa.h @@ -35,7 +35,7 @@ int ecdsa_sign(const uint8_t *priv_key, const uint8_t *msg, uint32_t msg_len, uint8_t *sig); void ecdsa_get_public_key33(const uint8_t *priv_key, uint8_t *pub_key); void ecdsa_get_public_key65(const uint8_t *priv_key, uint8_t *pub_key); -void ecdsa_get_address(const uint8_t *pub_key, char version, char *addr); +void ecdsa_get_address(const uint8_t *pub_key, uint8_t version, char *addr); int ecdsa_verify(const uint8_t *pub_key, const uint8_t *sig, const uint8_t *msg, uint32_t msg_len); #endif