@@ -28,6 +28,7 @@ typedef struct {
28
28
secp256k1_ge * pubkeys ;
29
29
secp256k1_scalar * seckeys ;
30
30
secp256k1_gej * expected_output ;
31
+ secp256k1_ecmult_multi_func ecmult_multi ;
31
32
32
33
/* Changes per test */
33
34
size_t count ;
@@ -63,7 +64,7 @@ static void bench_ecmult(void* arg) {
63
64
size_t iter ;
64
65
65
66
for (iter = 0 ; iter < iters ; ++ iter ) {
66
- secp256k1_ecmult_multi_var (& data -> ctx -> ecmult_ctx , data -> scratch , & data -> output [iter ], data -> includes_g ? & data -> scalars [data -> offset1 ] : NULL , bench_callback , arg , count - includes_g );
67
+ data -> ecmult_multi (& data -> ctx -> ecmult_ctx , data -> scratch , & data -> output [iter ], data -> includes_g ? & data -> scalars [data -> offset1 ] : NULL , bench_callback , arg , count - includes_g );
67
68
data -> offset1 = (data -> offset1 + count ) % POINTS ;
68
69
data -> offset2 = (data -> offset2 + count - 1 ) % POINTS ;
69
70
}
@@ -136,10 +137,24 @@ int main(int argc, char **argv) {
136
137
bench_data data ;
137
138
int i , p ;
138
139
secp256k1_gej * pubkeys_gej ;
140
+ size_t scratch_size ;
141
+
142
+ if (argc > 1 ) {
143
+ if (have_flag (argc , argv , "pippenger_wnaf" )) {
144
+ printf ("Using pippenger_wnaf:\n" );
145
+ data .ecmult_multi = secp256k1_ecmult_pippenger_batch_single ;
146
+ } else if (have_flag (argc , argv , "strauss_wnaf" )) {
147
+ printf ("Using strauss_wnaf:\n" );
148
+ data .ecmult_multi = secp256k1_ecmult_strauss_batch_single ;
149
+ }
150
+ } else {
151
+ data .ecmult_multi = secp256k1_ecmult_multi_var ;
152
+ }
139
153
140
154
/* Allocate stuff */
141
155
data .ctx = secp256k1_context_create (SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY );
142
- data .scratch = secp256k1_scratch_space_create (data .ctx , POINTS * 1024 , POINTS * 5 * 1024 );
156
+ scratch_size = secp256k1_strauss_scratch_size (POINTS ) + STRAUSS_SCRATCH_OBJECTS * 16 ;
157
+ data .scratch = secp256k1_scratch_space_create (data .ctx , scratch_size , scratch_size );
143
158
data .scalars = malloc (sizeof (secp256k1_scalar ) * POINTS );
144
159
data .seckeys = malloc (sizeof (secp256k1_scalar ) * POINTS );
145
160
data .pubkeys = malloc (sizeof (secp256k1_ge ) * POINTS );
0 commit comments