Calling `secp256k1_context_create` with `SECP256K1_FLAGS_TYPE_CONTEXT` seems to be not strictly API-compliant, as the only allowed (non-deprecated) value is `SECP256K1_CONTEXT_NONE`, even if the former happens to map to the latter currently. Fix this by not dynamically creating a context in the first place and switch to using the static context, as it is sufficient for this benchmark and presumably matches what the "no capabilities" comment intended back then.
55 lines
1.7 KiB
C
55 lines
1.7 KiB
C
/***********************************************************************
|
|
* Copyright (c) 2015 Pieter Wuille, Andrew Poelstra *
|
|
* Distributed under the MIT software license, see the accompanying *
|
|
* file COPYING or https://www.opensource.org/licenses/mit-license.php.*
|
|
***********************************************************************/
|
|
|
|
#ifndef SECP256K1_MODULE_ECDH_BENCH_H
|
|
#define SECP256K1_MODULE_ECDH_BENCH_H
|
|
|
|
#include "../../../include/secp256k1_ecdh.h"
|
|
|
|
typedef struct {
|
|
const secp256k1_context *ctx;
|
|
secp256k1_pubkey point;
|
|
unsigned char scalar[32];
|
|
} bench_ecdh_data;
|
|
|
|
static void bench_ecdh_setup(void* arg) {
|
|
int i;
|
|
bench_ecdh_data *data = (bench_ecdh_data*)arg;
|
|
const unsigned char point[] = {
|
|
0x03,
|
|
0x54, 0x94, 0xc1, 0x5d, 0x32, 0x09, 0x97, 0x06,
|
|
0xc2, 0x39, 0x5f, 0x94, 0x34, 0x87, 0x45, 0xfd,
|
|
0x75, 0x7c, 0xe3, 0x0e, 0x4e, 0x8c, 0x90, 0xfb,
|
|
0xa2, 0xba, 0xd1, 0x84, 0xf8, 0x83, 0xc6, 0x9f
|
|
};
|
|
|
|
for (i = 0; i < 32; i++) {
|
|
data->scalar[i] = i + 1;
|
|
}
|
|
CHECK(secp256k1_ec_pubkey_parse(data->ctx, &data->point, point, sizeof(point)) == 1);
|
|
}
|
|
|
|
static void bench_ecdh(void* arg, int iters) {
|
|
int i;
|
|
unsigned char res[32];
|
|
bench_ecdh_data *data = (bench_ecdh_data*)arg;
|
|
|
|
for (i = 0; i < iters; i++) {
|
|
CHECK(secp256k1_ecdh(data->ctx, res, &data->point, data->scalar, NULL, NULL) == 1);
|
|
}
|
|
}
|
|
|
|
static void run_ecdh_bench(int iters, int argc, char** argv) {
|
|
bench_ecdh_data data;
|
|
int d = argc == 1;
|
|
|
|
data.ctx = secp256k1_context_static;
|
|
|
|
if (d || have_flag(argc, argv, "ecdh")) run_benchmark("ecdh", bench_ecdh, bench_ecdh_setup, NULL, &data, 10, iters);
|
|
}
|
|
|
|
#endif /* SECP256K1_MODULE_ECDH_BENCH_H */
|