github.com/guiltylotus/go-ethereum@v1.9.7/crypto/secp256k1/libsecp256k1/src/bench_sign.c (about)

     1  /**********************************************************************
     2   * Copyright (c) 2014 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 "include/secp256k1.h"
     8  #include "util.h"
     9  #include "bench.h"
    10  
    11  typedef struct {
    12      secp256k1_context* ctx;
    13      unsigned char msg[32];
    14      unsigned char key[32];
    15  } bench_sign_t;
    16  
    17  static void bench_sign_setup(void* arg) {
    18      int i;
    19      bench_sign_t *data = (bench_sign_t*)arg;
    20  
    21      for (i = 0; i < 32; i++) {
    22          data->msg[i] = i + 1;
    23      }
    24      for (i = 0; i < 32; i++) {
    25          data->key[i] = i + 65;
    26      }
    27  }
    28  
    29  static void bench_sign(void* arg) {
    30      int i;
    31      bench_sign_t *data = (bench_sign_t*)arg;
    32  
    33      unsigned char sig[74];
    34      for (i = 0; i < 20000; i++) {
    35          size_t siglen = 74;
    36          int j;
    37          secp256k1_ecdsa_signature signature;
    38          CHECK(secp256k1_ecdsa_sign(data->ctx, &signature, data->msg, data->key, NULL, NULL));
    39          CHECK(secp256k1_ecdsa_signature_serialize_der(data->ctx, sig, &siglen, &signature));
    40          for (j = 0; j < 32; j++) {
    41              data->msg[j] = sig[j];
    42              data->key[j] = sig[j + 32];
    43          }
    44      }
    45  }
    46  
    47  int main(void) {
    48      bench_sign_t data;
    49  
    50      data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN);
    51  
    52      run_benchmark("ecdsa_sign", bench_sign, bench_sign_setup, NULL, &data, 10, 20000);
    53  
    54      secp256k1_context_destroy(data.ctx);
    55      return 0;
    56  }