@@ -3154,11 +3154,10 @@ void test_ecmult_multi_batching(void) {
3154
3154
3155
3155
for (i = 1 ; i <= n_points ; i ++ ) {
3156
3156
if (i >= ECMULT_PIPPENGER_THRESHOLD ) {
3157
- int bucket_window = secp256k1_pippenger_bucket_window (i );
3158
- size_t scratch_size = secp256k1_pippenger_scratch_size (i , bucket_window );
3157
+ size_t scratch_size = secp256k1_ecmult_multi_scratch_size (i );
3159
3158
scratch = secp256k1_scratch_create (& ctx -> error_callback , scratch_size );
3160
3159
} else {
3161
- size_t scratch_size = secp256k1_strauss_scratch_size (i );
3160
+ size_t scratch_size = secp256k1_ecmult_multi_scratch_size (i );
3162
3161
scratch = secp256k1_scratch_create (& ctx -> error_callback , scratch_size );
3163
3162
}
3164
3163
CHECK (secp256k1_ecmult_multi_var (& ctx -> error_callback , & ctx -> ecmult_ctx , scratch , & r , & scG , ecmult_multi_callback , & data , n_points ));
@@ -3170,6 +3169,15 @@ void test_ecmult_multi_batching(void) {
3170
3169
free (pt );
3171
3170
}
3172
3171
3172
+ void test_ecmult_multi_scratch_size (void ) {
3173
+ /* test ECMULT_MAX_POINTS_PER_BATCH limit */
3174
+ size_t n_points = ECMULT_MAX_POINTS_PER_BATCH + 1 ;
3175
+ size_t scratch_size = secp256k1_ecmult_multi_scratch_size (n_points );
3176
+ int expected_bucket_window = secp256k1_pippenger_bucket_window (n_points - 1 );
3177
+ size_t expected_scratch_size = secp256k1_pippenger_scratch_size (n_points - 1 , expected_bucket_window );
3178
+ CHECK (expected_scratch_size == scratch_size );
3179
+ }
3180
+
3173
3181
void run_ecmult_multi_tests (void ) {
3174
3182
secp256k1_scratch * scratch ;
3175
3183
@@ -3193,6 +3201,7 @@ void run_ecmult_multi_tests(void) {
3193
3201
3194
3202
test_ecmult_multi_batch_size_helper ();
3195
3203
test_ecmult_multi_batching ();
3204
+ test_ecmult_multi_scratch_size ();
3196
3205
}
3197
3206
3198
3207
void test_wnaf (const secp256k1_scalar * number , int w ) {
0 commit comments