summaryrefslogtreecommitdiff
path: root/randpool.h
diff options
context:
space:
mode:
authorweidai <weidai11@users.noreply.github.com>2007-05-04 15:37:46 +0000
committerweidai <weidai11@users.noreply.github.com>2007-05-04 15:37:46 +0000
commitf41245df6fb9b85574260eca9cd32777e8ab5136 (patch)
tree5c790bf6c465f48e0dca552dfff508cda8f7235f /randpool.h
parentb1be555667f2ed9aea1a64014d81d714bc0d402a (diff)
downloadcryptopp-git-f41245df6fb9b85574260eca9cd32777e8ab5136.tar.gz
reduce risk of reusing random numbers after VM state rollback
Diffstat (limited to 'randpool.h')
-rw-r--r--randpool.h39
1 files changed, 13 insertions, 26 deletions
diff --git a/randpool.h b/randpool.h
index e4157f3a..c25bc9bb 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<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 &parameters) {}
-
-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