mirror of
https://github.com/monero-project/monero.git
synced 2026-07-28 14:47:15 -07:00
Merge pull request #10800
f4047ae cryptonote_basic: copy tx extra payment IDs (Ap4sh)
ACKs: jeffro256, selsta
This commit is contained in:
@@ -796,7 +796,7 @@ namespace cryptonote
|
||||
return false;
|
||||
if(TX_EXTRA_NONCE_PAYMENT_ID != extra_nonce[0])
|
||||
return false;
|
||||
payment_id = *reinterpret_cast<const crypto::hash*>(extra_nonce.data() + 1);
|
||||
memcpy(&payment_id, extra_nonce.data() + 1, sizeof(payment_id));
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------
|
||||
@@ -806,7 +806,7 @@ namespace cryptonote
|
||||
return false;
|
||||
if (TX_EXTRA_NONCE_ENCRYPTED_PAYMENT_ID != extra_nonce[0])
|
||||
return false;
|
||||
payment_id = *reinterpret_cast<const crypto::hash8*>(extra_nonce.data() + 1);
|
||||
memcpy(&payment_id, extra_nonce.data() + 1, sizeof(payment_id));
|
||||
return true;
|
||||
}
|
||||
//---------------------------------------------------------------
|
||||
|
||||
@@ -104,6 +104,62 @@ TEST(cn_format_utils, add_extra_nonce_to_tx_extra)
|
||||
}
|
||||
}
|
||||
|
||||
TEST(cn_format_utils, payment_id_tx_extra_nonce_roundtrip)
|
||||
{
|
||||
const crypto::hash payment_id = crypto::rand<crypto::hash>();
|
||||
std::string extra_nonce;
|
||||
cryptonote::set_payment_id_to_tx_extra_nonce(extra_nonce, payment_id);
|
||||
ASSERT_EQ(sizeof(payment_id) + 1, extra_nonce.size());
|
||||
|
||||
crypto::hash parsed_payment_id = crypto::null_hash;
|
||||
ASSERT_TRUE(cryptonote::get_payment_id_from_tx_extra_nonce(extra_nonce, parsed_payment_id));
|
||||
EXPECT_EQ(payment_id, parsed_payment_id);
|
||||
|
||||
const crypto::hash8 encrypted_payment_id = crypto::rand<crypto::hash8>();
|
||||
std::string encrypted_extra_nonce;
|
||||
cryptonote::set_encrypted_payment_id_to_tx_extra_nonce(encrypted_extra_nonce, encrypted_payment_id);
|
||||
ASSERT_EQ(sizeof(encrypted_payment_id) + 1, encrypted_extra_nonce.size());
|
||||
|
||||
crypto::hash8 parsed_encrypted_payment_id = crypto::null_hash8;
|
||||
ASSERT_TRUE(cryptonote::get_encrypted_payment_id_from_tx_extra_nonce(encrypted_extra_nonce, parsed_encrypted_payment_id));
|
||||
EXPECT_EQ(encrypted_payment_id, parsed_encrypted_payment_id);
|
||||
}
|
||||
|
||||
TEST(cn_format_utils, payment_id_tx_extra_nonce_rejects_wrong_tag_or_size)
|
||||
{
|
||||
const crypto::hash payment_id = crypto::rand<crypto::hash>();
|
||||
std::string extra_nonce;
|
||||
cryptonote::set_payment_id_to_tx_extra_nonce(extra_nonce, payment_id);
|
||||
|
||||
crypto::hash parsed_payment_id = crypto::null_hash;
|
||||
std::string wrong_tag = extra_nonce;
|
||||
wrong_tag[0] = TX_EXTRA_NONCE_ENCRYPTED_PAYMENT_ID;
|
||||
EXPECT_FALSE(cryptonote::get_payment_id_from_tx_extra_nonce(wrong_tag, parsed_payment_id));
|
||||
|
||||
std::string wrong_size = extra_nonce;
|
||||
wrong_size.resize(wrong_size.size() - 1);
|
||||
EXPECT_FALSE(cryptonote::get_payment_id_from_tx_extra_nonce(wrong_size, parsed_payment_id));
|
||||
wrong_size = extra_nonce;
|
||||
wrong_size.push_back('\0');
|
||||
EXPECT_FALSE(cryptonote::get_payment_id_from_tx_extra_nonce(wrong_size, parsed_payment_id));
|
||||
|
||||
const crypto::hash8 encrypted_payment_id = crypto::rand<crypto::hash8>();
|
||||
std::string encrypted_extra_nonce;
|
||||
cryptonote::set_encrypted_payment_id_to_tx_extra_nonce(encrypted_extra_nonce, encrypted_payment_id);
|
||||
|
||||
crypto::hash8 parsed_encrypted_payment_id = crypto::null_hash8;
|
||||
wrong_tag = encrypted_extra_nonce;
|
||||
wrong_tag[0] = TX_EXTRA_NONCE_PAYMENT_ID;
|
||||
EXPECT_FALSE(cryptonote::get_encrypted_payment_id_from_tx_extra_nonce(wrong_tag, parsed_encrypted_payment_id));
|
||||
|
||||
wrong_size = encrypted_extra_nonce;
|
||||
wrong_size.resize(wrong_size.size() - 1);
|
||||
EXPECT_FALSE(cryptonote::get_encrypted_payment_id_from_tx_extra_nonce(wrong_size, parsed_encrypted_payment_id));
|
||||
wrong_size = encrypted_extra_nonce;
|
||||
wrong_size.push_back('\0');
|
||||
EXPECT_FALSE(cryptonote::get_encrypted_payment_id_from_tx_extra_nonce(wrong_size, parsed_encrypted_payment_id));
|
||||
}
|
||||
|
||||
TEST(cn_format_utils, add_mm_merkle_root_to_tx_extra)
|
||||
{
|
||||
const std::vector<std::uint64_t> depths{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 63, 64, 127, 128, 16383, 16384};
|
||||
|
||||
Reference in New Issue
Block a user