@@ -3100,11 +3100,10 @@ void test_ecmult_multi_batching(void) {
31003100
31013101 for (i = 1 ; i <= n_points ; i ++ ) {
31023102 if (i >= ECMULT_PIPPENGER_THRESHOLD ) {
3103- int bucket_window = secp256k1_pippenger_bucket_window (i );
3104- size_t scratch_size = secp256k1_pippenger_scratch_size (i , bucket_window );
3103+ size_t scratch_size = secp256k1_ecmult_multi_scratch_size (i );
31053104 scratch = secp256k1_scratch_create (& ctx -> error_callback , scratch_size );
31063105 } else {
3107- size_t scratch_size = secp256k1_strauss_scratch_size (i );
3106+ size_t scratch_size = secp256k1_ecmult_multi_scratch_size (i );
31083107 scratch = secp256k1_scratch_create (& ctx -> error_callback , scratch_size );
31093108 }
31103109 CHECK (secp256k1_ecmult_multi_var (& ctx -> error_callback , & ctx -> ecmult_ctx , scratch , & r , & scG , ecmult_multi_callback , & data , n_points ));
@@ -3116,6 +3115,15 @@ void test_ecmult_multi_batching(void) {
31163115 free (pt );
31173116}
31183117
3118+ void test_ecmult_multi_scratch_size (void ) {
3119+ /* test ECMULT_MAX_POINTS_PER_BATCH limit */
3120+ size_t n_points = ECMULT_MAX_POINTS_PER_BATCH + 1 ;
3121+ size_t scratch_size = secp256k1_ecmult_multi_scratch_size (n_points );
3122+ int expected_bucket_window = secp256k1_pippenger_bucket_window (n_points - 1 );
3123+ size_t expected_scratch_size = secp256k1_pippenger_scratch_size (n_points - 1 , expected_bucket_window );
3124+ CHECK (expected_scratch_size == scratch_size );
3125+ }
3126+
31193127void run_ecmult_multi_tests (void ) {
31203128 secp256k1_scratch * scratch ;
31213129
@@ -3137,6 +3145,7 @@ void run_ecmult_multi_tests(void) {
31373145
31383146 test_ecmult_multi_batch_size_helper ();
31393147 test_ecmult_multi_batching ();
3148+ test_ecmult_multi_scratch_size ();
31403149}
31413150
31423151void test_wnaf (const secp256k1_scalar * number , int w ) {
0 commit comments