@@ -750,74 +750,12 @@ void test_num_mod(void) {
750750 CHECK (secp256k1_num_is_zero (& n ));
751751}
752752
753- void test_num_jacobi (void ) {
754- secp256k1_scalar sqr ;
755- secp256k1_scalar small ;
756- secp256k1_scalar five ; /* five is not a quadratic residue */
757- secp256k1_num order , n ;
758- int i ;
759- /* squares mod 5 are 1, 4 */
760- const int jacobi5 [10 ] = { 0 , 1 , -1 , -1 , 1 , 0 , 1 , -1 , -1 , 1 };
761-
762- /* check some small values with 5 as the order */
763- secp256k1_scalar_set_int (& five , 5 );
764- secp256k1_scalar_get_num (& order , & five );
765- for (i = 0 ; i < 10 ; ++ i ) {
766- secp256k1_scalar_set_int (& small , i );
767- secp256k1_scalar_get_num (& n , & small );
768- CHECK (secp256k1_num_jacobi (& n , & order ) == jacobi5 [i ]);
769- }
770-
771- /** test large values with 5 as group order */
772- secp256k1_scalar_get_num (& order , & five );
773- /* we first need a scalar which is not a multiple of 5 */
774- do {
775- secp256k1_num fiven ;
776- random_scalar_order_test (& sqr );
777- secp256k1_scalar_get_num (& fiven , & five );
778- secp256k1_scalar_get_num (& n , & sqr );
779- secp256k1_num_mod (& n , & fiven );
780- } while (secp256k1_num_is_zero (& n ));
781- /* next force it to be a residue. 2 is a nonresidue mod 5 so we can
782- * just multiply by two, i.e. add the number to itself */
783- if (secp256k1_num_jacobi (& n , & order ) == -1 ) {
784- secp256k1_num_add (& n , & n , & n );
785- }
786-
787- /* test residue */
788- CHECK (secp256k1_num_jacobi (& n , & order ) == 1 );
789- /* test nonresidue */
790- secp256k1_num_add (& n , & n , & n );
791- CHECK (secp256k1_num_jacobi (& n , & order ) == -1 );
792-
793- /** test with secp group order as order */
794- secp256k1_scalar_order_get_num (& order );
795- random_scalar_order_test (& sqr );
796- secp256k1_scalar_mul (& sqr , & sqr , & sqr );
797- /* test residue */
798- secp256k1_scalar_get_num (& n , & sqr );
799- CHECK (secp256k1_num_jacobi (& n , & order ) == 1 );
800- /* test nonresidue */
801- secp256k1_scalar_mul (& sqr , & sqr , & five );
802- secp256k1_scalar_get_num (& n , & sqr );
803- CHECK (secp256k1_num_jacobi (& n , & order ) == -1 );
804- /* test multiple of the order*/
805- CHECK (secp256k1_num_jacobi (& order , & order ) == 0 );
806-
807- /* check one less than the order */
808- secp256k1_scalar_set_int (& small , 1 );
809- secp256k1_scalar_get_num (& n , & small );
810- secp256k1_num_sub (& n , & order , & n );
811- CHECK (secp256k1_num_jacobi (& n , & order ) == 1 ); /* sage confirms this is 1 */
812- }
813-
814753void run_num_smalltests (void ) {
815754 int i ;
816755 for (i = 0 ; i < 100 * count ; i ++ ) {
817756 test_num_negate ();
818757 test_num_add_sub ();
819758 test_num_mod ();
820- test_num_jacobi ();
821759 }
822760}
823761#endif
@@ -2959,64 +2897,35 @@ void run_ec_combine(void) {
29592897void test_group_decompress (const secp256k1_fe * x ) {
29602898 /* The input itself, normalized. */
29612899 secp256k1_fe fex = * x ;
2962- secp256k1_fe fez ;
2963- /* Results of set_xquad_var, set_xo_var(..., 0), set_xo_var(..., 1). */
2964- secp256k1_ge ge_quad , ge_even , ge_odd ;
2965- secp256k1_gej gej_quad ;
2900+ /* Results of set_xo_var(..., 0), set_xo_var(..., 1). */
2901+ secp256k1_ge ge_even , ge_odd ;
29662902 /* Return values of the above calls. */
2967- int res_quad , res_even , res_odd ;
2903+ int res_even , res_odd ;
29682904
29692905 secp256k1_fe_normalize_var (& fex );
29702906
2971- res_quad = secp256k1_ge_set_xquad (& ge_quad , & fex );
29722907 res_even = secp256k1_ge_set_xo_var (& ge_even , & fex , 0 );
29732908 res_odd = secp256k1_ge_set_xo_var (& ge_odd , & fex , 1 );
29742909
2975- CHECK (res_quad == res_even );
2976- CHECK (res_quad == res_odd );
2910+ CHECK (res_even == res_odd );
29772911
2978- if (res_quad ) {
2979- secp256k1_fe_normalize_var (& ge_quad .x );
2912+ if (res_even ) {
29802913 secp256k1_fe_normalize_var (& ge_odd .x );
29812914 secp256k1_fe_normalize_var (& ge_even .x );
2982- secp256k1_fe_normalize_var (& ge_quad .y );
29832915 secp256k1_fe_normalize_var (& ge_odd .y );
29842916 secp256k1_fe_normalize_var (& ge_even .y );
29852917
29862918 /* No infinity allowed. */
2987- CHECK (!ge_quad .infinity );
29882919 CHECK (!ge_even .infinity );
29892920 CHECK (!ge_odd .infinity );
29902921
29912922 /* Check that the x coordinates check out. */
2992- CHECK (secp256k1_fe_equal_var (& ge_quad .x , x ));
29932923 CHECK (secp256k1_fe_equal_var (& ge_even .x , x ));
29942924 CHECK (secp256k1_fe_equal_var (& ge_odd .x , x ));
29952925
2996- /* Check that the Y coordinate result in ge_quad is a square. */
2997- CHECK (secp256k1_fe_is_quad_var (& ge_quad .y ));
2998-
29992926 /* Check odd/even Y in ge_odd, ge_even. */
30002927 CHECK (secp256k1_fe_is_odd (& ge_odd .y ));
30012928 CHECK (!secp256k1_fe_is_odd (& ge_even .y ));
3002-
3003- /* Check secp256k1_gej_has_quad_y_var. */
3004- secp256k1_gej_set_ge (& gej_quad , & ge_quad );
3005- CHECK (secp256k1_gej_has_quad_y_var (& gej_quad ));
3006- do {
3007- random_fe_test (& fez );
3008- } while (secp256k1_fe_is_zero (& fez ));
3009- secp256k1_gej_rescale (& gej_quad , & fez );
3010- CHECK (secp256k1_gej_has_quad_y_var (& gej_quad ));
3011- secp256k1_gej_neg (& gej_quad , & gej_quad );
3012- CHECK (!secp256k1_gej_has_quad_y_var (& gej_quad ));
3013- do {
3014- random_fe_test (& fez );
3015- } while (secp256k1_fe_is_zero (& fez ));
3016- secp256k1_gej_rescale (& gej_quad , & fez );
3017- CHECK (!secp256k1_gej_has_quad_y_var (& gej_quad ));
3018- secp256k1_gej_neg (& gej_quad , & gej_quad );
3019- CHECK (secp256k1_gej_has_quad_y_var (& gej_quad ));
30202929 }
30212930}
30222931
0 commit comments