Skip to content

Commit ba8fc0e

Browse files
committed
Check signature nonces for validity
The documentation implies that this check is happening, so make it so. Without this check, passing an invalid nonce will trigger an internal assertion.
1 parent 920c243 commit ba8fc0e

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

src/secp256k1.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,13 @@ int secp256k1_ecdsa_sign(const unsigned char *message, int messagelen, unsigned
5656
secp256k1_num_set_bin(&sec, seckey, 32);
5757
secp256k1_num_set_bin(&non, nonce, 32);
5858
secp256k1_num_set_bin(&msg, message, messagelen);
59+
int ret = !secp256k1_num_is_zero(&non) &&
60+
(secp256k1_num_cmp(&non, &secp256k1_ge_consts->order) < 0);
5961
secp256k1_ecdsa_sig_t sig;
6062
secp256k1_ecdsa_sig_init(&sig);
61-
int ret = secp256k1_ecdsa_sig_sign(&sig, &sec, &msg, &non, NULL);
63+
if (ret) {
64+
ret = secp256k1_ecdsa_sig_sign(&sig, &sec, &msg, &non, NULL);
65+
}
6266
if (ret) {
6367
secp256k1_ecdsa_sig_serialize(signature, signaturelen, &sig);
6468
}
@@ -77,9 +81,13 @@ int secp256k1_ecdsa_sign_compact(const unsigned char *message, int messagelen, u
7781
secp256k1_num_set_bin(&sec, seckey, 32);
7882
secp256k1_num_set_bin(&non, nonce, 32);
7983
secp256k1_num_set_bin(&msg, message, messagelen);
84+
int ret = !secp256k1_num_is_zero(&non) &&
85+
(secp256k1_num_cmp(&non, &secp256k1_ge_consts->order) < 0);
8086
secp256k1_ecdsa_sig_t sig;
8187
secp256k1_ecdsa_sig_init(&sig);
82-
int ret = secp256k1_ecdsa_sig_sign(&sig, &sec, &msg, &non, recid);
88+
if (ret) {
89+
ret = secp256k1_ecdsa_sig_sign(&sig, &sec, &msg, &non, recid);
90+
}
8391
if (ret) {
8492
secp256k1_num_get_bin(sig64, 32, &sig.r);
8593
secp256k1_num_get_bin(sig64 + 32, 32, &sig.s);

0 commit comments

Comments
 (0)