diff --git a/src/script/signingprovider.cpp b/src/script/signingprovider.cpp index 792796b0f14..846f0c98da2 100644 --- a/src/script/signingprovider.cpp +++ b/src/script/signingprovider.cpp @@ -58,6 +58,21 @@ std::vector HidingSigningProvider::GetMuSig2ParticipantPubkeys(const CP return m_provider->GetMuSig2ParticipantPubkeys(pubkey); } +void HidingSigningProvider::SetMuSig2SecNonce(const uint256& id, MuSig2SecNonce&& nonce) const +{ + m_provider->SetMuSig2SecNonce(id, std::move(nonce)); +} + +std::optional> HidingSigningProvider::GetMuSig2SecNonce(const uint256& session_id) const +{ + return m_provider->GetMuSig2SecNonce(session_id); +} + +void HidingSigningProvider::DeleteMuSig2Session(const uint256& session_id) const +{ + m_provider->DeleteMuSig2Session(session_id); +} + bool FlatSigningProvider::GetCScript(const CScriptID& scriptid, CScript& script) const { return LookupHelper(scripts, scriptid, script); } bool FlatSigningProvider::GetPubKey(const CKeyID& keyid, CPubKey& pubkey) const { return LookupHelper(pubkeys, keyid, pubkey); } bool FlatSigningProvider::GetKeyOrigin(const CKeyID& keyid, KeyOriginInfo& info) const @@ -94,6 +109,26 @@ std::vector FlatSigningProvider::GetMuSig2ParticipantPubkeys(const CPub return participant_pubkeys; } +void FlatSigningProvider::SetMuSig2SecNonce(const uint256& session_id, MuSig2SecNonce&& nonce) const +{ + if (!Assume(musig2_secnonces)) return; + musig2_secnonces->emplace(session_id, std::move(nonce)); +} + +std::optional> FlatSigningProvider::GetMuSig2SecNonce(const uint256& session_id) const +{ + if (!Assume(musig2_secnonces)) return std::nullopt; + const auto& it = musig2_secnonces->find(session_id); + if (it == musig2_secnonces->end()) return std::nullopt; + return it->second; +} + +void FlatSigningProvider::DeleteMuSig2Session(const uint256& session_id) const +{ + if (!Assume(musig2_secnonces)) return; + musig2_secnonces->erase(session_id); +} + FlatSigningProvider& FlatSigningProvider::Merge(FlatSigningProvider&& b) { scripts.merge(b.scripts); @@ -102,6 +137,8 @@ FlatSigningProvider& FlatSigningProvider::Merge(FlatSigningProvider&& b) origins.merge(b.origins); tr_trees.merge(b.tr_trees); aggregate_pubkeys.merge(b.aggregate_pubkeys); + // We shouldn't be merging 2 different sessions, just overwrite with b's sessions. + if (!musig2_secnonces) musig2_secnonces = b.musig2_secnonces; return *this; } diff --git a/src/script/signingprovider.h b/src/script/signingprovider.h index 1da58bf6f92..cc917cc6c63 100644 --- a/src/script/signingprovider.h +++ b/src/script/signingprovider.h @@ -9,11 +9,15 @@ #include #include #include +#include #include #include