Skip to content

Commit

Permalink
tests: improve fe_sqr test
Browse files Browse the repository at this point in the history
Currently the `run_sqr` test doesn't do anything with the
result of the `fe_sqr` call. Improve that by checking that
the equation `(x+y)*(x-y) = x^2 - y^2` holds for some random
values y, as suggested in issue bitcoin-core#1471 by real-or-random.
The existing loop for generating the x values is kept as-is.
  • Loading branch information
theStack committed Feb 27, 2024
1 parent cdc9a62 commit 11420a7
Showing 1 changed file with 23 additions and 10 deletions.
33 changes: 23 additions & 10 deletions src/tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -3285,18 +3285,31 @@ static void run_fe_mul(void) {
}

static void run_sqr(void) {
secp256k1_fe x, s;
int i;
secp256k1_fe x, y, lhs, rhs, tmp;

{
int i;
secp256k1_fe_set_int(&x, 1);
secp256k1_fe_negate(&x, &x, 1);
secp256k1_fe_set_int(&x, 1);
secp256k1_fe_negate(&x, &x, 1);

for (i = 1; i <= 512; ++i) {
secp256k1_fe_mul_int(&x, 2);
secp256k1_fe_normalize(&x);
secp256k1_fe_sqr(&s, &x);
}
for (i = 1; i <= 512; ++i) {
secp256k1_fe_mul_int(&x, 2);
secp256k1_fe_normalize(&x);

/* Check that (x+y)*(x-y) = x^2 - y*2 for some random values y */
random_fe_test(&y);

lhs = x;
secp256k1_fe_add(&lhs, &y); /* lhs = x+y */
secp256k1_fe_negate(&tmp, &y, 1); /* tmp = -y */
secp256k1_fe_add(&tmp, &x); /* tmp = x-y */
secp256k1_fe_mul(&lhs, &lhs, &tmp); /* lhs = (x+y)*(x-y) */

secp256k1_fe_sqr(&rhs, &x); /* rhs = x^2 */
secp256k1_fe_sqr(&tmp, &y); /* tmp = y^2 */
secp256k1_fe_negate(&tmp, &tmp, 1); /* tmp = -y^2 */
secp256k1_fe_add(&rhs, &tmp); /* rhs = x^2 - y^2 */

CHECK(fe_equal(&lhs, &rhs));
}
}

Expand Down

0 comments on commit 11420a7

Please sign in to comment.