@@ -3872,6 +3872,22 @@ void run_gej(void) {
38723872 test_gej_cmov (& a , & b );
38733873 test_gej_cmov (& b , & a );
38743874 }
3875+
3876+ /* Tests for secp256k1_gej_eq_var */
3877+ for (i = 0 ; i < count ; i ++ ) {
3878+ secp256k1_fe fe ;
3879+ random_gej_test (& a );
3880+ random_gej_test (& b );
3881+ CHECK (!secp256k1_gej_eq_var (& a , & b ));
3882+
3883+ b = a ;
3884+ random_field_element_test (& fe );
3885+ if (secp256k1_fe_is_zero (& fe )) {
3886+ continue ;
3887+ }
3888+ secp256k1_gej_rescale (& a , & fe );
3889+ CHECK (secp256k1_gej_eq_var (& a , & b ));
3890+ }
38753891}
38763892
38773893void test_ec_combine (void ) {
@@ -4077,17 +4093,12 @@ void run_ecmult_chain(void) {
40774093 0xB95CBCA2 , 0xC77DA786 , 0x539BE8FD , 0x53354D2D ,
40784094 0x3B4F566A , 0xE6580454 , 0x07ED6015 , 0xEE1B2A88
40794095 );
4080-
4081- secp256k1_gej_neg (& rp , & rp );
4082- secp256k1_gej_add_var (& rp , & rp , & x , NULL );
4083- CHECK (secp256k1_gej_is_infinity (& rp ));
4096+ CHECK (secp256k1_gej_eq_var (& rp , & x ));
40844097 }
40854098 }
40864099 /* redo the computation, but directly with the resulting ae and ge coefficients: */
40874100 secp256k1_ecmult (& x2 , & a , & ae , & ge );
4088- secp256k1_gej_neg (& x2 , & x2 );
4089- secp256k1_gej_add_var (& x2 , & x2 , & x , NULL );
4090- CHECK (secp256k1_gej_is_infinity (& x2 ));
4101+ CHECK (secp256k1_gej_eq_var (& x , & x2 ));
40914102}
40924103
40934104void test_point_times_order (const secp256k1_gej * point ) {
@@ -4380,33 +4391,25 @@ void test_ecmult_multi(secp256k1_scratch *scratch, secp256k1_ecmult_multi_func e
43804391 /* only G scalar */
43814392 secp256k1_ecmult (& r2 , & ptgj , & szero , & sc [0 ]);
43824393 CHECK (ecmult_multi (& ctx -> error_callback , scratch , & r , & sc [0 ], ecmult_multi_callback , & data , 0 ));
4383- secp256k1_gej_neg (& r2 , & r2 );
4384- secp256k1_gej_add_var (& r , & r , & r2 , NULL );
4385- CHECK (secp256k1_gej_is_infinity (& r ));
4394+ CHECK (secp256k1_gej_eq_var (& r , & r2 ));
43864395
43874396 /* 1-point */
43884397 secp256k1_ecmult (& r2 , & ptgj , & sc [0 ], & szero );
43894398 CHECK (ecmult_multi (& ctx -> error_callback , scratch , & r , & szero , ecmult_multi_callback , & data , 1 ));
4390- secp256k1_gej_neg (& r2 , & r2 );
4391- secp256k1_gej_add_var (& r , & r , & r2 , NULL );
4392- CHECK (secp256k1_gej_is_infinity (& r ));
4399+ CHECK (secp256k1_gej_eq_var (& r , & r2 ));
43934400
43944401 /* Try to multiply 1 point, but callback returns false */
43954402 CHECK (!ecmult_multi (& ctx -> error_callback , scratch , & r , & szero , ecmult_multi_false_callback , & data , 1 ));
43964403
43974404 /* 2-point */
43984405 secp256k1_ecmult (& r2 , & ptgj , & sc [0 ], & sc [1 ]);
43994406 CHECK (ecmult_multi (& ctx -> error_callback , scratch , & r , & szero , ecmult_multi_callback , & data , 2 ));
4400- secp256k1_gej_neg (& r2 , & r2 );
4401- secp256k1_gej_add_var (& r , & r , & r2 , NULL );
4402- CHECK (secp256k1_gej_is_infinity (& r ));
4407+ CHECK (secp256k1_gej_eq_var (& r , & r2 ));
44034408
44044409 /* 2-point with G scalar */
44054410 secp256k1_ecmult (& r2 , & ptgj , & sc [0 ], & sc [1 ]);
44064411 CHECK (ecmult_multi (& ctx -> error_callback , scratch , & r , & sc [1 ], ecmult_multi_callback , & data , 1 ));
4407- secp256k1_gej_neg (& r2 , & r2 );
4408- secp256k1_gej_add_var (& r , & r , & r2 , NULL );
4409- CHECK (secp256k1_gej_is_infinity (& r ));
4412+ CHECK (secp256k1_gej_eq_var (& r , & r2 ));
44104413 }
44114414
44124415 /* Check infinite outputs of various forms */
@@ -4491,9 +4494,7 @@ void test_ecmult_multi(secp256k1_scratch *scratch, secp256k1_ecmult_multi_func e
44914494
44924495 secp256k1_ecmult (& r2 , & r , & sc [0 ], & szero );
44934496 CHECK (ecmult_multi (& ctx -> error_callback , scratch , & r , & szero , ecmult_multi_callback , & data , 20 ));
4494- secp256k1_gej_neg (& r2 , & r2 );
4495- secp256k1_gej_add_var (& r , & r , & r2 , NULL );
4496- CHECK (secp256k1_gej_is_infinity (& r ));
4497+ CHECK (secp256k1_gej_eq_var (& r , & r2 ));
44974498 }
44984499
44994500 /* Check random scalars, constant point */
@@ -4514,9 +4515,7 @@ void test_ecmult_multi(secp256k1_scratch *scratch, secp256k1_ecmult_multi_func e
45144515 secp256k1_gej_set_ge (& p0j , & pt [0 ]);
45154516 secp256k1_ecmult (& r2 , & p0j , & rs , & szero );
45164517 CHECK (ecmult_multi (& ctx -> error_callback , scratch , & r , & szero , ecmult_multi_callback , & data , 20 ));
4517- secp256k1_gej_neg (& r2 , & r2 );
4518- secp256k1_gej_add_var (& r , & r , & r2 , NULL );
4519- CHECK (secp256k1_gej_is_infinity (& r ));
4518+ CHECK (secp256k1_gej_eq_var (& r , & r2 ));
45204519 }
45214520
45224521 /* Sanity check that zero scalars don't cause problems */
@@ -4578,9 +4577,7 @@ void test_ecmult_multi(secp256k1_scratch *scratch, secp256k1_ecmult_multi_func e
45784577
45794578 secp256k1_ecmult (& expected , & ptgj , & tmp1 , & szero );
45804579 CHECK (ecmult_multi (& ctx -> error_callback , scratch , & actual , & szero , ecmult_multi_callback , & data , 2 ));
4581- secp256k1_gej_neg (& expected , & expected );
4582- secp256k1_gej_add_var (& actual , & actual , & expected , NULL );
4583- CHECK (secp256k1_gej_is_infinity (& actual ));
4580+ CHECK (secp256k1_gej_eq_var (& actual , & expected ));
45844581 }
45854582 }
45864583 }
@@ -4750,9 +4747,7 @@ int test_ecmult_multi_random(secp256k1_scratch *scratch) {
47504747 CHECK (ecmult_multi (& ctx -> error_callback , scratch , & computed , g_scalar_ptr , ecmult_multi_callback , & data , filled ));
47514748 mults += num_nonzero + g_nonzero ;
47524749 /* Compare with expected result. */
4753- secp256k1_gej_neg (& computed , & computed );
4754- secp256k1_gej_add_var (& computed , & computed , & expected , NULL );
4755- CHECK (secp256k1_gej_is_infinity (& computed ));
4750+ CHECK (secp256k1_gej_eq_var (& computed , & expected ));
47564751 return mults ;
47574752}
47584753
0 commit comments