Skip to content

Commit

Permalink
[SECP256K1] Fix ability to compile tests without -DVERIFY.
Browse files Browse the repository at this point in the history
Summary:
```
It's important that the tests are also run without -DVERIFY due to
 the possibility that side-effects of a VERIFY_CHECK fix a bug that
 would otherwise be detected.

Use of the verify_check macro in tests isn't sufficient.
```

Backport of secp256k1 PR628:
bitcoin-core/secp256k1#628

This will also fix the build with coverage for secp256k1.

Test Plan:
  ninja check-secp256k1-tests

On secp256k1 standalone:
  ../configure --enable-coverage # will undefine VERIFY
  make check

Reviewers: #bitcoin_abc, jasonbcox

Reviewed By: #bitcoin_abc, jasonbcox

Differential Revision: https://reviews.bitcoinabc.org/D5307
  • Loading branch information
gmaxwell authored and Fabcien committed Feb 20, 2020
1 parent 3c1a441 commit 5d90f61
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions src/tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,9 @@ void random_field_element_magnitude(secp256k1_fe *fe) {
secp256k1_fe_negate(&zero, &zero, 0);
secp256k1_fe_mul_int(&zero, n - 1);
secp256k1_fe_add(fe, &zero);
VERIFY_CHECK(fe->magnitude == n);
#ifdef VERIFY
CHECK(fe->magnitude == n);
#endif
}

void random_group_element_test(secp256k1_ge *ge) {
Expand Down Expand Up @@ -1819,24 +1821,32 @@ void run_field_misc(void) {
/* Test fe conditional move; z is not normalized here. */
q = x;
secp256k1_fe_cmov(&x, &z, 0);
VERIFY_CHECK(!x.normalized && x.magnitude == z.magnitude);
#ifdef VERIFY
CHECK(!x.normalized && x.magnitude == z.magnitude);
#endif
secp256k1_fe_cmov(&x, &x, 1);
CHECK(fe_memcmp(&x, &z) != 0);
CHECK(fe_memcmp(&x, &q) == 0);
secp256k1_fe_cmov(&q, &z, 1);
VERIFY_CHECK(!q.normalized && q.magnitude == z.magnitude);
#ifdef VERIFY
CHECK(!q.normalized && q.magnitude == z.magnitude);
#endif
CHECK(fe_memcmp(&q, &z) == 0);
secp256k1_fe_normalize_var(&x);
secp256k1_fe_normalize_var(&z);
CHECK(!secp256k1_fe_equal_var(&x, &z));
secp256k1_fe_normalize_var(&q);
secp256k1_fe_cmov(&q, &z, (i&1));
VERIFY_CHECK(q.normalized && q.magnitude == 1);
#ifdef VERIFY
CHECK(q.normalized && q.magnitude == 1);
#endif
for (j = 0; j < 6; j++) {
secp256k1_fe_negate(&z, &z, j+1);
secp256k1_fe_normalize_var(&q);
secp256k1_fe_cmov(&q, &z, (j&1));
VERIFY_CHECK(!q.normalized && q.magnitude == (j+2));
#ifdef VERIFY
CHECK(!q.normalized && q.magnitude == (j+2));
#endif
}
secp256k1_fe_normalize_var(&z);
/* Test storage conversion and conditional moves. */
Expand Down

0 comments on commit 5d90f61

Please sign in to comment.