normalize y^2 in pubkey validation

fix last commit
pull/25/head
Pavol Rusnak 10 years ago
parent b9d5896174
commit 0fe1857513

@ -459,7 +459,7 @@ int ecdsa_read_pubkey(const uint8_t *pub_key, curve_point *pub)
if (pub_key[0] == 0x04) {
bn_read_be(pub_key + 1, &(pub->x));
bn_read_be(pub_key + 33, &(pub->y));
#ifdef USE_PUBKEY_VALIDATE
#if USE_PUBKEY_VALIDATE
return ecdsa_validate_pubkey(pub);
#else
return 1;
@ -468,7 +468,7 @@ int ecdsa_read_pubkey(const uint8_t *pub_key, curve_point *pub)
if (pub_key[0] == 0x02 || pub_key[0] == 0x03) { // compute missing y coords
bn_read_be(pub_key + 1, &(pub->x));
uncompress_coords(pub_key[0], &(pub->x), &(pub->y));
#ifdef USE_PUBKEY_VALIDATE
#if USE_PUBKEY_VALIDATE
return ecdsa_validate_pubkey(pub);
#else
return 1;
@ -502,6 +502,8 @@ int ecdsa_validate_pubkey(const curve_point *pub)
// y^2
bn_multiply(&(pub->y), &y_2, &prime256k1);
bn_mod(&y_2, &prime256k1);
// x^3 + b
bn_multiply(&(pub->x), &x_3_b, &prime256k1);
bn_multiply(&(pub->x), &x_3_b, &prime256k1);
@ -542,7 +544,6 @@ int ecdsa_verify_double(const uint8_t *pub_key, const uint8_t *sig, const uint8_
}
// returns 0 if verification succeeded
// it is assumed that public key is valid otherwise calling this does not make much sense
int ecdsa_verify_digest(const uint8_t *pub_key, const uint8_t *sig, const uint8_t *digest)
{
int i, j;

@ -887,7 +887,7 @@ START_TEST(test_pubkey_validity)
res = ecdsa_read_pubkey(pub_key, &pub);
ck_assert_int_eq(res, 1);
#ifdef USE_PUBKEY_VALIDATE
#if USE_PUBKEY_VALIDATE
memcpy(pub_key, fromhex("04f80490839af36d13701ec3f9eebdac901b51c362119d74553a3c537faff31b17e2a59ebddbdac9e87b816307a7ed5b826b8f40b92719086238e1bebf00000000"), 65);
res = ecdsa_read_pubkey(pub_key, &pub);
ck_assert_int_eq(res, 0);

Loading…
Cancel
Save