LCOV - code coverage report
Current view: top level - src/script - sigcache.h (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 5 5 100.0 %
Date: 2020-09-26 01:30:44 Functions: 12 13 92.3 %

          Line data    Source code
       1             : // Copyright (c) 2009-2010 Satoshi Nakamoto
       2             : // Copyright (c) 2009-2018 The Bitcoin Core developers
       3             : // Distributed under the MIT software license, see the accompanying
       4             : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
       5             : 
       6             : #ifndef BITCOIN_SCRIPT_SIGCACHE_H
       7             : #define BITCOIN_SCRIPT_SIGCACHE_H
       8             : 
       9             : #include <script/interpreter.h>
      10             : 
      11             : #include <vector>
      12             : 
      13             : // DoS prevention: limit cache size to 32MB (over 1000000 entries on 64-bit
      14             : // systems). Due to how we count cache size, actual memory usage is slightly
      15             : // more (~32.25 MB)
      16             : static const unsigned int DEFAULT_MAX_SIG_CACHE_SIZE = 32;
      17             : // Maximum sig cache size allowed
      18             : static const int64_t MAX_MAX_SIG_CACHE_SIZE = 16384;
      19             : 
      20             : class CPubKey;
      21             : 
      22             : /**
      23             :  * We're hashing a nonce into the entries themselves, so we don't need extra
      24             :  * blinding in the set hash computation.
      25             :  *
      26             :  * This may exhibit platform endian dependent behavior but because these are
      27             :  * nonced hashes (random) and this state is only ever used locally it is safe.
      28             :  * All that matters is local consistency.
      29             :  */
      30             : class SignatureCacheHasher
      31             : {
      32             : public:
      33             :     template <uint8_t hash_select>
      34    33971436 :     uint32_t operator()(const uint256& key) const
      35             :     {
      36             :         static_assert(hash_select <8, "SignatureCacheHasher only has 8 hashes available.");
      37             :         uint32_t u;
      38    33971436 :         std::memcpy(&u, key.begin()+4*hash_select, 4);
      39    33971436 :         return u;
      40             :     }
      41             : };
      42             : 
      43      676041 : class CachingTransactionSignatureChecker : public TransactionSignatureChecker
      44             : {
      45             : private:
      46             :     bool store;
      47             : 
      48             : public:
      49      676456 :     CachingTransactionSignatureChecker(const CTransaction* txToIn, unsigned int nInIn, const CAmount& amountIn, bool storeIn, PrecomputedTransactionData& txdataIn) : TransactionSignatureChecker(txToIn, nInIn, amountIn, txdataIn), store(storeIn) {}
      50             : 
      51             :     bool VerifySignature(const std::vector<unsigned char>& vchSig, const CPubKey& vchPubKey, const uint256& sighash) const override;
      52             : };
      53             : 
      54             : void InitSignatureCache();
      55             : 
      56             : #endif // BITCOIN_SCRIPT_SIGCACHE_H

Generated by: LCOV version 1.15