Skip to content

Commit 0fa84f8

Browse files
Merge bitcoin-core/secp256k1#1358: tests: introduce helper for non-zero random_fe_test() results
5a95a26 tests: introduce helper for non-zero `random_fe_test` results (Sebastian Falbesoner) 304421d tests: refactor: remove duplicate function `random_field_element_test` (Sebastian Falbesoner) Pull request description: There are several instances in the tests where random non-zero field elements are generated by calling `random_fe_test` in a do/while-loop with is-zero condition. This PR deduplicates all these by introducing a `random_fe_non_zero_test` helper. Note that some instances checked the is-zero condition via `secp256k1_fe_normalizes_to_zero_var`, which is unnecessary, as the result of `random_field_element_test` is already normalized (so strictly speaking, this is not a pure refactor, and there could be tiny run-time improvements, though I doubt that's measurable). Additionally, the first commit removes the function `random_field_element_test` as it is logically a duplicate of `random_fe_test`. ACKs for top commit: real-or-random: ACK 5a95a26 Tree-SHA512: 920404f38ebe8b84bfd52f3354dc17ae6a0fd6355f99b78c9aeb53bf21f7eca5fd4518edc8a422d84f430ae95864661b497de42a3ab7fa9c49515a1df2f1d466
2 parents 3aef6ab + 5a95a26 commit 0fa84f8

File tree

1 file changed

+24
-44
lines changed

1 file changed

+24
-44
lines changed

src/tests.c

Lines changed: 24 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -89,16 +89,6 @@ static void uncounting_illegal_callback_fn(const char* str, void* data) {
8989
(*p)--;
9090
}
9191

92-
static void random_field_element_test(secp256k1_fe *fe) {
93-
do {
94-
unsigned char b32[32];
95-
secp256k1_testrand256_test(b32);
96-
if (secp256k1_fe_set_b32_limit(fe, b32)) {
97-
break;
98-
}
99-
} while(1);
100-
}
101-
10292
static void random_field_element_magnitude(secp256k1_fe *fe) {
10393
secp256k1_fe zero;
10494
int n = secp256k1_testrand_int(9);
@@ -115,10 +105,26 @@ static void random_field_element_magnitude(secp256k1_fe *fe) {
115105
#endif
116106
}
117107

108+
static void random_fe_test(secp256k1_fe *x) {
109+
unsigned char bin[32];
110+
do {
111+
secp256k1_testrand256_test(bin);
112+
if (secp256k1_fe_set_b32_limit(x, bin)) {
113+
return;
114+
}
115+
} while(1);
116+
}
117+
118+
static void random_fe_non_zero_test(secp256k1_fe *fe) {
119+
do {
120+
random_fe_test(fe);
121+
} while(secp256k1_fe_is_zero(fe));
122+
}
123+
118124
static void random_group_element_test(secp256k1_ge *ge) {
119125
secp256k1_fe fe;
120126
do {
121-
random_field_element_test(&fe);
127+
random_fe_test(&fe);
122128
if (secp256k1_ge_set_xo_var(ge, &fe, secp256k1_testrand_bits(1))) {
123129
secp256k1_fe_normalize(&ge->y);
124130
break;
@@ -129,12 +135,7 @@ static void random_group_element_test(secp256k1_ge *ge) {
129135

130136
static void random_group_element_jacobian_test(secp256k1_gej *gej, const secp256k1_ge *ge) {
131137
secp256k1_fe z2, z3;
132-
do {
133-
random_field_element_test(&gej->z);
134-
if (!secp256k1_fe_is_zero(&gej->z)) {
135-
break;
136-
}
137-
} while(1);
138+
random_fe_non_zero_test(&gej->z);
138139
secp256k1_fe_sqr(&z2, &gej->z);
139140
secp256k1_fe_mul(&z3, &z2, &gej->z);
140141
secp256k1_fe_mul(&gej->x, &ge->x, &z2);
@@ -2984,16 +2985,6 @@ static void random_fe(secp256k1_fe *x) {
29842985
} while(1);
29852986
}
29862987

2987-
static void random_fe_test(secp256k1_fe *x) {
2988-
unsigned char bin[32];
2989-
do {
2990-
secp256k1_testrand256_test(bin);
2991-
if (secp256k1_fe_set_b32_limit(x, bin)) {
2992-
return;
2993-
}
2994-
} while(1);
2995-
}
2996-
29972988
static void random_fe_non_zero(secp256k1_fe *nz) {
29982989
int tries = 10;
29992990
while (--tries >= 0) {
@@ -3820,18 +3811,14 @@ static void test_ge(void) {
38203811
}
38213812

38223813
/* Generate random zf, and zfi2 = 1/zf^2, zfi3 = 1/zf^3 */
3823-
do {
3824-
random_field_element_test(&zf);
3825-
} while(secp256k1_fe_is_zero(&zf));
3814+
random_fe_non_zero_test(&zf);
38263815
random_field_element_magnitude(&zf);
38273816
secp256k1_fe_inv_var(&zfi3, &zf);
38283817
secp256k1_fe_sqr(&zfi2, &zfi3);
38293818
secp256k1_fe_mul(&zfi3, &zfi3, &zfi2);
38303819

38313820
/* Generate random r */
3832-
do {
3833-
random_field_element_test(&r);
3834-
} while(secp256k1_fe_is_zero(&r));
3821+
random_fe_non_zero_test(&r);
38353822

38363823
for (i1 = 0; i1 < 1 + 4 * runs; i1++) {
38373824
int i2;
@@ -4148,10 +4135,7 @@ static void run_gej(void) {
41484135
CHECK(!secp256k1_gej_eq_var(&a, &b));
41494136

41504137
b = a;
4151-
random_field_element_test(&fe);
4152-
if (secp256k1_fe_is_zero(&fe)) {
4153-
continue;
4154-
}
4138+
random_fe_non_zero_test(&fe);
41554139
secp256k1_gej_rescale(&a, &fe);
41564140
CHECK(secp256k1_gej_eq_var(&a, &b));
41574141
}
@@ -4590,9 +4574,7 @@ static void ecmult_const_mult_xonly(void) {
45904574
random_scalar_order_test(&q);
45914575
/* If i is odd, n=d*base.x for random non-zero d */
45924576
if (i & 1) {
4593-
do {
4594-
random_field_element_test(&d);
4595-
} while (secp256k1_fe_normalizes_to_zero_var(&d));
4577+
random_fe_non_zero_test(&d);
45964578
secp256k1_fe_mul(&n, &base.x, &d);
45974579
} else {
45984580
n = base.x;
@@ -4617,13 +4599,11 @@ static void ecmult_const_mult_xonly(void) {
46174599
random_scalar_order_test(&q);
46184600
/* Generate random X coordinate not on the curve. */
46194601
do {
4620-
random_field_element_test(&x);
4602+
random_fe_test(&x);
46214603
} while (secp256k1_ge_x_on_curve_var(&x));
46224604
/* If i is odd, n=d*x for random non-zero d. */
46234605
if (i & 1) {
4624-
do {
4625-
random_field_element_test(&d);
4626-
} while (secp256k1_fe_normalizes_to_zero_var(&d));
4606+
random_fe_non_zero_test(&d);
46274607
secp256k1_fe_mul(&n, &x, &d);
46284608
} else {
46294609
n = x;

0 commit comments

Comments
 (0)