@@ -3100,11 +3100,10 @@ void test_ecmult_multi_batching(void) {
3100
3100
3101
3101
for (i = 1 ; i <= n_points ; i ++ ) {
3102
3102
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 );
3105
3104
scratch = secp256k1_scratch_create (& ctx -> error_callback , scratch_size );
3106
3105
} else {
3107
- size_t scratch_size = secp256k1_strauss_scratch_size (i );
3106
+ size_t scratch_size = secp256k1_ecmult_multi_scratch_size (i );
3108
3107
scratch = secp256k1_scratch_create (& ctx -> error_callback , scratch_size );
3109
3108
}
3110
3109
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) {
3116
3115
free (pt );
3117
3116
}
3118
3117
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
+
3119
3127
void run_ecmult_multi_tests (void ) {
3120
3128
secp256k1_scratch * scratch ;
3121
3129
@@ -3137,6 +3145,7 @@ void run_ecmult_multi_tests(void) {
3137
3145
3138
3146
test_ecmult_multi_batch_size_helper ();
3139
3147
test_ecmult_multi_batching ();
3148
+ test_ecmult_multi_scratch_size ();
3140
3149
}
3141
3150
3142
3151
void test_wnaf (const secp256k1_scalar * number , int w ) {
0 commit comments