Skip to content

Commit

Permalink
tests: simplify random_fe_non_zero (remove loop limit and unneeded …
Browse files Browse the repository at this point in the history
…normalize)

`random_fe_non_zero` contains a loop iteration limit that ensures that
we abort if `random_fe` ever yielded zero more than ten times in a row.
This construct was first introduced in PR bitcoin#19 (commit 09ca4f3) for
random non-square field elements and was later refactored into the
non-zero helper in PR bitcoin#25 (commit 6d6102f). The copy-over to the
exhaustive tests happened recently in PR bitcoin#1118 (commit 0f86420).

This case seems to be practically irrelevant and I'd argue for keeping
things simple and removing it; if there's really a worry that the test's
random generator is heavily biased towards certain values or value
ranges then there should consequently be checks at other places too
(e.g. directly in `random_fe` for 256-bit values that repeatedly
overflow, i.e. >= p).

Also, the _fe_normalize call is not needed and can be removed, as the
result of `random_fe` is already normalized.
  • Loading branch information
theStack committed Aug 17, 2023
1 parent 060e32c commit dc55141
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 18 deletions.
11 changes: 2 additions & 9 deletions src/tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -2967,16 +2967,9 @@ static void random_fe(secp256k1_fe *x) {
}

static void random_fe_non_zero(secp256k1_fe *nz) {
int tries = 10;
while (--tries >= 0) {
do {
random_fe(nz);
secp256k1_fe_normalize(nz);
if (!secp256k1_fe_is_zero(nz)) {
break;
}
}
/* Infinitesimal probability of spurious failure here */
CHECK(tries >= 0);
} while (secp256k1_fe_is_zero(nz));
}

static void random_fe_non_square(secp256k1_fe *ns) {
Expand Down
11 changes: 2 additions & 9 deletions src/tests_exhaustive.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,16 +70,9 @@ static void random_fe(secp256k1_fe *x) {
}

static void random_fe_non_zero(secp256k1_fe *nz) {
int tries = 10;
while (--tries >= 0) {
do {
random_fe(nz);
secp256k1_fe_normalize(nz);
if (!secp256k1_fe_is_zero(nz)) {
break;
}
}
/* Infinitesimal probability of spurious failure here */
CHECK(tries >= 0);
} while (secp256k1_fe_is_zero(nz));
}
/** END stolen from tests.c */

Expand Down

0 comments on commit dc55141

Please sign in to comment.