Add functions to test if X coordinate is valid
This commit is contained in:
30
src/tests.c
30
src/tests.c
@@ -3775,7 +3775,7 @@ static void test_ge(void) {
|
||||
*/
|
||||
secp256k1_ge *ge = (secp256k1_ge *)checked_malloc(&CTX->error_callback, sizeof(secp256k1_ge) * (1 + 4 * runs));
|
||||
secp256k1_gej *gej = (secp256k1_gej *)checked_malloc(&CTX->error_callback, sizeof(secp256k1_gej) * (1 + 4 * runs));
|
||||
secp256k1_fe zf;
|
||||
secp256k1_fe zf, r;
|
||||
secp256k1_fe zfi2, zfi3;
|
||||
|
||||
secp256k1_gej_set_infinity(&gej[0]);
|
||||
@@ -3817,6 +3817,11 @@ static void test_ge(void) {
|
||||
secp256k1_fe_sqr(&zfi2, &zfi3);
|
||||
secp256k1_fe_mul(&zfi3, &zfi3, &zfi2);
|
||||
|
||||
/* Generate random r */
|
||||
do {
|
||||
random_field_element_test(&r);
|
||||
} while(secp256k1_fe_is_zero(&r));
|
||||
|
||||
for (i1 = 0; i1 < 1 + 4 * runs; i1++) {
|
||||
int i2;
|
||||
for (i2 = 0; i2 < 1 + 4 * runs; i2++) {
|
||||
@@ -3929,6 +3934,29 @@ static void test_ge(void) {
|
||||
free(ge_set_all);
|
||||
}
|
||||
|
||||
/* Test that all elements have X coordinates on the curve. */
|
||||
for (i = 1; i < 4 * runs + 1; i++) {
|
||||
secp256k1_fe n;
|
||||
CHECK(secp256k1_ge_x_on_curve_var(&ge[i].x));
|
||||
/* And the same holds after random rescaling. */
|
||||
secp256k1_fe_mul(&n, &zf, &ge[i].x);
|
||||
CHECK(secp256k1_ge_x_frac_on_curve_var(&n, &zf));
|
||||
}
|
||||
|
||||
/* Test correspondence of secp256k1_ge_x{,_frac}_on_curve_var with ge_set_xo. */
|
||||
{
|
||||
secp256k1_fe n;
|
||||
secp256k1_ge q;
|
||||
int ret_on_curve, ret_frac_on_curve, ret_set_xo;
|
||||
secp256k1_fe_mul(&n, &zf, &r);
|
||||
ret_on_curve = secp256k1_ge_x_on_curve_var(&r);
|
||||
ret_frac_on_curve = secp256k1_ge_x_frac_on_curve_var(&n, &zf);
|
||||
ret_set_xo = secp256k1_ge_set_xo_var(&q, &r, 0);
|
||||
CHECK(ret_on_curve == ret_frac_on_curve);
|
||||
CHECK(ret_on_curve == ret_set_xo);
|
||||
if (ret_set_xo) CHECK(secp256k1_fe_equal_var(&r, &q.x));
|
||||
}
|
||||
|
||||
/* Test batch gej -> ge conversion with many infinities. */
|
||||
for (i = 0; i < 4 * runs + 1; i++) {
|
||||
int odd;
|
||||
|
||||
Reference in New Issue
Block a user