From 48e0b8231e112953680cacd9fa2bb6157184a657 Mon Sep 17 00:00:00 2001 From: weidai Date: Fri, 4 May 2007 15:37:46 +0000 Subject: reduce risk of reusing random numbers after VM state rollback git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@340 57ff6487-cd31-0410-9ec3-f628ee90f5f0 --- randpool.h | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) (limited to 'randpool.h') diff --git a/randpool.h b/randpool.h index e4157f3..c25bc9b 100644 --- a/randpool.h +++ b/randpool.h @@ -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 +/*! 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 m_key; + FixedSizeSecBlock m_seed; + member_ptr m_pCipher; + bool m_keySet; }; NAMESPACE_END -- cgit v1.2.1