PRCYCoin  2.0.0.7rc1
P2P Digital Currency
sigcache.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2014 The Bitcoin 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 
31 {
32 public:
33  template <uint8_t hash_select>
34  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  std::memcpy(&u, key.begin()+4*hash_select, 4);
39  return u;
40  }
41 };
42 
44 {
45 private:
46  bool store;
47 
48 public:
49  CachingTransactionSignatureChecker(const CTransaction* txToIn, unsigned int nInIn, bool storeIn=true) : TransactionSignatureChecker(txToIn, nInIn), store(storeIn) {}
50 
51  bool VerifySignature(const std::vector<unsigned char>& vchSig, const CPubKey& vchPubKey, const uint256& sighash) const;
52 };
53 
54 void InitSignatureCache();
55 
56 #endif // BITCOIN_SCRIPT_SIGCACHE_H
SignatureCacheHasher
We're hashing a nonce into the entries themselves, so we don't need extra blinding in the set hash co...
Definition: sigcache.h:30
CachingTransactionSignatureChecker::CachingTransactionSignatureChecker
CachingTransactionSignatureChecker(const CTransaction *txToIn, unsigned int nInIn, bool storeIn=true)
Definition: sigcache.h:49
InitSignatureCache
void InitSignatureCache()
Definition: sigcache.cpp:74
interpreter.h
memcpy
void * memcpy(void *a, const void *b, size_t c)
Definition: glibc_compat.cpp:15
CTransaction
The basic transaction that is broadcasted on the network and contained in blocks.
Definition: transaction.h:269
CKey::begin
const unsigned char * begin() const
Definition: key.h:100
TransactionSignatureChecker
Definition: interpreter.h:104
CachingTransactionSignatureChecker::store
bool store
Definition: sigcache.h:46
CachingTransactionSignatureChecker
Definition: sigcache.h:43
uint256
256-bit unsigned big integer.
Definition: uint256.h:38
CachingTransactionSignatureChecker::VerifySignature
bool VerifySignature(const std::vector< unsigned char > &vchSig, const CPubKey &vchPubKey, const uint256 &sighash) const
Definition: sigcache.cpp:84
CPubKey
An encapsulated public key.
Definition: pubkey.h:37
key
CKey key
Definition: bip38tooldialog.cpp:173
SignatureCacheHasher::operator()
uint32_t operator()(const uint256 &key) const
Definition: sigcache.h:34