@@ -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