|
|
|
@ -815,6 +815,27 @@ void ecdsa_get_public_key65(const ecdsa_curve *curve, const uint8_t *priv_key, u
|
|
|
|
|
MEMSET_BZERO(&k, sizeof(k));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ecdsa_uncompress_pubkey(const ecdsa_curve *curve, const uint8_t *pub_key, uint8_t *uncompressed)
|
|
|
|
|
{
|
|
|
|
|
if (pub_key[0] == 2 || pub_key[0] == 3) {
|
|
|
|
|
bignum256 x, y;
|
|
|
|
|
|
|
|
|
|
bn_read_be(pub_key + 1, &x);
|
|
|
|
|
// uncompress_coords will check for pub_key[0] & 1
|
|
|
|
|
uncompress_coords(curve, pub_key[0], &x, &y);
|
|
|
|
|
|
|
|
|
|
uncompressed[0] = 4;
|
|
|
|
|
memcpy(uncompressed + 1, pub_key + 1, 32);
|
|
|
|
|
bn_write_be(&y, uncompressed + 33);
|
|
|
|
|
return 1;
|
|
|
|
|
} else if (pub_key[0] == 4) {
|
|
|
|
|
memcpy(uncompressed, pub_key, 65);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ecdsa_get_pubkeyhash(const uint8_t *pub_key, uint8_t *pubkeyhash)
|
|
|
|
|
{
|
|
|
|
|
uint8_t h[32];
|
|
|
|
|