From d5a17bb8c578764ca5a00eea62733fa36c91d74c Mon Sep 17 00:00:00 2001 From: Thomas Winget Date: Tue, 15 Jan 2019 21:09:45 -0500 Subject: [PATCH] fix rct mask for coinbase outputs --- src/monero_transfer_utils.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/monero_transfer_utils.cpp b/src/monero_transfer_utils.cpp index e0a8aaa..8e81bb4 100644 --- a/src/monero_transfer_utils.cpp +++ b/src/monero_transfer_utils.cpp @@ -152,6 +152,17 @@ bool _rct_hex_to_decrypted_mask( std::string encrypted_mask_str = rct_string.substr(64,64); THROW_WALLET_EXCEPTION_IF(!string_tools::validate_hex(64, encrypted_mask_str), error::wallet_internal_error, "Invalid rct mask: " + encrypted_mask_str); string_tools::hex_to_pod(encrypted_mask_str, encrypted_mask); + + // Openmonero sends the Identity mask for coinbase outputs (as it should), but unencrypted + // So don't do the decrypt step here if the mask sent is the Identity mask + rct::key I; + rct::identity(I); + if (encrypted_mask == I) + { + memcpy(decrypted_mask.bytes, encrypted_mask.bytes, sizeof(decrypted_mask)); + return true; + } + // // Decrypt the mask crypto::key_derivation derivation;