|
|
|
@ -201,16 +201,26 @@ namespace cryptonote
|
|
|
|
|
{
|
|
|
|
|
crypto::key_derivation recv_derivation = AUTO_VAL_INIT(recv_derivation);
|
|
|
|
|
bool r = hwdev.generate_key_derivation(tx_public_key, ack.m_view_secret_key, recv_derivation);
|
|
|
|
|
CHECK_AND_ASSERT_MES(r, false, "key image helper: failed to generate_key_derivation(" << tx_public_key << ", " << ack.m_view_secret_key << ")");
|
|
|
|
|
if (!r)
|
|
|
|
|
{
|
|
|
|
|
MWARNING("key image helper: failed to generate_key_derivation(" << tx_public_key << ", " << ack.m_view_secret_key << ")");
|
|
|
|
|
memcpy(&recv_derivation, rct::identity().bytes, sizeof(recv_derivation));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::vector<crypto::key_derivation> additional_recv_derivations;
|
|
|
|
|
for (size_t i = 0; i < additional_tx_public_keys.size(); ++i)
|
|
|
|
|
{
|
|
|
|
|
crypto::key_derivation additional_recv_derivation = AUTO_VAL_INIT(additional_recv_derivation);
|
|
|
|
|
r = hwdev.generate_key_derivation(additional_tx_public_keys[i], ack.m_view_secret_key, additional_recv_derivation);
|
|
|
|
|
CHECK_AND_ASSERT_MES(r, false, "key image helper: failed to generate_key_derivation(" << additional_tx_public_keys[i] << ", " << ack.m_view_secret_key << ")");
|
|
|
|
|
if (!r)
|
|
|
|
|
{
|
|
|
|
|
MWARNING("key image helper: failed to generate_key_derivation(" << additional_tx_public_keys[i] << ", " << ack.m_view_secret_key << ")");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
additional_recv_derivations.push_back(additional_recv_derivation);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
boost::optional<subaddress_receive_info> subaddr_recv_info = is_out_to_acc_precomp(subaddresses, out_key, recv_derivation, additional_recv_derivations, real_output_index,hwdev);
|
|
|
|
|
CHECK_AND_ASSERT_MES(subaddr_recv_info, false, "key image helper: given output pubkey doesn't seem to belong to this address");
|
|
|
|
|