@@ -5600,9 +5600,29 @@ static void test_ecmult_gen_blind_reset(void) {
56005600 CHECK (secp256k1_ge_eq_var (& p1 , & p2 ));
56015601}
56025602
5603+ /* Verify that ecmult_gen for scalars gn for which gn + scalar_offset = {-1,0,1}. */
5604+ static void test_ecmult_gen_edge_cases (void ) {
5605+ int i ;
5606+ secp256k1_gej res1 , res2 , res3 ;
5607+ secp256k1_scalar gn = secp256k1_scalar_one ; /* gn = 1 */
5608+ secp256k1_scalar_add (& gn , & gn , & CTX -> ecmult_gen_ctx .scalar_offset ); /* gn = 1 + scalar_offset */
5609+ secp256k1_scalar_negate (& gn , & gn ); /* gn = -1 - scalar_offset */
5610+
5611+ for (i = -1 ; i < 2 ; ++ i ) {
5612+ /* Run test with gn = i - scalar_offset (so that the ecmult_gen recoded value represents i). */
5613+ secp256k1_ecmult_gen (& CTX -> ecmult_gen_ctx , & res1 , & gn );
5614+ secp256k1_ecmult (& res2 , NULL , & secp256k1_scalar_zero , & gn );
5615+ secp256k1_ecmult_const (& res3 , & secp256k1_ge_const_g , & gn );
5616+ CHECK (secp256k1_gej_eq_var (& res1 , & res2 ));
5617+ CHECK (secp256k1_gej_eq_var (& res1 , & res3 ));
5618+ secp256k1_scalar_add (& gn , & gn , & secp256k1_scalar_one );
5619+ }
5620+ }
5621+
56035622static void run_ecmult_gen_blind (void ) {
56045623 int i ;
56055624 test_ecmult_gen_blind_reset ();
5625+ test_ecmult_gen_edge_cases ();
56065626 for (i = 0 ; i < 10 ; i ++ ) {
56075627 test_ecmult_gen_blind ();
56085628 }
0 commit comments