@@ -38,6 +38,8 @@ static void help(int default_iters) {
3838 printf (" ecdsa : all ECDSA algorithms--sign, verify, recovery (if enabled)\n" );
3939 printf (" ecdsa_sign : ECDSA siging algorithm\n" );
4040 printf (" ecdsa_verify : ECDSA verification algorithm\n" );
41+ printf (" ec : all EC public key algorithms (keygen)\n" );
42+ printf (" ec_keygen : EC public key generation\n" );
4143
4244#ifdef ENABLE_MODULE_RECOVERY
4345 printf (" ecdsa_recover : ECDSA public key recovery algorithm\n" );
@@ -115,6 +117,30 @@ static void bench_sign_run(void* arg, int iters) {
115117 }
116118}
117119
120+ static void bench_keygen_setup (void * arg ) {
121+ int i ;
122+ bench_data * data = (bench_data * )arg ;
123+
124+ for (i = 0 ; i < 32 ; i ++ ) {
125+ data -> key [i ] = i + 65 ;
126+ }
127+ }
128+
129+ static void bench_keygen_run (void * arg , int iters ) {
130+ int i ;
131+ bench_data * data = (bench_data * )arg ;
132+
133+ for (i = 0 ; i < iters ; i ++ ) {
134+ unsigned char pub33 [33 ];
135+ size_t len = 33 ;
136+ secp256k1_pubkey pubkey ;
137+ CHECK (secp256k1_ec_pubkey_create (data -> ctx , & pubkey , data -> key ));
138+ CHECK (secp256k1_ec_pubkey_serialize (data -> ctx , pub33 , & len , & pubkey , SECP256K1_EC_COMPRESSED ));
139+ memcpy (data -> key , pub33 + 1 , 32 );
140+ }
141+ }
142+
143+
118144#ifdef ENABLE_MODULE_ECDH
119145# include "modules/ecdh/bench_impl.h"
120146#endif
@@ -139,7 +165,8 @@ int main(int argc, char** argv) {
139165
140166 /* Check for invalid user arguments */
141167 char * valid_args [] = {"ecdsa" , "verify" , "ecdsa_verify" , "sign" , "ecdsa_sign" , "ecdh" , "recover" ,
142- "ecdsa_recover" , "schnorrsig" , "schnorrsig_verify" , "schnorrsig_sign" };
168+ "ecdsa_recover" , "schnorrsig" , "schnorrsig_verify" , "schnorrsig_sign" , "ec" ,
169+ "keygen" , "ec_keygen" };
143170 size_t valid_args_size = sizeof (valid_args )/sizeof (valid_args [0 ]);
144171 int invalid_args = have_invalid_args (argc , argv , valid_args , valid_args_size );
145172
@@ -201,6 +228,7 @@ int main(int argc, char** argv) {
201228 if (d || have_flag (argc , argv , "ecdsa" ) || have_flag (argc , argv , "verify" ) || have_flag (argc , argv , "ecdsa_verify" )) run_benchmark ("ecdsa_verify" , bench_verify , NULL , NULL , & data , 10 , iters );
202229
203230 if (d || have_flag (argc , argv , "ecdsa" ) || have_flag (argc , argv , "sign" ) || have_flag (argc , argv , "ecdsa_sign" )) run_benchmark ("ecdsa_sign" , bench_sign_run , bench_sign_setup , NULL , & data , 10 , iters );
231+ if (d || have_flag (argc , argv , "ec" ) || have_flag (argc , argv , "keygen" ) || have_flag (argc , argv , "ec_keygen" )) run_benchmark ("ec_keygen" , bench_keygen_run , bench_keygen_setup , NULL , & data , 10 , iters );
204232
205233 secp256k1_context_destroy (data .ctx );
206234
0 commit comments