50 *ge = secp256k1_ge_const_g;
58 static void bench_ecmult(
void* arg) {
61 size_t count = data->
count;
63 size_t iters = 1 +
ITERS / count;
66 for (iter = 0; iter < iters; ++iter) {
73 static void bench_ecmult_setup(
void* arg) {
79 static void bench_ecmult_teardown(
void* arg) {
84 for (iter = 0; iter < iters; ++iter) {
87 CHECK(secp256k1_gej_is_infinity(&tmp));
93 unsigned char c[11] = {
'e',
'c',
'm',
'u',
'l',
't', 0, 0, 0, 0};
94 unsigned char buf[32];
100 secp256k1_sha256_initialize(&
sha256);
101 secp256k1_sha256_write(&
sha256, c,
sizeof(c));
102 secp256k1_sha256_finalize(&
sha256, buf);
103 secp256k1_scalar_set_b32(scalar, buf, &overflow);
107 static void run_test(
bench_data* data,
size_t count,
int includes_g) {
110 size_t iters = 1 +
ITERS / count;
119 for (iter = 0; iter < iters; ++iter) {
123 for (i = 0; i + 1 < count; ++i) {
125 secp256k1_scalar_add(&total, &total, &tmp);
127 secp256k1_scalar_negate(&total, &total);
132 sprintf(str, includes_g ?
"ecmult_%ig" :
"ecmult_%i", (
int)count);
133 run_benchmark(str, bench_ecmult, bench_ecmult_setup, bench_ecmult_teardown, data, 10, count * (1 +
ITERS / count));
136 int main(
int argc,
char **argv) {
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;
166 secp256k1_gej_set_ge(&pubkeys_gej[0], &secp256k1_ge_const_g);
167 secp256k1_scalar_set_int(&data.
seckeys[0], 1);
168 for (i = 0; i <
POINTS; ++i) {
169 generate_scalar(i, &data.
scalars[i]);
171 secp256k1_gej_double_var(&pubkeys_gej[i], &pubkeys_gej[i - 1], NULL);
178 for (i = 1; i <= 8; ++i) {
179 run_test(&data, i, 1);
182 for (p = 0; p <= 11; ++p) {
183 for (i = 9; i <= 16; ++i) {
184 run_test(&data, i << p, 1);