@@ -3775,7 +3775,7 @@ static void test_ge(void) {
37753775 */
37763776 secp256k1_ge * ge = (secp256k1_ge * )checked_malloc (& CTX -> error_callback , sizeof (secp256k1_ge ) * (1 + 4 * runs ));
37773777 secp256k1_gej * gej = (secp256k1_gej * )checked_malloc (& CTX -> error_callback , sizeof (secp256k1_gej ) * (1 + 4 * runs ));
3778- secp256k1_fe zf ;
3778+ secp256k1_fe zf , r ;
37793779 secp256k1_fe zfi2 , zfi3 ;
37803780
37813781 secp256k1_gej_set_infinity (& gej [0 ]);
@@ -3817,6 +3817,11 @@ static void test_ge(void) {
38173817 secp256k1_fe_sqr (& zfi2 , & zfi3 );
38183818 secp256k1_fe_mul (& zfi3 , & zfi3 , & zfi2 );
38193819
3820+ /* Generate random r */
3821+ do {
3822+ random_field_element_test (& r );
3823+ } while (secp256k1_fe_is_zero (& r ));
3824+
38203825 for (i1 = 0 ; i1 < 1 + 4 * runs ; i1 ++ ) {
38213826 int i2 ;
38223827 for (i2 = 0 ; i2 < 1 + 4 * runs ; i2 ++ ) {
@@ -3929,6 +3934,29 @@ static void test_ge(void) {
39293934 free (ge_set_all );
39303935 }
39313936
3937+ /* Test that all elements have X coordinates on the curve. */
3938+ for (i = 1 ; i < 4 * runs + 1 ; i ++ ) {
3939+ secp256k1_fe n ;
3940+ CHECK (secp256k1_ge_x_on_curve_var (& ge [i ].x ));
3941+ /* And the same holds after random rescaling. */
3942+ secp256k1_fe_mul (& n , & zf , & ge [i ].x );
3943+ CHECK (secp256k1_ge_x_frac_on_curve_var (& n , & zf ));
3944+ }
3945+
3946+ /* Test correspondence of secp256k1_ge_x{,_frac}_on_curve_var with ge_set_xo. */
3947+ {
3948+ secp256k1_fe n ;
3949+ secp256k1_ge q ;
3950+ int ret_on_curve , ret_frac_on_curve , ret_set_xo ;
3951+ secp256k1_fe_mul (& n , & zf , & r );
3952+ ret_on_curve = secp256k1_ge_x_on_curve_var (& r );
3953+ ret_frac_on_curve = secp256k1_ge_x_frac_on_curve_var (& n , & zf );
3954+ ret_set_xo = secp256k1_ge_set_xo_var (& q , & r , 0 );
3955+ CHECK (ret_on_curve == ret_frac_on_curve );
3956+ CHECK (ret_on_curve == ret_set_xo );
3957+ if (ret_set_xo ) CHECK (secp256k1_fe_equal_var (& r , & q .x ));
3958+ }
3959+
39323960 /* Test batch gej -> ge conversion with many infinities. */
39333961 for (i = 0 ; i < 4 * runs + 1 ; i ++ ) {
39343962 int odd ;
0 commit comments