diff options
| author | luigi1111 <luigi1111w@gmail.com> | 2022-09-26 14:55:28 -0500 |
|---|---|---|
| committer | luigi1111 <luigi1111w@gmail.com> | 2022-09-26 14:55:28 -0500 |
| commit | a7b0c93c7db8054e833914f5de9f36a27d2f23b3 (patch) | |
| tree | a63f9c9d4358f6ba41bcb9ef9ede1f2c01607afe /src/wallet/wallet2.cpp | |
| parent | 9885b8b0f2cb236b373f4eb0f8441036667255da (diff) | |
| parent | 1cd21bfba584fa7d886f13684f34c71931eddf4d (diff) | |
| download | monzero-core-a7b0c93c7db8054e833914f5de9f36a27d2f23b3.tar.gz monzero-core-a7b0c93c7db8054e833914f5de9f36a27d2f23b3.tar.xz monzero-core-a7b0c93c7db8054e833914f5de9f36a27d2f23b3.zip | |
Merge pull request #8582
1cd21bf add an option to force-update multisig key exchange under some circumstances (koe)
Diffstat (limited to 'src/wallet/wallet2.cpp')
| -rw-r--r-- | src/wallet/wallet2.cpp | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index 931d6d900..e8b349ca6 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -5126,12 +5126,11 @@ std::string wallet2::make_multisig(const epee::wipeable_string &password, } //---------------------------------------------------------------------------------------------------- std::string wallet2::exchange_multisig_keys(const epee::wipeable_string &password, - const std::vector<std::string> &kex_messages) + const std::vector<std::string> &kex_messages, + const bool force_update_use_with_caution /*= false*/) { bool ready{false}; CHECK_AND_ASSERT_THROW_MES(multisig(&ready), "The wallet is not multisig"); - CHECK_AND_ASSERT_THROW_MES(!ready, "Multisig wallet creation process has already been finished"); - CHECK_AND_ASSERT_THROW_MES(kex_messages.size() > 0, "No key exchange messages passed in."); // decrypt account keys epee::misc_utils::auto_scope_leave_caller keys_reencryptor; @@ -5150,13 +5149,6 @@ std::string wallet2::exchange_multisig_keys(const epee::wipeable_string &passwor ); } - // open kex messages - std::vector<multisig::multisig_kex_msg> expanded_msgs; - expanded_msgs.reserve(kex_messages.size()); - - for (const auto &msg : kex_messages) - expanded_msgs.emplace_back(msg); - // reconstruct multisig account multisig::multisig_keyset_map_memsafe_t kex_origins_map; @@ -5177,8 +5169,25 @@ std::string wallet2::exchange_multisig_keys(const epee::wipeable_string &passwor "" }; + // KLUDGE: early return if there are no kex messages and main kex is complete (will return the post-kex verification round + // message) (it's a kludge because this behavior would be more appropriate for a standalone wallet method) + if (kex_messages.size() == 0) + { + CHECK_AND_ASSERT_THROW_MES(multisig_account.main_kex_rounds_done(), + "Exchange multisig keys: there are no kex messages but the main kex rounds are not done."); + + return multisig_account.get_next_kex_round_msg(); + } + + // open kex messages + std::vector<multisig::multisig_kex_msg> expanded_msgs; + expanded_msgs.reserve(kex_messages.size()); + + for (const auto &msg : kex_messages) + expanded_msgs.emplace_back(msg); + // update multisig kex - multisig_account.kex_update(expanded_msgs); + multisig_account.kex_update(expanded_msgs, force_update_use_with_caution); // update wallet state |
