-
Notifications
You must be signed in to change notification settings - Fork 1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
876 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
/********************************************************************** | ||
* Copyright (c) 2014 Pieter Wuille * | ||
* Distributed under the MIT software license, see the accompanying * | ||
* file COPYING or http://www.opensource.org/licenses/mit-license.php.* | ||
**********************************************************************/ | ||
|
||
#include <stdio.h> | ||
#include <string.h> | ||
|
||
#include "include/secp256k1.h" | ||
#include "util.h" | ||
#include "bench.h" | ||
|
||
typedef struct { | ||
unsigned char key[32]; | ||
unsigned char sig[64]; | ||
unsigned char pubkey[33]; | ||
int pubkeylen; | ||
} benchmark_schnorr_sig_t; | ||
|
||
typedef struct { | ||
secp256k1_context_t *ctx; | ||
unsigned char msg[32]; | ||
benchmark_schnorr_sig_t sigs[64]; | ||
int numsigs; | ||
} benchmark_schnorr_verify_t; | ||
|
||
static void benchmark_schnorr_init(void* arg) { | ||
int i, k; | ||
benchmark_schnorr_verify_t* data = (benchmark_schnorr_verify_t*)arg; | ||
|
||
for (i = 0; i < 32; i++) data->msg[i] = 1 + i; | ||
for (k = 0; k < data->numsigs; k++) { | ||
for (i = 0; i < 32; i++) data->sigs[k].key[i] = 33 + i + k; | ||
secp256k1_schnorr_sign(data->ctx, data->msg, data->sigs[k].sig, data->sigs[k].key, NULL, NULL); | ||
data->sigs[k].pubkeylen = 33; | ||
CHECK(secp256k1_ec_pubkey_create(data->ctx, data->sigs[k].pubkey, &data->sigs[k].pubkeylen, data->sigs[k].key, 1)); | ||
} | ||
} | ||
|
||
static void benchmark_schnorr_verify(void* arg) { | ||
int i; | ||
benchmark_schnorr_verify_t* data = (benchmark_schnorr_verify_t*)arg; | ||
|
||
for (i = 0; i < 20000 / data->numsigs; i++) { | ||
data->sigs[0].sig[(i >> 8) % 64] ^= (i & 0xFF); | ||
CHECK(secp256k1_schnorr_verify(data->ctx, data->msg, data->sigs[0].sig, data->sigs[0].pubkey, data->sigs[0].pubkeylen) == ((i & 0xFF) == 0)); | ||
data->sigs[0].sig[(i >> 8) % 64] ^= (i & 0xFF); | ||
} | ||
} | ||
|
||
|
||
|
||
int main(void) { | ||
benchmark_schnorr_verify_t data; | ||
|
||
data.ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); | ||
|
||
data.numsigs = 1; | ||
run_benchmark("schnorr_verify", benchmark_schnorr_verify, benchmark_schnorr_init, NULL, &data, 10, 20000); | ||
|
||
secp256k1_context_destroy(data.ctx); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
/*********************************************************************** | ||
* Copyright (c) 2014-2015 Pieter Wuille * | ||
* Distributed under the MIT software license, see the accompanying * | ||
* file COPYING or http://www.opensource.org/licenses/mit-license.php. * | ||
***********************************************************************/ | ||
|
||
#ifndef _SECP256K1_SCHNORR_ | ||
#define _SECP256K1_SCHNORR_ | ||
|
||
#include "scalar.h" | ||
#include "group.h" | ||
|
||
typedef void (*secp256k1_schnorr_msghash_t)(unsigned char *h32, const unsigned char *r32, const unsigned char *msg32); | ||
|
||
static int secp256k1_schnorr_sig_sign(const secp256k1_ecmult_gen_context_t* ctx, unsigned char *sig64, const secp256k1_scalar_t *key, const secp256k1_scalar_t *nonce, const secp256k1_ge_t *pubnonce, secp256k1_schnorr_msghash_t hash, const unsigned char *msg32); | ||
static int secp256k1_schnorr_sig_verify(const secp256k1_ecmult_context_t* ctx, const unsigned char *sig64, const secp256k1_ge_t *pubkey, secp256k1_schnorr_msghash_t hash, const unsigned char *msg32); | ||
static int secp256k1_schnorr_sig_recover(const secp256k1_ecmult_context_t* ctx, const unsigned char *sig64, secp256k1_ge_t *pubkey, secp256k1_schnorr_msghash_t hash, const unsigned char *msg32); | ||
|
||
#endif |
Oops, something went wrong.