mirror of
https://github.com/monero-project/monero.git
synced 2025-08-14 12:15:33 -04:00
make multisig work with subaddresses
Thanks to kenshi84 for help getting this work
This commit is contained in:
parent
dffa0dceaf
commit
fa5697127f
8 changed files with 89 additions and 82 deletions
|
@ -269,24 +269,15 @@ namespace cryptonote
|
|||
in_contexts.push_back(input_generation_context_data());
|
||||
keypair& in_ephemeral = in_contexts.back().in_ephemeral;
|
||||
crypto::key_image img;
|
||||
bool r;
|
||||
if (msout)
|
||||
{
|
||||
r = generate_key_image_helper_old(sender_account_keys, src_entr.real_out_tx_key, src_entr.real_output_in_tx_index, in_ephemeral, img);
|
||||
}
|
||||
else
|
||||
{
|
||||
const auto& out_key = reinterpret_cast<const crypto::public_key&>(src_entr.outputs[src_entr.real_output].second.dest);
|
||||
r = generate_key_image_helper(sender_account_keys, subaddresses, out_key, src_entr.real_out_tx_key, src_entr.real_out_additional_tx_keys, src_entr.real_output_in_tx_index, in_ephemeral, img);
|
||||
}
|
||||
if (!r)
|
||||
const auto& out_key = reinterpret_cast<const crypto::public_key&>(src_entr.outputs[src_entr.real_output].second.dest);
|
||||
if(!generate_key_image_helper(sender_account_keys, subaddresses, out_key, src_entr.real_out_tx_key, src_entr.real_out_additional_tx_keys, src_entr.real_output_in_tx_index, in_ephemeral, img))
|
||||
{
|
||||
LOG_ERROR("Key image generation failed!");
|
||||
return false;
|
||||
}
|
||||
|
||||
//check that derivated key is equal with real output key
|
||||
if( !(in_ephemeral.pub == src_entr.outputs[src_entr.real_output].second.dest) )
|
||||
//check that derivated key is equal with real output key (if non multisig)
|
||||
if(!msout && !(in_ephemeral.pub == src_entr.outputs[src_entr.real_output].second.dest) )
|
||||
{
|
||||
LOG_ERROR("derived public key mismatch with output public key at index " << idx << ", real out " << src_entr.real_output << "! "<< ENDL << "derived_key:"
|
||||
<< string_tools::pod_to_hex(in_ephemeral.pub) << ENDL << "real output_public_key:"
|
||||
|
|
|
@ -64,6 +64,7 @@ namespace cryptonote
|
|||
FIELD(amount)
|
||||
FIELD(rct)
|
||||
FIELD(mask)
|
||||
FIELD(multisig_kLRki)
|
||||
|
||||
if (real_output >= outputs.size())
|
||||
return false;
|
||||
|
@ -100,7 +101,7 @@ namespace cryptonote
|
|||
|
||||
}
|
||||
|
||||
BOOST_CLASS_VERSION(cryptonote::tx_source_entry, 0)
|
||||
BOOST_CLASS_VERSION(cryptonote::tx_source_entry, 1)
|
||||
BOOST_CLASS_VERSION(cryptonote::tx_destination_entry, 1)
|
||||
|
||||
namespace boost
|
||||
|
@ -117,7 +118,10 @@ namespace boost
|
|||
a & x.amount;
|
||||
a & x.rct;
|
||||
a & x.mask;
|
||||
if (ver < 1)
|
||||
return;
|
||||
a & x.multisig_kLRki;
|
||||
a & x.real_out_additional_tx_keys;
|
||||
}
|
||||
|
||||
template <class Archive>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue