Merge bitcoin-core/secp256k1#1849: musig: always clear out secret key in secp256k1_musig_nonce_gen_counter
8479eafa57musig: always clear out secret key in `secp256k1_musig_nonce_gen_counter` (Sebastian Falbesoner) Pull request description: Even though `secp256k1_musig_nonce_gen_internal` can currently only fail if the surrounding API function is misused (invalid `keypair` or `keyagg_cache` parameters, making the corresponding [seckey validation](c1a9e4fe64/src/modules/musig/session_impl.h (L391)) or [pubkey](c1a9e4fe64/src/modules/musig/session_impl.h (L397)) load calls fail), clearing out the stack memory holding the secret key as well in this case seems reasonable to follow best practices. The issue was reported off-band by l0rinc (thanks!), in the course of analyzing the secp repository with AI tooling. ACKs for top commit: furszy: ACK8479eafa57real-or-random: utACK8479eafa57Tree-SHA512: dc15ed7518c6cd0b1b86d2e0382c546374e94a1c1fa15639ba3db27e083ce53a24ddf4d3cd3328b4dc229258d8cbb0e01f4b63f025d04254845f2bf20cfa5289
This commit is contained in:
@@ -483,11 +483,9 @@ int secp256k1_musig_nonce_gen_counter(const secp256k1_context* ctx, secp256k1_mu
|
|||||||
(void) ret;
|
(void) ret;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!secp256k1_musig_nonce_gen_internal(ctx, secnonce, pubnonce, buf, seckey, &pubkey, msg32, keyagg_cache, extra_input32)) {
|
ret = secp256k1_musig_nonce_gen_internal(ctx, secnonce, pubnonce, buf, seckey, &pubkey, msg32, keyagg_cache, extra_input32);
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
secp256k1_memclear_explicit(seckey, sizeof(seckey));
|
secp256k1_memclear_explicit(seckey, sizeof(seckey));
|
||||||
return 1;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int secp256k1_musig_sum_pubnonces(const secp256k1_context* ctx, secp256k1_gej *summed_pubnonces, const secp256k1_musig_pubnonce * const* pubnonces, size_t n_pubnonces) {
|
static int secp256k1_musig_sum_pubnonces(const secp256k1_context* ctx, secp256k1_gej *summed_pubnonces, const secp256k1_musig_pubnonce * const* pubnonces, size_t n_pubnonces) {
|
||||||
|
|||||||
Reference in New Issue
Block a user