Skip to content

Commit dd5ca02

Browse files
committed
Abstract out verify logic for fe_is_square_var
1 parent 00788db commit dd5ca02

File tree

4 files changed

+14
-10
lines changed

4 files changed

+14
-10
lines changed

src/field.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ static const secp256k1_fe secp256k1_const_beta = SECP256K1_FE_CONST(
9494
# define secp256k1_fe_get_bounds secp256k1_fe_impl_get_bounds
9595
# define secp256k1_fe_half secp256k1_fe_impl_half
9696
# define secp256k1_fe_add_int secp256k1_fe_impl_add_int
97+
# define secp256k1_fe_is_square_var secp256k1_fe_impl_is_square_var
9798
#endif /* defined(VERIFY) */
9899

99100
/** Normalize a field element.

src/field_10x26_impl.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,7 +1214,7 @@ static void secp256k1_fe_impl_inv_var(secp256k1_fe *r, const secp256k1_fe *x) {
12141214
secp256k1_fe_from_signed30(r, &s);
12151215
}
12161216

1217-
static int secp256k1_fe_is_square_var(const secp256k1_fe *x) {
1217+
static int secp256k1_fe_impl_is_square_var(const secp256k1_fe *x) {
12181218
secp256k1_fe tmp;
12191219
secp256k1_modinv32_signed30 s;
12201220
int jac, ret;
@@ -1232,10 +1232,6 @@ static int secp256k1_fe_is_square_var(const secp256k1_fe *x) {
12321232
secp256k1_fe dummy;
12331233
ret = secp256k1_fe_sqrt(&dummy, &tmp);
12341234
} else {
1235-
#ifdef VERIFY
1236-
secp256k1_fe dummy;
1237-
VERIFY_CHECK(jac == 2*secp256k1_fe_sqrt(&dummy, &tmp) - 1);
1238-
#endif
12391235
ret = jac >= 0;
12401236
}
12411237
return ret;

src/field_5x52_impl.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ static void secp256k1_fe_impl_inv_var(secp256k1_fe *r, const secp256k1_fe *x) {
503503
secp256k1_fe_from_signed62(r, &s);
504504
}
505505

506-
static int secp256k1_fe_is_square_var(const secp256k1_fe *x) {
506+
static int secp256k1_fe_impl_is_square_var(const secp256k1_fe *x) {
507507
secp256k1_fe tmp;
508508
secp256k1_modinv64_signed62 s;
509509
int jac, ret;
@@ -521,10 +521,6 @@ static int secp256k1_fe_is_square_var(const secp256k1_fe *x) {
521521
secp256k1_fe dummy;
522522
ret = secp256k1_fe_sqrt(&dummy, &tmp);
523523
} else {
524-
#ifdef VERIFY
525-
secp256k1_fe dummy;
526-
VERIFY_CHECK(jac == 2*secp256k1_fe_sqrt(&dummy, &tmp) - 1);
527-
#endif
528524
ret = jac >= 0;
529525
}
530526
return ret;

src/field_impl.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,17 @@ SECP256K1_INLINE static void secp256k1_fe_inv_var(secp256k1_fe *r, const secp256
374374
secp256k1_fe_verify(r);
375375
}
376376

377+
static int secp256k1_fe_impl_is_square_var(const secp256k1_fe *x);
378+
SECP256K1_INLINE static int secp256k1_fe_is_square_var(const secp256k1_fe *x) {
379+
int ret;
380+
secp256k1_fe tmp = *x, sqrt;
381+
secp256k1_fe_verify(x);
382+
ret = secp256k1_fe_impl_is_square_var(x);
383+
secp256k1_fe_normalize_weak(&tmp);
384+
VERIFY_CHECK(ret == secp256k1_fe_sqrt(&sqrt, &tmp));
385+
return ret;
386+
}
387+
377388
static void secp256k1_fe_impl_get_bounds(secp256k1_fe* r, int m);
378389
SECP256K1_INLINE static void secp256k1_fe_get_bounds(secp256k1_fe* r, int m) {
379390
VERIFY_CHECK(m >= 0);

0 commit comments

Comments
 (0)