@@ -5600,9 +5600,29 @@ static void test_ecmult_gen_blind_reset(void) {
5600
5600
CHECK (secp256k1_ge_eq_var (& p1 , & p2 ));
5601
5601
}
5602
5602
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
+
5603
5622
static void run_ecmult_gen_blind (void ) {
5604
5623
int i ;
5605
5624
test_ecmult_gen_blind_reset ();
5625
+ test_ecmult_gen_edge_cases ();
5606
5626
for (i = 0 ; i < 10 ; i ++ ) {
5607
5627
test_ecmult_gen_blind ();
5608
5628
}
0 commit comments