From 7951912289c700d9ddcfda0076898becc4e2cc41 Mon Sep 17 00:00:00 2001 From: koe Date: Tue, 15 Sep 2026 16:13:52 -0500 Subject: [PATCH] multisig: erase all copies of a nonce at the same time (cherry picked from commit fe744ac3171fe26b7284d3ac3a275e624e852ec5) --- src/wallet/wallet2.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 1f78cabfc..5343ae48b 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -15373,8 +15373,9 @@ void wallet2::get_multisig_k(size_t idx, const std::unordered_set &use { CHECK_AND_ASSERT_THROW_MES(m_multisig, "Wallet is not multisig"); CHECK_AND_ASSERT_THROW_MES(idx < m_transfers.size(), "idx out of range"); - for (auto &k: m_transfers[idx].m_multisig_k) + for (size_t i = 0; i < m_transfers[idx].m_multisig_k.size(); ++i) { + auto &k = m_transfers[idx].m_multisig_k[i]; if (k == rct::zero()) continue; @@ -15385,6 +15386,12 @@ void wallet2::get_multisig_k(size_t idx, const std::unordered_set &use { nonce = k; memwipe(static_cast(&k), sizeof(rct::key)); //CRITICAL: a nonce may only be used once! + + if (idx < m_multisig_rescan_k.size() && i < m_multisig_rescan_k[idx].size()) + { + memwipe(static_cast(&m_multisig_rescan_k[idx][i]), sizeof(rct::key)); + } + return; } }