Remove the non-storage cmov
This commit is contained in:
parent
55422b6aaf
commit
fcc48c4561
|
@ -117,7 +117,6 @@ static void secp256k1_fe_to_storage(secp256k1_fe_storage_t *r, const secp256k1_f
|
||||||
static void secp256k1_fe_from_storage(secp256k1_fe_t *r, const secp256k1_fe_storage_t*);
|
static void secp256k1_fe_from_storage(secp256k1_fe_t *r, const secp256k1_fe_storage_t*);
|
||||||
|
|
||||||
/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
|
/** If flag is true, set *r equal to *a; otherwise leave it. Constant-time. */
|
||||||
static void secp256k1_fe_cmov(secp256k1_fe_t *r, const secp256k1_fe_t *a, int flag);
|
|
||||||
static void secp256k1_fe_storage_cmov(secp256k1_fe_storage_t *r, const secp256k1_fe_storage_t *a, int flag);
|
static void secp256k1_fe_storage_cmov(secp256k1_fe_storage_t *r, const secp256k1_fe_storage_t *a, int flag);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1063,26 +1063,6 @@ static void secp256k1_fe_sqr(secp256k1_fe_t *r, const secp256k1_fe_t *a) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void secp256k1_fe_cmov(secp256k1_fe_t *r, const secp256k1_fe_t *a, int flag) {
|
|
||||||
uint32_t mask0 = flag + ~((uint32_t)0), mask1 = ~mask0;
|
|
||||||
r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
|
|
||||||
r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
|
|
||||||
r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
|
|
||||||
r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
|
|
||||||
r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);
|
|
||||||
r->n[5] = (r->n[5] & mask0) | (a->n[5] & mask1);
|
|
||||||
r->n[6] = (r->n[6] & mask0) | (a->n[6] & mask1);
|
|
||||||
r->n[7] = (r->n[7] & mask0) | (a->n[7] & mask1);
|
|
||||||
r->n[8] = (r->n[8] & mask0) | (a->n[8] & mask1);
|
|
||||||
r->n[9] = (r->n[9] & mask0) | (a->n[9] & mask1);
|
|
||||||
#ifdef VERIFY
|
|
||||||
if (flag) {
|
|
||||||
r->magnitude = a->magnitude;
|
|
||||||
r->normalized = a->normalized;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void secp256k1_fe_storage_cmov(secp256k1_fe_storage_t *r, const secp256k1_fe_storage_t *a, int flag) {
|
static inline void secp256k1_fe_storage_cmov(secp256k1_fe_storage_t *r, const secp256k1_fe_storage_t *a, int flag) {
|
||||||
uint32_t mask0 = flag + ~((uint32_t)0), mask1 = ~mask0;
|
uint32_t mask0 = flag + ~((uint32_t)0), mask1 = ~mask0;
|
||||||
r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
|
r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
|
||||||
|
|
|
@ -398,21 +398,6 @@ static void secp256k1_fe_sqr(secp256k1_fe_t *r, const secp256k1_fe_t *a) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void secp256k1_fe_cmov(secp256k1_fe_t *r, const secp256k1_fe_t *a, int flag) {
|
|
||||||
uint64_t mask0 = flag + ~((uint64_t)0), mask1 = ~mask0;
|
|
||||||
r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
|
|
||||||
r->n[1] = (r->n[1] & mask0) | (a->n[1] & mask1);
|
|
||||||
r->n[2] = (r->n[2] & mask0) | (a->n[2] & mask1);
|
|
||||||
r->n[3] = (r->n[3] & mask0) | (a->n[3] & mask1);
|
|
||||||
r->n[4] = (r->n[4] & mask0) | (a->n[4] & mask1);
|
|
||||||
#ifdef VERIFY
|
|
||||||
if (flag) {
|
|
||||||
r->magnitude = a->magnitude;
|
|
||||||
r->normalized = a->normalized;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void secp256k1_fe_storage_cmov(secp256k1_fe_storage_t *r, const secp256k1_fe_storage_t *a, int flag) {
|
static inline void secp256k1_fe_storage_cmov(secp256k1_fe_storage_t *r, const secp256k1_fe_storage_t *a, int flag) {
|
||||||
uint64_t mask0 = flag + ~((uint64_t)0), mask1 = ~mask0;
|
uint64_t mask0 = flag + ~((uint64_t)0), mask1 = ~mask0;
|
||||||
r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
|
r->n[0] = (r->n[0] & mask0) | (a->n[0] & mask1);
|
||||||
|
|
18
src/tests.c
18
src/tests.c
|
@ -685,12 +685,18 @@ void run_field_misc(void) {
|
||||||
z = x;
|
z = x;
|
||||||
secp256k1_fe_add(&z,&y);
|
secp256k1_fe_add(&z,&y);
|
||||||
secp256k1_fe_normalize(&z);
|
secp256k1_fe_normalize(&z);
|
||||||
/* Test the conditional move. */
|
/* Test storage conversion and conditional moves. */
|
||||||
secp256k1_fe_cmov(&z, &x, 0);
|
secp256k1_fe_storage_t xs, ys, zs;
|
||||||
CHECK(secp256k1_fe_equal_var(&x, &z) == 0);
|
secp256k1_fe_to_storage(&xs, &x);
|
||||||
CHECK(secp256k1_fe_cmp_var(&x, &z) != 0);
|
secp256k1_fe_to_storage(&ys, &y);
|
||||||
secp256k1_fe_cmov(&y, &x, 1);
|
secp256k1_fe_to_storage(&zs, &z);
|
||||||
CHECK(secp256k1_fe_equal_var(&x, &y));
|
secp256k1_fe_storage_cmov(&zs, &xs, 0);
|
||||||
|
CHECK(memcmp(&xs, &zs, sizeof(xs)) != 0);
|
||||||
|
secp256k1_fe_storage_cmov(&ys, &xs, 1);
|
||||||
|
CHECK(memcmp(&xs, &ys, sizeof(xs)) == 0);
|
||||||
|
secp256k1_fe_from_storage(&x, &xs);
|
||||||
|
secp256k1_fe_from_storage(&y, &ys);
|
||||||
|
secp256k1_fe_from_storage(&z, &zs);
|
||||||
/* Test that mul_int, mul, and add agree. */
|
/* Test that mul_int, mul, and add agree. */
|
||||||
secp256k1_fe_add(&y, &x);
|
secp256k1_fe_add(&y, &x);
|
||||||
secp256k1_fe_add(&y, &x);
|
secp256k1_fe_add(&y, &x);
|
||||||
|
|
Loading…
Reference in New Issue