Skip to content

Commit 3d7cbaf

Browse files
tests: Fix test whose result is implementation-defined
A compiler may add struct padding and fe_cmov is not guaranteed to preserve it. On the way, we improve the identity check such that it covers the VERIFY struct members.
1 parent 09971a3 commit 3d7cbaf

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/tests.c

+11-8
Original file line numberDiff line numberDiff line change
@@ -2451,13 +2451,16 @@ void run_field_convert(void) {
24512451
CHECK(secp256k1_memcmp_var(&fes2, &fes, sizeof(fes)) == 0);
24522452
}
24532453

2454-
int fe_secp256k1_memcmp_var(const secp256k1_fe *a, const secp256k1_fe *b) {
2455-
secp256k1_fe t = *b;
2454+
/* Returns true if two field elements have the same representation. */
2455+
int fe_identical(const secp256k1_fe *a, const secp256k1_fe *b) {
2456+
int ret = 1;
24562457
#ifdef VERIFY
2457-
t.magnitude = a->magnitude;
2458-
t.normalized = a->normalized;
2458+
ret &= (a->magnitude == b->magnitude);
2459+
ret &= (a->normalized == b->normalized);
24592460
#endif
2460-
return secp256k1_memcmp_var(a, &t, sizeof(secp256k1_fe));
2461+
/* Compare the struct member that holds the limbs. */
2462+
ret &= (secp256k1_memcmp_var(a->n, b->n, sizeof(a->n)) == 0);
2463+
return ret;
24612464
}
24622465

24632466
void run_field_misc(void) {
@@ -2483,13 +2486,13 @@ void run_field_misc(void) {
24832486
CHECK(x.normalized && x.magnitude == 1);
24842487
#endif
24852488
secp256k1_fe_cmov(&x, &x, 1);
2486-
CHECK(fe_secp256k1_memcmp_var(&x, &z) != 0);
2487-
CHECK(fe_secp256k1_memcmp_var(&x, &q) == 0);
2489+
CHECK(!fe_identical(&x, &z));
2490+
CHECK(fe_identical(&x, &q));
24882491
secp256k1_fe_cmov(&q, &z, 1);
24892492
#ifdef VERIFY
24902493
CHECK(!q.normalized && q.magnitude == z.magnitude);
24912494
#endif
2492-
CHECK(fe_secp256k1_memcmp_var(&q, &z) == 0);
2495+
CHECK(fe_identical(&q, &z));
24932496
secp256k1_fe_normalize_var(&x);
24942497
secp256k1_fe_normalize_var(&z);
24952498
CHECK(!secp256k1_fe_equal_var(&x, &z));

0 commit comments

Comments
 (0)