Skip to content

Commit a597a5a

Browse files
committed
Add benchmark for key generation
1 parent 30574f2 commit a597a5a

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

src/bench.c

+29-1
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)