Skip to content

Commit a746648

Browse files
committed
Abstract out verify logic for fe_inv{,_var}
1 parent ed8db81 commit a746648

File tree

3 files changed

+36
-44
lines changed

3 files changed

+36
-44
lines changed

src/field_10x26_impl.h

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,23 +1081,13 @@ static void secp256k1_fe_from_signed30(secp256k1_fe *r, const secp256k1_modinv32
10811081
r->n[7] = (a6 >> 2 ) & M26;
10821082
r->n[8] = (a6 >> 28 | a7 << 2) & M26;
10831083
r->n[9] = (a7 >> 24 | a8 << 6);
1084-
1085-
#ifdef VERIFY
1086-
r->magnitude = 1;
1087-
r->normalized = 1;
1088-
secp256k1_fe_verify(r);
1089-
#endif
10901084
}
10911085

10921086
static void secp256k1_fe_to_signed30(secp256k1_modinv32_signed30 *r, const secp256k1_fe *a) {
10931087
const uint32_t M30 = UINT32_MAX >> 2;
10941088
const uint64_t a0 = a->n[0], a1 = a->n[1], a2 = a->n[2], a3 = a->n[3], a4 = a->n[4],
10951089
a5 = a->n[5], a6 = a->n[6], a7 = a->n[7], a8 = a->n[8], a9 = a->n[9];
10961090

1097-
#ifdef VERIFY
1098-
VERIFY_CHECK(a->normalized);
1099-
#endif
1100-
11011091
r->v[0] = (a0 | a1 << 26) & M30;
11021092
r->v[1] = (a1 >> 4 | a2 << 22) & M30;
11031093
r->v[2] = (a2 >> 8 | a3 << 18) & M30;
@@ -1115,30 +1105,24 @@ static const secp256k1_modinv32_modinfo secp256k1_const_modinfo_fe = {
11151105
0x2DDACACFL
11161106
};
11171107

1118-
static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *x) {
1119-
secp256k1_fe tmp;
1108+
static void secp256k1_fe_impl_inv(secp256k1_fe *r, const secp256k1_fe *x) {
1109+
secp256k1_fe tmp = *x;
11201110
secp256k1_modinv32_signed30 s;
11211111

1122-
tmp = *x;
11231112
secp256k1_fe_normalize(&tmp);
11241113
secp256k1_fe_to_signed30(&s, &tmp);
11251114
secp256k1_modinv32(&s, &secp256k1_const_modinfo_fe);
11261115
secp256k1_fe_from_signed30(r, &s);
1127-
1128-
VERIFY_CHECK(secp256k1_fe_normalizes_to_zero(r) == secp256k1_fe_normalizes_to_zero(&tmp));
11291116
}
11301117

1131-
static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *x) {
1132-
secp256k1_fe tmp;
1118+
static void secp256k1_fe_impl_inv_var(secp256k1_fe *r, const secp256k1_fe *x) {
1119+
secp256k1_fe tmp = *x;
11331120
secp256k1_modinv32_signed30 s;
11341121

1135-
tmp = *x;
11361122
secp256k1_fe_normalize_var(&tmp);
11371123
secp256k1_fe_to_signed30(&s, &tmp);
11381124
secp256k1_modinv32_var(&s, &secp256k1_const_modinfo_fe);
11391125
secp256k1_fe_from_signed30(r, &s);
1140-
1141-
VERIFY_CHECK(secp256k1_fe_normalizes_to_zero(r) == secp256k1_fe_normalizes_to_zero(&tmp));
11421126
}
11431127

11441128
#endif /* SECP256K1_FIELD_REPR_IMPL_H */

src/field_5x52_impl.h

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -397,22 +397,12 @@ static void secp256k1_fe_from_signed62(secp256k1_fe *r, const secp256k1_modinv64
397397
r->n[2] = (a1 >> 42 | a2 << 20) & M52;
398398
r->n[3] = (a2 >> 32 | a3 << 30) & M52;
399399
r->n[4] = (a3 >> 22 | a4 << 40);
400-
401-
#ifdef VERIFY
402-
r->magnitude = 1;
403-
r->normalized = 1;
404-
secp256k1_fe_verify(r);
405-
#endif
406400
}
407401

408402
static void secp256k1_fe_to_signed62(secp256k1_modinv64_signed62 *r, const secp256k1_fe *a) {
409403
const uint64_t M62 = UINT64_MAX >> 2;
410404
const uint64_t a0 = a->n[0], a1 = a->n[1], a2 = a->n[2], a3 = a->n[3], a4 = a->n[4];
411405

412-
#ifdef VERIFY
413-
VERIFY_CHECK(a->normalized);
414-
#endif
415-
416406
r->v[0] = (a0 | a1 << 52) & M62;
417407
r->v[1] = (a1 >> 10 | a2 << 42) & M62;
418408
r->v[2] = (a2 >> 20 | a3 << 32) & M62;
@@ -425,34 +415,24 @@ static const secp256k1_modinv64_modinfo secp256k1_const_modinfo_fe = {
425415
0x27C7F6E22DDACACFLL
426416
};
427417

428-
static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *x) {
429-
secp256k1_fe tmp;
418+
static void secp256k1_fe_impl_inv(secp256k1_fe *r, const secp256k1_fe *x) {
419+
secp256k1_fe tmp = *x;
430420
secp256k1_modinv64_signed62 s;
431421

432-
tmp = *x;
433422
secp256k1_fe_normalize(&tmp);
434423
secp256k1_fe_to_signed62(&s, &tmp);
435424
secp256k1_modinv64(&s, &secp256k1_const_modinfo_fe);
436425
secp256k1_fe_from_signed62(r, &s);
437-
438-
#ifdef VERIFY
439-
VERIFY_CHECK(secp256k1_fe_normalizes_to_zero(r) == secp256k1_fe_normalizes_to_zero(&tmp));
440-
#endif
441426
}
442427

443-
static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *x) {
444-
secp256k1_fe tmp;
428+
static void secp256k1_fe_impl_inv_var(secp256k1_fe *r, const secp256k1_fe *x) {
429+
secp256k1_fe tmp = *x;
445430
secp256k1_modinv64_signed62 s;
446431

447-
tmp = *x;
448432
secp256k1_fe_normalize_var(&tmp);
449433
secp256k1_fe_to_signed62(&s, &tmp);
450434
secp256k1_modinv64_var(&s, &secp256k1_const_modinfo_fe);
451435
secp256k1_fe_from_signed62(r, &s);
452-
453-
#ifdef VERIFY
454-
VERIFY_CHECK(secp256k1_fe_normalizes_to_zero(r) == secp256k1_fe_normalizes_to_zero(&tmp));
455-
#endif
456436
}
457437

458438
#endif /* SECP256K1_FIELD_REPR_IMPL_H */

src/field_impl.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,4 +336,32 @@ SECP256K1_INLINE static void secp256k1_fe_from_storage(secp256k1_fe *r, const se
336336
#endif
337337
}
338338

339+
static void secp256k1_fe_impl_inv(secp256k1_fe *r, const secp256k1_fe *x);
340+
SECP256K1_INLINE static void secp256k1_fe_inv(secp256k1_fe *r, const secp256k1_fe *x) {
341+
#ifdef VERIFY
342+
int input_is_zero = secp256k1_fe_normalizes_to_zero(x);
343+
#endif
344+
secp256k1_fe_impl_inv(r, x);
345+
#ifdef VERIFY
346+
VERIFY_CHECK(secp256k1_fe_normalizes_to_zero(r) == input_is_zero);
347+
r->magnitude = x->magnitude > 0;
348+
r->normalized = 1;
349+
secp256k1_fe_verify(r);
350+
#endif
351+
}
352+
353+
static void secp256k1_fe_impl_inv_var(secp256k1_fe *r, const secp256k1_fe *x);
354+
SECP256K1_INLINE static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256k1_fe *x) {
355+
#ifdef VERIFY
356+
int input_is_zero = secp256k1_fe_normalizes_to_zero(x);
357+
#endif
358+
secp256k1_fe_impl_inv_var(r, x);
359+
#ifdef VERIFY
360+
VERIFY_CHECK(secp256k1_fe_normalizes_to_zero(r) == input_is_zero);
361+
r->magnitude = x->magnitude > 0;
362+
r->normalized = 1;
363+
secp256k1_fe_verify(r);
364+
#endif
365+
}
366+
339367
#endif /* SECP256K1_FIELD_IMPL_H */

0 commit comments

Comments
 (0)