7 #ifndef SECP256K1_MODULE_SCHNORR_TESTS 8 #define SECP256K1_MODULE_SCHNORR_TESTS 13 unsigned char privkey[32];
14 unsigned char message[32];
15 unsigned char schnorr_signature[64];
34 CHECK(memcmp(&pubkey, &recpubkey,
sizeof(pubkey)) == 0);
39 memcmp(&pubkey, &recpubkey,
sizeof(pubkey)) != 0);
43 void test_schnorr_hash(
unsigned char *h32,
const unsigned char *r32,
const unsigned char *msg32) {
45 for (i = 0; i < 32; i++) {
46 h32[i] = r32[i] ^ msg32[i];
51 unsigned char msg32[32];
52 unsigned char sig64[3][64];
61 for (k = 0; k < 3; k++) {
75 for (i = 0; i < 4; i++) {
86 unsigned char msg[32];
87 unsigned char sec[5][32];
89 unsigned char nonce[5][32];
91 unsigned char sig[5][64];
92 const unsigned char* sigs[5];
93 unsigned char allsig[64];
103 for (i = 0; i <
n; i++) {
113 }
else if (damage == 2) {
116 for (i = 0; i <
n; i++) {
120 for (j = 0; j < i; j++) {
121 pubnonces[j] = &pubnonce[j];
123 for (j = i + 1; j <
n; j++) {
124 pubnonces[j - 1] = &pubnonce[j];
134 if ((ret & 1) == 0) {
140 if ((ret & 7) == 0) {
143 CHECK((ret == 0) == (damage == 0));
147 unsigned char msg32[32];
148 unsigned char sig64[64];
161 for (i = 0; i < 32*
count; i++) {
164 for (i = 0; i < 32 *
count; i++) {
167 for (i = 0; i < 16 *
count; i++) {
170 for (i = 0; i < 10 *
count; i++) {
static void secp256k1_ecmult_gen(const secp256k1_ecmult_gen_context *ctx, secp256k1_gej *r, const secp256k1_scalar *a)
SECP256K1_API int secp256k1_schnorr_sign(const secp256k1_context *ctx, unsigned char *sig64, const unsigned char *msg32, const unsigned char *seckey, secp256k1_nonce_function noncefp, const void *ndata) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4)
static void secp256k1_ge_set_gej_var(secp256k1_ge *r, secp256k1_gej *a)
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_schnorr_partial_combine(const secp256k1_context *ctx, unsigned char *sig64, const unsigned char *const *sig64sin, size_t n) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3)
static uint32_t secp256k1_rand_int(uint32_t range)
void test_schnorr_hash(unsigned char *h32, const unsigned char *r32, const unsigned char *msg32)
SECP256K1_API int secp256k1_schnorr_recover(const secp256k1_context *ctx, secp256k1_pubkey *pubkey, const unsigned char *sig64, const unsigned char *msg32) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4)
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_create(const secp256k1_context *ctx, secp256k1_pubkey *pubkey, const unsigned char *seckey) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3)
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_seckey_verify(const secp256k1_context *ctx, const unsigned char *seckey) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2)
secp256k1_ecmult_gen_context ecmult_gen_ctx
static secp256k1_context * ctx
SECP256K1_API int secp256k1_schnorr_generate_nonce_pair(const secp256k1_context *ctx, secp256k1_pubkey *pubnonce, unsigned char *privnonce32, const unsigned char *msg32, const unsigned char *sec32, secp256k1_nonce_function noncefp, const void *noncedata) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3)
secp256k1_ecmult_context ecmult_ctx
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_schnorr_verify(const secp256k1_context *ctx, const unsigned char *sig64, const unsigned char *msg32, const secp256k1_pubkey *pubkey) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4)
void test_schnorr_end_to_end(void)
static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar *a)
void test_schnorr_recovery(void)
static int secp256k1_schnorr_sig_sign(const secp256k1_ecmult_gen_context *ctx, unsigned char *sig64, const secp256k1_scalar *key, const secp256k1_scalar *nonce, const secp256k1_ge *pubnonce, secp256k1_schnorr_msghash hash, const unsigned char *msg32)
void run_schnorr_tests(void)
void random_scalar_order_test(secp256k1_scalar *num)
static uint32_t secp256k1_rand_bits(int bits)
void test_schnorr_threshold(void)
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_schnorr_partial_sign(const secp256k1_context *ctx, unsigned char *sig64, const unsigned char *msg32, const unsigned char *sec32, const secp256k1_pubkey *pubnonce_others, const unsigned char *secnonce32) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4) SECP256K1_ARG_NONNULL(5) SECP256K1_ARG_NONNULL(6)
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_ec_pubkey_combine(const secp256k1_context *ctx, secp256k1_pubkey *out, const secp256k1_pubkey *const *ins, size_t n) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3)
static int secp256k1_schnorr_sig_verify(const secp256k1_ecmult_context *ctx, const unsigned char *sig64, const secp256k1_ge *pubkey, secp256k1_schnorr_msghash hash, const unsigned char *msg32)
static int secp256k1_schnorr_sig_recover(const secp256k1_ecmult_context *ctx, const unsigned char *sig64, secp256k1_ge *pubkey, secp256k1_schnorr_msghash hash, const unsigned char *msg32)
void test_schnorr_sign_verify(void)
static void secp256k1_rand256_test(unsigned char *b32)