@@ -28,6 +28,7 @@ typedef struct {
2828 secp256k1_ge * pubkeys ;
2929 secp256k1_scalar * seckeys ;
3030 secp256k1_gej * expected_output ;
31+ secp256k1_ecmult_multi_func ecmult_multi ;
3132
3233 /* Changes per test */
3334 size_t count ;
@@ -63,7 +64,7 @@ static void bench_ecmult(void* arg) {
6364 size_t iter ;
6465
6566 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 );
6768 data -> offset1 = (data -> offset1 + count ) % POINTS ;
6869 data -> offset2 = (data -> offset2 + count - 1 ) % POINTS ;
6970 }
@@ -136,10 +137,24 @@ int main(int argc, char **argv) {
136137 bench_data data ;
137138 int i , p ;
138139 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+ }
139153
140154 /* Allocate stuff */
141155 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 );
143158 data .scalars = malloc (sizeof (secp256k1_scalar ) * POINTS );
144159 data .seckeys = malloc (sizeof (secp256k1_scalar ) * POINTS );
145160 data .pubkeys = malloc (sizeof (secp256k1_ge ) * POINTS );
0 commit comments