PRCYCoin  2.0.0.7rc1
P2P Digital Currency
bench_generator.c
Go to the documentation of this file.
1 /**********************************************************************
2  * Copyright (c) 2016 Pieter Wuille *
3  * Distributed under the MIT software license, see the accompanying *
4  * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
5  **********************************************************************/
6 
7 #include <stdint.h>
8 #include <string.h>
9 
11 #include "util.h"
12 #include "bench.h"
13 
14 typedef struct {
15  secp256k1_context2* ctx;
16  unsigned char key[32];
17  unsigned char blind[32];
19 
20 static void bench_generator_setup(void* arg) {
22  memset(data->key, 0x31, 32);
23  memset(data->blind, 0x13, 32);
24 }
25 
26 static void bench_generator_generate(void* arg) {
27  int i;
29 
30  for (i = 0; i < 20000; i++) {
32  CHECK(secp256k1_generator_generate(data->ctx, &gen, data->key));
33  data->key[i & 31]++;
34  }
35 }
36 
37 static void bench_generator_generate_blinded(void* arg) {
38  int i;
40 
41  for (i = 0; i < 20000; i++) {
43  CHECK(secp256k1_generator_generate_blinded(data->ctx, &gen, data->key, data->blind));
44  data->key[1 + (i & 30)]++;
45  data->blind[1 + (i & 30)]++;
46  }
47 }
48 
49 int main(void) {
50  bench_generator_t data;
51 
53 
54  run_benchmark("generator_generate", bench_generator_generate, bench_generator_setup, NULL, &data, 10, 20000);
55  run_benchmark("generator_generate_blinded", bench_generator_generate_blinded, bench_generator_setup, NULL, &data, 10, 20000);
56 
58  return 0;
59 }
bench.h
util.h
secp256k1_generator_generate_blinded
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_generator_generate_blinded(const secp256k1_context2 *ctx, secp256k1_generator *gen, const unsigned char *key32, const unsigned char *blind32) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4)
Generate a blinded generator for the curve.
Definition: main_impl.h:238
bench_generator_t::key
unsigned char key[32]
Definition: bench_generator.c:20
secp256k1_context_destroy
SECP256K1_API void secp256k1_context_destroy(secp256k1_context2 *ctx)
Destroy a secp256k1 context object.
Definition: secp256k1_2.c:110
run_benchmark
void run_benchmark(char *name, void(*benchmark)(void *), void(*setup)(void *), void(*teardown)(void *), void *data, int count, int iter)
Definition: bench.h:34
secp256k1_generator
Opaque data structure that stores a base point.
Definition: secp256k1_generator.h:20
bench_generator_t
Definition: bench_generator.c:14
main
int main(void)
Definition: bench_generator.c:49
bench_generator_t::ctx
secp256k1_context2 * ctx
Definition: bench_generator.c:19
secp256k1_context_struct2
Definition: secp256k1_types.h:15
key
CKey key
Definition: bip38tooldialog.cpp:173
secp256k1_generator.h
secp256k1_context_create2
SECP256K1_API secp256k1_context2 * secp256k1_context_create2(unsigned int flags) SECP256K1_WARN_UNUSED_RESULT
Create a secp256k1 context object.
Definition: secp256k1_2.c:75
bench_generator_t::blind
unsigned char blind[32]
Definition: bench_generator.c:21
SECP256K1_CONTEXT_VERIFY
#define SECP256K1_CONTEXT_VERIFY
Flags to pass to secp256k1_context_create2.
Definition: secp256k1_2.h:167
CHECK
#define CHECK(cond)
Definition: util.h:43
secp256k1_generator_generate
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_generator_generate(const secp256k1_context2 *ctx, secp256k1_generator *gen, const unsigned char *seed32) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3)
Generate a generator for the curve.
Definition: main_impl.h:231
SECP256K1_CONTEXT_SIGN
#define SECP256K1_CONTEXT_SIGN
Definition: secp256k1_2.h:168