mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-10 20:03:34 -03:00
Merge pull request #229
efc571c
Add simple testcases for signing with rfc6979 extra entropy. (Gregory Maxwell)1573a10
Add ability to pass extra entropy to rfc6979 (Pieter Wuille)
This commit is contained in:
commit
1897b8e90b
7 changed files with 69 additions and 24 deletions
|
@ -97,7 +97,10 @@ typedef int (*secp256k1_nonce_function_t)(
|
||||||
const void *data
|
const void *data
|
||||||
);
|
);
|
||||||
|
|
||||||
/** An implementation of RFC6979 (using HMAC-SHA256) as nonce generation function. */
|
/** An implementation of RFC6979 (using HMAC-SHA256) as nonce generation function.
|
||||||
|
* If a data pointer is passed, it is assumed to be a pointer to 32 bytes of
|
||||||
|
* extra entropy.
|
||||||
|
*/
|
||||||
extern const secp256k1_nonce_function_t secp256k1_nonce_function_rfc6979;
|
extern const secp256k1_nonce_function_t secp256k1_nonce_function_rfc6979;
|
||||||
|
|
||||||
/** A default safe nonce generation function (currently equal to secp256k1_nonce_function_rfc6979). */
|
/** A default safe nonce generation function (currently equal to secp256k1_nonce_function_rfc6979). */
|
||||||
|
|
|
@ -265,7 +265,7 @@ void bench_rfc6979_hmac_sha256(void* arg) {
|
||||||
secp256k1_rfc6979_hmac_sha256_t rng;
|
secp256k1_rfc6979_hmac_sha256_t rng;
|
||||||
|
|
||||||
for (i = 0; i < 20000; i++) {
|
for (i = 0; i < 20000; i++) {
|
||||||
secp256k1_rfc6979_hmac_sha256_initialize(&rng, data->data, 32, data->data, 32);
|
secp256k1_rfc6979_hmac_sha256_initialize(&rng, data->data, 32, data->data, 32, NULL, 0);
|
||||||
secp256k1_rfc6979_hmac_sha256_generate(&rng, data->data, 32);
|
secp256k1_rfc6979_hmac_sha256_generate(&rng, data->data, 32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ typedef struct {
|
||||||
int retry;
|
int retry;
|
||||||
} secp256k1_rfc6979_hmac_sha256_t;
|
} secp256k1_rfc6979_hmac_sha256_t;
|
||||||
|
|
||||||
static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen, const unsigned char *msg, size_t msglen);
|
static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen, const unsigned char *msg, size_t msglen, const unsigned char *rnd, size_t rndlen);
|
||||||
static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256_t *rng, unsigned char *out, size_t outlen);
|
static void secp256k1_rfc6979_hmac_sha256_generate(secp256k1_rfc6979_hmac_sha256_t *rng, unsigned char *out, size_t outlen);
|
||||||
static void secp256k1_rfc6979_hmac_sha256_finalize(secp256k1_rfc6979_hmac_sha256_t *rng);
|
static void secp256k1_rfc6979_hmac_sha256_finalize(secp256k1_rfc6979_hmac_sha256_t *rng);
|
||||||
|
|
||||||
|
|
|
@ -200,7 +200,7 @@ static void secp256k1_hmac_sha256_finalize(secp256k1_hmac_sha256_t *hash, unsign
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen, const unsigned char *msg, size_t msglen) {
|
static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha256_t *rng, const unsigned char *key, size_t keylen, const unsigned char *msg, size_t msglen, const unsigned char *rnd, size_t rndlen) {
|
||||||
secp256k1_hmac_sha256_t hmac;
|
secp256k1_hmac_sha256_t hmac;
|
||||||
static const unsigned char zero[1] = {0x00};
|
static const unsigned char zero[1] = {0x00};
|
||||||
static const unsigned char one[1] = {0x01};
|
static const unsigned char one[1] = {0x01};
|
||||||
|
@ -213,6 +213,9 @@ static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha2
|
||||||
secp256k1_hmac_sha256_write(&hmac, zero, 1);
|
secp256k1_hmac_sha256_write(&hmac, zero, 1);
|
||||||
secp256k1_hmac_sha256_write(&hmac, key, keylen);
|
secp256k1_hmac_sha256_write(&hmac, key, keylen);
|
||||||
secp256k1_hmac_sha256_write(&hmac, msg, msglen);
|
secp256k1_hmac_sha256_write(&hmac, msg, msglen);
|
||||||
|
if (rnd && rndlen) {
|
||||||
|
secp256k1_hmac_sha256_write(&hmac, rnd, rndlen);
|
||||||
|
}
|
||||||
secp256k1_hmac_sha256_finalize(&hmac, rng->k);
|
secp256k1_hmac_sha256_finalize(&hmac, rng->k);
|
||||||
secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
|
secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
|
||||||
secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
|
secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
|
||||||
|
@ -223,6 +226,9 @@ static void secp256k1_rfc6979_hmac_sha256_initialize(secp256k1_rfc6979_hmac_sha2
|
||||||
secp256k1_hmac_sha256_write(&hmac, one, 1);
|
secp256k1_hmac_sha256_write(&hmac, one, 1);
|
||||||
secp256k1_hmac_sha256_write(&hmac, key, keylen);
|
secp256k1_hmac_sha256_write(&hmac, key, keylen);
|
||||||
secp256k1_hmac_sha256_write(&hmac, msg, msglen);
|
secp256k1_hmac_sha256_write(&hmac, msg, msglen);
|
||||||
|
if (rnd && rndlen) {
|
||||||
|
secp256k1_hmac_sha256_write(&hmac, rnd, rndlen);
|
||||||
|
}
|
||||||
secp256k1_hmac_sha256_finalize(&hmac, rng->k);
|
secp256k1_hmac_sha256_finalize(&hmac, rng->k);
|
||||||
secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
|
secp256k1_hmac_sha256_initialize(&hmac, rng->k, 32);
|
||||||
secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
|
secp256k1_hmac_sha256_write(&hmac, rng->v, 32);
|
||||||
|
|
|
@ -66,8 +66,7 @@ int secp256k1_ecdsa_verify(const unsigned char *msg32, const unsigned char *sig,
|
||||||
static int nonce_function_rfc6979(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, unsigned int counter, const void *data) {
|
static int nonce_function_rfc6979(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, unsigned int counter, const void *data) {
|
||||||
secp256k1_rfc6979_hmac_sha256_t rng;
|
secp256k1_rfc6979_hmac_sha256_t rng;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
(void)data;
|
secp256k1_rfc6979_hmac_sha256_initialize(&rng, key32, 32, msg32, 32, data, data != NULL ? 32 : 0);
|
||||||
secp256k1_rfc6979_hmac_sha256_initialize(&rng, key32, 32, msg32, 32);
|
|
||||||
for (i = 0; i <= counter; i++) {
|
for (i = 0; i <= counter; i++) {
|
||||||
secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
|
secp256k1_rfc6979_hmac_sha256_generate(&rng, nonce32, 32);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ static uint32_t secp256k1_test_rng_precomputed[8];
|
||||||
static int secp256k1_test_rng_precomputed_used = 8;
|
static int secp256k1_test_rng_precomputed_used = 8;
|
||||||
|
|
||||||
SECP256K1_INLINE static void secp256k1_rand_seed(const unsigned char *seed16) {
|
SECP256K1_INLINE static void secp256k1_rand_seed(const unsigned char *seed16) {
|
||||||
secp256k1_rfc6979_hmac_sha256_initialize(&secp256k1_test_rng, (const unsigned char*)"TestRNG", 7, seed16, 16);
|
secp256k1_rfc6979_hmac_sha256_initialize(&secp256k1_test_rng, (const unsigned char*)"TestRNG", 7, seed16, 16, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECP256K1_INLINE static uint32_t secp256k1_rand32(void) {
|
SECP256K1_INLINE static uint32_t secp256k1_rand32(void) {
|
||||||
|
|
71
src/tests.c
71
src/tests.c
|
@ -200,16 +200,24 @@ void run_rfc6979_hmac_sha256_tests(void) {
|
||||||
|
|
||||||
secp256k1_rfc6979_hmac_sha256_t rng;
|
secp256k1_rfc6979_hmac_sha256_t rng;
|
||||||
unsigned char out[32];
|
unsigned char out[32];
|
||||||
|
unsigned char zero[1] = {0};
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
secp256k1_rfc6979_hmac_sha256_initialize(&rng, key1, 32, msg1, 32);
|
secp256k1_rfc6979_hmac_sha256_initialize(&rng, key1, 32, msg1, 32, NULL, 1);
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
|
secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
|
||||||
CHECK(memcmp(out, out1[i], 32) == 0);
|
CHECK(memcmp(out, out1[i], 32) == 0);
|
||||||
}
|
}
|
||||||
secp256k1_rfc6979_hmac_sha256_finalize(&rng);
|
secp256k1_rfc6979_hmac_sha256_finalize(&rng);
|
||||||
|
|
||||||
secp256k1_rfc6979_hmac_sha256_initialize(&rng, key2, 32, msg2, 32);
|
secp256k1_rfc6979_hmac_sha256_initialize(&rng, key1, 32, msg1, 32, zero, 1);
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
|
||||||
|
CHECK(memcmp(out, out1[i], 32) != 0);
|
||||||
|
}
|
||||||
|
secp256k1_rfc6979_hmac_sha256_finalize(&rng);
|
||||||
|
|
||||||
|
secp256k1_rfc6979_hmac_sha256_initialize(&rng, key2, 32, msg2, 32, zero, 0);
|
||||||
for (i = 0; i < 3; i++) {
|
for (i = 0; i < 3; i++) {
|
||||||
secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
|
secp256k1_rfc6979_hmac_sha256_generate(&rng, out, 32);
|
||||||
CHECK(memcmp(out, out2[i], 32) == 0);
|
CHECK(memcmp(out, out2[i], 32) == 0);
|
||||||
|
@ -1218,15 +1226,22 @@ int is_empty_compact_signature(const unsigned char *sig64) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_ecdsa_end_to_end(void) {
|
void test_ecdsa_end_to_end(void) {
|
||||||
|
unsigned char extra[32] = {0x00};
|
||||||
unsigned char privkey[32];
|
unsigned char privkey[32];
|
||||||
unsigned char message[32];
|
unsigned char message[32];
|
||||||
unsigned char privkey2[32];
|
unsigned char privkey2[32];
|
||||||
unsigned char csignature[64];
|
unsigned char csignature[64];
|
||||||
unsigned char signature[72];
|
unsigned char signature[72];
|
||||||
|
unsigned char signature2[72];
|
||||||
|
unsigned char signature3[72];
|
||||||
|
unsigned char signature4[72];
|
||||||
unsigned char pubkey[65];
|
unsigned char pubkey[65];
|
||||||
unsigned char recpubkey[65];
|
unsigned char recpubkey[65];
|
||||||
unsigned char seckey[300];
|
unsigned char seckey[300];
|
||||||
int signaturelen = 72;
|
int signaturelen = 72;
|
||||||
|
int signaturelen2 = 72;
|
||||||
|
int signaturelen3 = 72;
|
||||||
|
int signaturelen4 = 72;
|
||||||
int recid = 0;
|
int recid = 0;
|
||||||
int recpubkeylen = 0;
|
int recpubkeylen = 0;
|
||||||
int pubkeylen = 65;
|
int pubkeylen = 65;
|
||||||
|
@ -1289,8 +1304,26 @@ void test_ecdsa_end_to_end(void) {
|
||||||
/* Sign. */
|
/* Sign. */
|
||||||
CHECK(secp256k1_ecdsa_sign(message, signature, &signaturelen, privkey, NULL, NULL) == 1);
|
CHECK(secp256k1_ecdsa_sign(message, signature, &signaturelen, privkey, NULL, NULL) == 1);
|
||||||
CHECK(signaturelen > 0);
|
CHECK(signaturelen > 0);
|
||||||
|
CHECK(secp256k1_ecdsa_sign(message, signature2, &signaturelen2, privkey, NULL, extra) == 1);
|
||||||
|
CHECK(signaturelen2 > 0);
|
||||||
|
extra[31] = 1;
|
||||||
|
CHECK(secp256k1_ecdsa_sign(message, signature3, &signaturelen3, privkey, NULL, extra) == 1);
|
||||||
|
CHECK(signaturelen3 > 0);
|
||||||
|
extra[31] = 0;
|
||||||
|
extra[0] = 1;
|
||||||
|
CHECK(secp256k1_ecdsa_sign(message, signature4, &signaturelen4, privkey, NULL, extra) == 1);
|
||||||
|
CHECK(signaturelen3 > 0);
|
||||||
|
CHECK((signaturelen != signaturelen2) || (memcmp(signature, signature2, signaturelen) != 0));
|
||||||
|
CHECK((signaturelen != signaturelen3) || (memcmp(signature, signature3, signaturelen) != 0));
|
||||||
|
CHECK((signaturelen3 != signaturelen2) || (memcmp(signature3, signature2, signaturelen3) != 0));
|
||||||
|
CHECK((signaturelen4 != signaturelen3) || (memcmp(signature4, signature3, signaturelen4) != 0));
|
||||||
|
CHECK((signaturelen4 != signaturelen2) || (memcmp(signature4, signature2, signaturelen4) != 0));
|
||||||
|
CHECK((signaturelen4 != signaturelen) || (memcmp(signature4, signature, signaturelen4) != 0));
|
||||||
/* Verify. */
|
/* Verify. */
|
||||||
CHECK(secp256k1_ecdsa_verify(message, signature, signaturelen, pubkey, pubkeylen) == 1);
|
CHECK(secp256k1_ecdsa_verify(message, signature, signaturelen, pubkey, pubkeylen) == 1);
|
||||||
|
CHECK(secp256k1_ecdsa_verify(message, signature2, signaturelen2, pubkey, pubkeylen) == 1);
|
||||||
|
CHECK(secp256k1_ecdsa_verify(message, signature3, signaturelen3, pubkey, pubkeylen) == 1);
|
||||||
|
CHECK(secp256k1_ecdsa_verify(message, signature4, signaturelen4, pubkey, pubkeylen) == 1);
|
||||||
/* Destroy signature and verify again. */
|
/* Destroy signature and verify again. */
|
||||||
signature[signaturelen - 1 - secp256k1_rand32() % 20] += 1 + (secp256k1_rand32() % 255);
|
signature[signaturelen - 1 - secp256k1_rand32() % 20] += 1 + (secp256k1_rand32() % 255);
|
||||||
CHECK(secp256k1_ecdsa_verify(message, signature, signaturelen, pubkey, pubkeylen) != 1);
|
CHECK(secp256k1_ecdsa_verify(message, signature, signaturelen, pubkey, pubkeylen) != 1);
|
||||||
|
@ -1397,6 +1430,7 @@ void test_ecdsa_edge_cases(void) {
|
||||||
0x6E, 0x1B, 0xE8, 0xEC, 0xC7, 0xDD, 0x95, 0x57
|
0x6E, 0x1B, 0xE8, 0xEC, 0xC7, 0xDD, 0x95, 0x57
|
||||||
};
|
};
|
||||||
unsigned char pubkey[65];
|
unsigned char pubkey[65];
|
||||||
|
int t;
|
||||||
int pubkeylen = 65;
|
int pubkeylen = 65;
|
||||||
/* signature (r,s) = (4,4), which can be recovered with all 4 recids. */
|
/* signature (r,s) = (4,4), which can be recovered with all 4 recids. */
|
||||||
const unsigned char sigb64[64] = {
|
const unsigned char sigb64[64] = {
|
||||||
|
@ -1593,7 +1627,8 @@ void test_ecdsa_edge_cases(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Nonce function corner cases. */
|
/* Nonce function corner cases. */
|
||||||
{
|
for (t = 0; t < 2; t++) {
|
||||||
|
static const unsigned char zero[32] = {0x00};
|
||||||
int i;
|
int i;
|
||||||
unsigned char key[32];
|
unsigned char key[32];
|
||||||
unsigned char msg[32];
|
unsigned char msg[32];
|
||||||
|
@ -1603,45 +1638,47 @@ void test_ecdsa_edge_cases(void) {
|
||||||
int siglen = 72;
|
int siglen = 72;
|
||||||
int siglen2 = 72;
|
int siglen2 = 72;
|
||||||
int recid2;
|
int recid2;
|
||||||
|
const unsigned char *extra;
|
||||||
|
extra = t == 0 ? NULL : zero;
|
||||||
memset(msg, 0, 32);
|
memset(msg, 0, 32);
|
||||||
msg[31] = 1;
|
msg[31] = 1;
|
||||||
/* High key results in signature failure. */
|
/* High key results in signature failure. */
|
||||||
memset(key, 0xFF, 32);
|
memset(key, 0xFF, 32);
|
||||||
CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, NULL, NULL) == 0);
|
CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, NULL, extra) == 0);
|
||||||
CHECK(siglen == 0);
|
CHECK(siglen == 0);
|
||||||
/* Zero key results in signature failure. */
|
/* Zero key results in signature failure. */
|
||||||
memset(key, 0, 32);
|
memset(key, 0, 32);
|
||||||
CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, NULL, NULL) == 0);
|
CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, NULL, extra) == 0);
|
||||||
CHECK(siglen == 0);
|
CHECK(siglen == 0);
|
||||||
/* Nonce function failure results in signature failure. */
|
/* Nonce function failure results in signature failure. */
|
||||||
key[31] = 1;
|
key[31] = 1;
|
||||||
CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, nonce_function_test_fail, NULL) == 0);
|
CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, nonce_function_test_fail, extra) == 0);
|
||||||
CHECK(siglen == 0);
|
CHECK(siglen == 0);
|
||||||
CHECK(secp256k1_ecdsa_sign_compact(msg, sig, key, nonce_function_test_fail, NULL, &recid) == 0);
|
CHECK(secp256k1_ecdsa_sign_compact(msg, sig, key, nonce_function_test_fail, extra, &recid) == 0);
|
||||||
CHECK(is_empty_compact_signature(sig));
|
CHECK(is_empty_compact_signature(sig));
|
||||||
/* The retry loop successfully makes its way to the first good value. */
|
/* The retry loop successfully makes its way to the first good value. */
|
||||||
siglen = 72;
|
siglen = 72;
|
||||||
CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, nonce_function_test_retry, NULL) == 1);
|
CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, nonce_function_test_retry, extra) == 1);
|
||||||
CHECK(siglen > 0);
|
CHECK(siglen > 0);
|
||||||
CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, nonce_function_rfc6979, NULL) == 1);
|
CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, nonce_function_rfc6979, extra) == 1);
|
||||||
CHECK(siglen > 0);
|
CHECK(siglen > 0);
|
||||||
CHECK((siglen == siglen2) && (memcmp(sig, sig2, siglen) == 0));
|
CHECK((siglen == siglen2) && (memcmp(sig, sig2, siglen) == 0));
|
||||||
CHECK(secp256k1_ecdsa_sign_compact(msg, sig, key, nonce_function_test_retry, NULL, &recid) == 1);
|
CHECK(secp256k1_ecdsa_sign_compact(msg, sig, key, nonce_function_test_retry, extra, &recid) == 1);
|
||||||
CHECK(!is_empty_compact_signature(sig));
|
CHECK(!is_empty_compact_signature(sig));
|
||||||
CHECK(secp256k1_ecdsa_sign_compact(msg, sig2, key, nonce_function_rfc6979, NULL, &recid2) == 1);
|
CHECK(secp256k1_ecdsa_sign_compact(msg, sig2, key, nonce_function_rfc6979, extra, &recid2) == 1);
|
||||||
CHECK(!is_empty_compact_signature(sig2));
|
CHECK(!is_empty_compact_signature(sig2));
|
||||||
CHECK((recid == recid2) && (memcmp(sig, sig2, 64) == 0));
|
CHECK((recid == recid2) && (memcmp(sig, sig2, 64) == 0));
|
||||||
/* The default nonce function is determinstic. */
|
/* The default nonce function is determinstic. */
|
||||||
siglen = 72;
|
siglen = 72;
|
||||||
siglen2 = 72;
|
siglen2 = 72;
|
||||||
CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, NULL, NULL) == 1);
|
CHECK(secp256k1_ecdsa_sign(msg, sig, &siglen, key, NULL, extra) == 1);
|
||||||
CHECK(siglen > 0);
|
CHECK(siglen > 0);
|
||||||
CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, NULL, NULL) == 1);
|
CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, NULL, extra) == 1);
|
||||||
CHECK(siglen2 > 0);
|
CHECK(siglen2 > 0);
|
||||||
CHECK((siglen == siglen2) && (memcmp(sig, sig2, siglen) == 0));
|
CHECK((siglen == siglen2) && (memcmp(sig, sig2, siglen) == 0));
|
||||||
CHECK(secp256k1_ecdsa_sign_compact(msg, sig, key, NULL, NULL, &recid) == 1);
|
CHECK(secp256k1_ecdsa_sign_compact(msg, sig, key, NULL, extra, &recid) == 1);
|
||||||
CHECK(!is_empty_compact_signature(sig));
|
CHECK(!is_empty_compact_signature(sig));
|
||||||
CHECK(secp256k1_ecdsa_sign_compact(msg, sig2, key, NULL, NULL, &recid2) == 1);
|
CHECK(secp256k1_ecdsa_sign_compact(msg, sig2, key, NULL, extra, &recid2) == 1);
|
||||||
CHECK(!is_empty_compact_signature(sig));
|
CHECK(!is_empty_compact_signature(sig));
|
||||||
CHECK((recid == recid2) && (memcmp(sig, sig2, 64) == 0));
|
CHECK((recid == recid2) && (memcmp(sig, sig2, 64) == 0));
|
||||||
/* The default nonce function changes output with different messages. */
|
/* The default nonce function changes output with different messages. */
|
||||||
|
@ -1649,7 +1686,7 @@ void test_ecdsa_edge_cases(void) {
|
||||||
int j;
|
int j;
|
||||||
siglen2 = 72;
|
siglen2 = 72;
|
||||||
msg[0] = i;
|
msg[0] = i;
|
||||||
CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, NULL, NULL) == 1);
|
CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, NULL, extra) == 1);
|
||||||
CHECK(!is_empty_compact_signature(sig));
|
CHECK(!is_empty_compact_signature(sig));
|
||||||
CHECK(secp256k1_ecdsa_sig_parse(&s[i], sig2, siglen2));
|
CHECK(secp256k1_ecdsa_sig_parse(&s[i], sig2, siglen2));
|
||||||
for (j = 0; j < i; j++) {
|
for (j = 0; j < i; j++) {
|
||||||
|
@ -1663,7 +1700,7 @@ void test_ecdsa_edge_cases(void) {
|
||||||
int j;
|
int j;
|
||||||
siglen2 = 72;
|
siglen2 = 72;
|
||||||
key[0] = i - 256;
|
key[0] = i - 256;
|
||||||
CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, NULL, NULL) == 1);
|
CHECK(secp256k1_ecdsa_sign(msg, sig2, &siglen2, key, NULL, extra) == 1);
|
||||||
CHECK(secp256k1_ecdsa_sig_parse(&s[i], sig2, siglen2));
|
CHECK(secp256k1_ecdsa_sig_parse(&s[i], sig2, siglen2));
|
||||||
for (j = 0; j < i; j++) {
|
for (j = 0; j < i; j++) {
|
||||||
CHECK(!secp256k1_scalar_eq(&s[i].r, &s[j].r));
|
CHECK(!secp256k1_scalar_eq(&s[i].r, &s[j].r));
|
||||||
|
|
Loading…
Reference in a new issue