@@ -3775,7 +3775,7 @@ static void test_ge(void) {
3775
3775
*/
3776
3776
secp256k1_ge * ge = (secp256k1_ge * )checked_malloc (& CTX -> error_callback , sizeof (secp256k1_ge ) * (1 + 4 * runs ));
3777
3777
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 ;
3779
3779
secp256k1_fe zfi2 , zfi3 ;
3780
3780
3781
3781
secp256k1_gej_set_infinity (& gej [0 ]);
@@ -3817,6 +3817,11 @@ static void test_ge(void) {
3817
3817
secp256k1_fe_sqr (& zfi2 , & zfi3 );
3818
3818
secp256k1_fe_mul (& zfi3 , & zfi3 , & zfi2 );
3819
3819
3820
+ /* Generate random r */
3821
+ do {
3822
+ random_field_element_test (& r );
3823
+ } while (secp256k1_fe_is_zero (& r ));
3824
+
3820
3825
for (i1 = 0 ; i1 < 1 + 4 * runs ; i1 ++ ) {
3821
3826
int i2 ;
3822
3827
for (i2 = 0 ; i2 < 1 + 4 * runs ; i2 ++ ) {
@@ -3929,6 +3934,29 @@ static void test_ge(void) {
3929
3934
free (ge_set_all );
3930
3935
}
3931
3936
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
+
3932
3960
/* Test batch gej -> ge conversion with many infinities. */
3933
3961
for (i = 0 ; i < 4 * runs + 1 ; i ++ ) {
3934
3962
int odd ;
0 commit comments