diff options
| author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2017-02-20 17:41:39 +0000 |
|---|---|---|
| committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2017-02-20 22:58:25 +0000 |
| commit | d282cfcc46d39dc49e97f9ec5cedf7425e74d71f (patch) | |
| tree | c7f9289ab69940d1a8f7d19bb13fbf062f5d336f /src/cryptonote_core/cryptonote_core.cpp | |
| parent | efb72e74e260bfbde14e5562abe4f46bf418e080 (diff) | |
| download | monzero-core-d282cfcc46d39dc49e97f9ec5cedf7425e74d71f.tar.gz monzero-core-d282cfcc46d39dc49e97f9ec5cedf7425e74d71f.tar.xz monzero-core-d282cfcc46d39dc49e97f9ec5cedf7425e74d71f.zip | |
core: test key images against validity domain
Diffstat (limited to 'src/cryptonote_core/cryptonote_core.cpp')
| -rw-r--r-- | src/cryptonote_core/cryptonote_core.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/cryptonote_core/cryptonote_core.cpp b/src/cryptonote_core/cryptonote_core.cpp index 8c3db4c06..7ed01ca1d 100644 --- a/src/cryptonote_core/cryptonote_core.cpp +++ b/src/cryptonote_core/cryptonote_core.cpp @@ -616,6 +616,12 @@ namespace cryptonote return false; } + if (!check_tx_inputs_keyimages_domain(tx)) + { + MERROR_VER("tx uses key image not in the valid domain"); + return false; + } + if (tx.version >= 2) { const rct::rctSig &rv = tx.rct_signatures; @@ -699,6 +705,18 @@ namespace cryptonote return true; } //----------------------------------------------------------------------------------------------- + bool core::check_tx_inputs_keyimages_domain(const transaction& tx) const + { + std::unordered_set<crypto::key_image> ki; + for(const auto& in: tx.vin) + { + CHECKED_GET_SPECIFIC_VARIANT(in, const txin_to_key, tokey_in, false); + if (!(rct::scalarmultKey(rct::ki2rct(tokey_in.k_image), rct::curveOrder()) == rct::identity())) + return false; + } + return true; + } + //----------------------------------------------------------------------------------------------- bool core::add_new_tx(const transaction& tx, tx_verification_context& tvc, bool keeped_by_block, bool relayed, bool do_not_relay) { crypto::hash tx_hash = get_transaction_hash(tx); |
