Skip to content

Commit 39198a0

Browse files
committed
Merge dashpay#732: Retry if r is zero during signing
37ed51a Make ecdsa_sig_sign constant-time again after reverting 25e3cfb (Tim Ruffing) 93d343b Revert "ecdsa_impl: replace scalar if-checks with VERIFY_CHECKs in ecdsa_sig_sign" (Tim Ruffing) Pull request description: ACKs for top commit: elichai: ACK 37ed51a makes sense. jonasnick: ACK 37ed51a Tree-SHA512: 82b5b8e29f48e84fd7a0681b62923d3bd87d724b38ef18e8c7969b0dcc5a405ebb26c14b5c5f4c7ba0ccabd152d1531d217809d1daf40872fe0c1e079b55c64b
2 parents 59a8de8 + 37ed51a commit 39198a0

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

src/ecdsa_impl.h

+4-5
Original file line numberDiff line numberDiff line change
@@ -288,10 +288,6 @@ static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context *ctx, sec
288288
secp256k1_fe_normalize(&r.y);
289289
secp256k1_fe_get_b32(b, &r.x);
290290
secp256k1_scalar_set_b32(sigr, b, &overflow);
291-
/* These two conditions should be checked before calling */
292-
VERIFY_CHECK(!secp256k1_scalar_is_zero(sigr));
293-
VERIFY_CHECK(overflow == 0);
294-
295291
if (recid) {
296292
/* The overflow condition is cryptographically unreachable as hitting it requires finding the discrete log
297293
* of some P where P.x >= order, and only 1 in about 2^127 points meet this criteria.
@@ -310,7 +306,10 @@ static int secp256k1_ecdsa_sig_sign(const secp256k1_ecmult_gen_context *ctx, sec
310306
if (recid) {
311307
*recid ^= high;
312308
}
313-
return !secp256k1_scalar_is_zero(sigs);
309+
/* P.x = order is on the curve, so technically sig->r could end up being zero, which would be an invalid signature.
310+
* This is cryptographically unreachable as hitting it requires finding the discrete log of P.x = N.
311+
*/
312+
return !secp256k1_scalar_is_zero(sigr) & !secp256k1_scalar_is_zero(sigs);
314313
}
315314

316315
#endif /* SECP256K1_ECDSA_IMPL_H */

0 commit comments

Comments
 (0)