diff options
author | weidai <weidai11@users.noreply.github.com> | 2007-05-04 15:37:46 +0000 |
---|---|---|
committer | weidai <weidai11@users.noreply.github.com> | 2007-05-04 15:37:46 +0000 |
commit | f41245df6fb9b85574260eca9cd32777e8ab5136 (patch) | |
tree | 5c790bf6c465f48e0dca552dfff508cda8f7235f /randpool.h | |
parent | b1be555667f2ed9aea1a64014d81d714bc0d402a (diff) | |
download | cryptopp-git-f41245df6fb9b85574260eca9cd32777e8ab5136.tar.gz |
reduce risk of reusing random numbers after VM state rollback
Diffstat (limited to 'randpool.h')
-rw-r--r-- | randpool.h | 39 |
1 files changed, 13 insertions, 26 deletions
@@ -7,38 +7,25 @@ NAMESPACE_BEGIN(CryptoPP) //! Randomness Pool -/*! This class can be used to generate - pseudorandom bytes after seeding the pool with - the Put() methods */ -class CRYPTOPP_DLL RandomPool : public RandomNumberGenerator, - public Bufferless<BufferedTransformation> +/*! This class can be used to generate cryptographic quality + pseudorandom bytes after seeding the pool with IncorporateEntropy() */ +class CRYPTOPP_DLL RandomPool : public RandomNumberGenerator, public NotCopyable { public: - //! poolSize must be greater than 16 - RandomPool(unsigned int poolSize=384); + RandomPool(); - size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking); + bool CanIncorporateEntropy() const {return true;} + void IncorporateEntropy(const byte *input, size_t length); + void GenerateIntoBufferedTransformation(BufferedTransformation &target, const std::string &channel, lword size); - bool AnyRetrievable() const {return true;} - lword MaxRetrievable() const {return ULONG_MAX;} - - size_t TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel=NULL_CHANNEL, bool blocking=true); - size_t CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end=LWORD_MAX, const std::string &channel=NULL_CHANNEL, bool blocking=true) const - { - throw NotImplemented("RandomPool: CopyRangeTo2() is not supported by this store"); - } - - byte GenerateByte(); - void GenerateBlock(byte *output, size_t size); - - void IsolatedInitialize(const NameValuePairs ¶meters) {} - -protected: - void Stir(); + // for backwards compatibility. use RandomNumberSource, RandomNumberStore, and RandomNumberSink for other BufferTransformation functionality + void Put(const byte *input, size_t length) {IncorporateEntropy(input, length);} private: - SecByteBlock pool, key; - size_t addPos, getPos; + FixedSizeSecBlock<byte, 32> m_key; + FixedSizeSecBlock<byte, 16> m_seed; + member_ptr<BlockCipher> m_pCipher; + bool m_keySet; }; NAMESPACE_END |