mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-29 10:58:21 +00:00
normalize y^2 in pubkey validation
fix last commit
This commit is contained in:
parent
b9d5896174
commit
0fe1857513
7
ecdsa.c
7
ecdsa.c
@ -459,7 +459,7 @@ int ecdsa_read_pubkey(const uint8_t *pub_key, curve_point *pub)
|
|||||||
if (pub_key[0] == 0x04) {
|
if (pub_key[0] == 0x04) {
|
||||||
bn_read_be(pub_key + 1, &(pub->x));
|
bn_read_be(pub_key + 1, &(pub->x));
|
||||||
bn_read_be(pub_key + 33, &(pub->y));
|
bn_read_be(pub_key + 33, &(pub->y));
|
||||||
#ifdef USE_PUBKEY_VALIDATE
|
#if USE_PUBKEY_VALIDATE
|
||||||
return ecdsa_validate_pubkey(pub);
|
return ecdsa_validate_pubkey(pub);
|
||||||
#else
|
#else
|
||||||
return 1;
|
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
|
if (pub_key[0] == 0x02 || pub_key[0] == 0x03) { // compute missing y coords
|
||||||
bn_read_be(pub_key + 1, &(pub->x));
|
bn_read_be(pub_key + 1, &(pub->x));
|
||||||
uncompress_coords(pub_key[0], &(pub->x), &(pub->y));
|
uncompress_coords(pub_key[0], &(pub->x), &(pub->y));
|
||||||
#ifdef USE_PUBKEY_VALIDATE
|
#if USE_PUBKEY_VALIDATE
|
||||||
return ecdsa_validate_pubkey(pub);
|
return ecdsa_validate_pubkey(pub);
|
||||||
#else
|
#else
|
||||||
return 1;
|
return 1;
|
||||||
@ -502,6 +502,8 @@ int ecdsa_validate_pubkey(const curve_point *pub)
|
|||||||
|
|
||||||
// y^2
|
// y^2
|
||||||
bn_multiply(&(pub->y), &y_2, &prime256k1);
|
bn_multiply(&(pub->y), &y_2, &prime256k1);
|
||||||
|
bn_mod(&y_2, &prime256k1);
|
||||||
|
|
||||||
// x^3 + b
|
// x^3 + b
|
||||||
bn_multiply(&(pub->x), &x_3_b, &prime256k1);
|
bn_multiply(&(pub->x), &x_3_b, &prime256k1);
|
||||||
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
|
// 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 ecdsa_verify_digest(const uint8_t *pub_key, const uint8_t *sig, const uint8_t *digest)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
2
tests.c
2
tests.c
@ -887,7 +887,7 @@ START_TEST(test_pubkey_validity)
|
|||||||
res = ecdsa_read_pubkey(pub_key, &pub);
|
res = ecdsa_read_pubkey(pub_key, &pub);
|
||||||
ck_assert_int_eq(res, 1);
|
ck_assert_int_eq(res, 1);
|
||||||
|
|
||||||
#ifdef USE_PUBKEY_VALIDATE
|
#if USE_PUBKEY_VALIDATE
|
||||||
memcpy(pub_key, fromhex("04f80490839af36d13701ec3f9eebdac901b51c362119d74553a3c537faff31b17e2a59ebddbdac9e87b816307a7ed5b826b8f40b92719086238e1bebf00000000"), 65);
|
memcpy(pub_key, fromhex("04f80490839af36d13701ec3f9eebdac901b51c362119d74553a3c537faff31b17e2a59ebddbdac9e87b816307a7ed5b826b8f40b92719086238e1bebf00000000"), 65);
|
||||||
res = ecdsa_read_pubkey(pub_key, &pub);
|
res = ecdsa_read_pubkey(pub_key, &pub);
|
||||||
ck_assert_int_eq(res, 0);
|
ck_assert_int_eq(res, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user