Remove unused Jacobi symbol support
No exposed functions rely on Jacobi symbol computation anymore. Remove it; it can always be brough back later if needed.
This commit is contained in:
101
src/tests.c
101
src/tests.c
@@ -750,74 +750,12 @@ void test_num_mod(void) {
|
||||
CHECK(secp256k1_num_is_zero(&n));
|
||||
}
|
||||
|
||||
void test_num_jacobi(void) {
|
||||
secp256k1_scalar sqr;
|
||||
secp256k1_scalar small;
|
||||
secp256k1_scalar five; /* five is not a quadratic residue */
|
||||
secp256k1_num order, n;
|
||||
int i;
|
||||
/* squares mod 5 are 1, 4 */
|
||||
const int jacobi5[10] = { 0, 1, -1, -1, 1, 0, 1, -1, -1, 1 };
|
||||
|
||||
/* check some small values with 5 as the order */
|
||||
secp256k1_scalar_set_int(&five, 5);
|
||||
secp256k1_scalar_get_num(&order, &five);
|
||||
for (i = 0; i < 10; ++i) {
|
||||
secp256k1_scalar_set_int(&small, i);
|
||||
secp256k1_scalar_get_num(&n, &small);
|
||||
CHECK(secp256k1_num_jacobi(&n, &order) == jacobi5[i]);
|
||||
}
|
||||
|
||||
/** test large values with 5 as group order */
|
||||
secp256k1_scalar_get_num(&order, &five);
|
||||
/* we first need a scalar which is not a multiple of 5 */
|
||||
do {
|
||||
secp256k1_num fiven;
|
||||
random_scalar_order_test(&sqr);
|
||||
secp256k1_scalar_get_num(&fiven, &five);
|
||||
secp256k1_scalar_get_num(&n, &sqr);
|
||||
secp256k1_num_mod(&n, &fiven);
|
||||
} while (secp256k1_num_is_zero(&n));
|
||||
/* next force it to be a residue. 2 is a nonresidue mod 5 so we can
|
||||
* just multiply by two, i.e. add the number to itself */
|
||||
if (secp256k1_num_jacobi(&n, &order) == -1) {
|
||||
secp256k1_num_add(&n, &n, &n);
|
||||
}
|
||||
|
||||
/* test residue */
|
||||
CHECK(secp256k1_num_jacobi(&n, &order) == 1);
|
||||
/* test nonresidue */
|
||||
secp256k1_num_add(&n, &n, &n);
|
||||
CHECK(secp256k1_num_jacobi(&n, &order) == -1);
|
||||
|
||||
/** test with secp group order as order */
|
||||
secp256k1_scalar_order_get_num(&order);
|
||||
random_scalar_order_test(&sqr);
|
||||
secp256k1_scalar_mul(&sqr, &sqr, &sqr);
|
||||
/* test residue */
|
||||
secp256k1_scalar_get_num(&n, &sqr);
|
||||
CHECK(secp256k1_num_jacobi(&n, &order) == 1);
|
||||
/* test nonresidue */
|
||||
secp256k1_scalar_mul(&sqr, &sqr, &five);
|
||||
secp256k1_scalar_get_num(&n, &sqr);
|
||||
CHECK(secp256k1_num_jacobi(&n, &order) == -1);
|
||||
/* test multiple of the order*/
|
||||
CHECK(secp256k1_num_jacobi(&order, &order) == 0);
|
||||
|
||||
/* check one less than the order */
|
||||
secp256k1_scalar_set_int(&small, 1);
|
||||
secp256k1_scalar_get_num(&n, &small);
|
||||
secp256k1_num_sub(&n, &order, &n);
|
||||
CHECK(secp256k1_num_jacobi(&n, &order) == 1); /* sage confirms this is 1 */
|
||||
}
|
||||
|
||||
void run_num_smalltests(void) {
|
||||
int i;
|
||||
for (i = 0; i < 100*count; i++) {
|
||||
test_num_negate();
|
||||
test_num_add_sub();
|
||||
test_num_mod();
|
||||
test_num_jacobi();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -2959,64 +2897,35 @@ void run_ec_combine(void) {
|
||||
void test_group_decompress(const secp256k1_fe* x) {
|
||||
/* The input itself, normalized. */
|
||||
secp256k1_fe fex = *x;
|
||||
secp256k1_fe fez;
|
||||
/* Results of set_xquad_var, set_xo_var(..., 0), set_xo_var(..., 1). */
|
||||
secp256k1_ge ge_quad, ge_even, ge_odd;
|
||||
secp256k1_gej gej_quad;
|
||||
/* Results of set_xo_var(..., 0), set_xo_var(..., 1). */
|
||||
secp256k1_ge ge_even, ge_odd;
|
||||
/* Return values of the above calls. */
|
||||
int res_quad, res_even, res_odd;
|
||||
int res_even, res_odd;
|
||||
|
||||
secp256k1_fe_normalize_var(&fex);
|
||||
|
||||
res_quad = secp256k1_ge_set_xquad(&ge_quad, &fex);
|
||||
res_even = secp256k1_ge_set_xo_var(&ge_even, &fex, 0);
|
||||
res_odd = secp256k1_ge_set_xo_var(&ge_odd, &fex, 1);
|
||||
|
||||
CHECK(res_quad == res_even);
|
||||
CHECK(res_quad == res_odd);
|
||||
CHECK(res_even == res_odd);
|
||||
|
||||
if (res_quad) {
|
||||
secp256k1_fe_normalize_var(&ge_quad.x);
|
||||
if (res_even) {
|
||||
secp256k1_fe_normalize_var(&ge_odd.x);
|
||||
secp256k1_fe_normalize_var(&ge_even.x);
|
||||
secp256k1_fe_normalize_var(&ge_quad.y);
|
||||
secp256k1_fe_normalize_var(&ge_odd.y);
|
||||
secp256k1_fe_normalize_var(&ge_even.y);
|
||||
|
||||
/* No infinity allowed. */
|
||||
CHECK(!ge_quad.infinity);
|
||||
CHECK(!ge_even.infinity);
|
||||
CHECK(!ge_odd.infinity);
|
||||
|
||||
/* Check that the x coordinates check out. */
|
||||
CHECK(secp256k1_fe_equal_var(&ge_quad.x, x));
|
||||
CHECK(secp256k1_fe_equal_var(&ge_even.x, x));
|
||||
CHECK(secp256k1_fe_equal_var(&ge_odd.x, x));
|
||||
|
||||
/* Check that the Y coordinate result in ge_quad is a square. */
|
||||
CHECK(secp256k1_fe_is_quad_var(&ge_quad.y));
|
||||
|
||||
/* Check odd/even Y in ge_odd, ge_even. */
|
||||
CHECK(secp256k1_fe_is_odd(&ge_odd.y));
|
||||
CHECK(!secp256k1_fe_is_odd(&ge_even.y));
|
||||
|
||||
/* Check secp256k1_gej_has_quad_y_var. */
|
||||
secp256k1_gej_set_ge(&gej_quad, &ge_quad);
|
||||
CHECK(secp256k1_gej_has_quad_y_var(&gej_quad));
|
||||
do {
|
||||
random_fe_test(&fez);
|
||||
} while (secp256k1_fe_is_zero(&fez));
|
||||
secp256k1_gej_rescale(&gej_quad, &fez);
|
||||
CHECK(secp256k1_gej_has_quad_y_var(&gej_quad));
|
||||
secp256k1_gej_neg(&gej_quad, &gej_quad);
|
||||
CHECK(!secp256k1_gej_has_quad_y_var(&gej_quad));
|
||||
do {
|
||||
random_fe_test(&fez);
|
||||
} while (secp256k1_fe_is_zero(&fez));
|
||||
secp256k1_gej_rescale(&gej_quad, &fez);
|
||||
CHECK(!secp256k1_gej_has_quad_y_var(&gej_quad));
|
||||
secp256k1_gej_neg(&gej_quad, &gej_quad);
|
||||
CHECK(secp256k1_gej_has_quad_y_var(&gej_quad));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user