diff options
author | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2007-05-04 15:38:32 +0000 |
---|---|---|
committer | weidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0> | 2007-05-04 15:38:32 +0000 |
commit | e893a752d7bf74c9692cad5f058a190a6a047210 (patch) | |
tree | ad77c798110d040680e92eb3bf46523222bca155 /filters.cpp | |
parent | 0cee348b78bdb6ef7da48ae6682c17dd75dc2fd4 (diff) | |
download | cryptopp-e893a752d7bf74c9692cad5f058a190a6a047210.tar.gz |
add IncorporateEntropy and GenerateIntoBufferedTransformation to RNG interface
git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@342 57ff6487-cd31-0410-9ec3-f628ee90f5f0
Diffstat (limited to 'filters.cpp')
-rw-r--r-- | filters.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/filters.cpp b/filters.cpp index 1771e8c..47a91a3 100644 --- a/filters.cpp +++ b/filters.cpp @@ -496,6 +496,17 @@ void ProxyFilter::NextPutModifiable(byte *s, size_t len) // ************************************************************* +void RandomNumberSink::IsolatedInitialize(const NameValuePairs ¶meters) +{ + parameters.GetRequiredParameter("RandomNumberSink", "RandomNumberGeneratorPointer", m_rng); +} + +size_t RandomNumberSink::Put2(const byte *begin, size_t length, int messageEnd, bool blocking) +{ + m_rng->IncorporateEntropy(begin, length); + return 0; +} + size_t ArraySink::Put2(const byte *begin, size_t length, int messageEnd, bool blocking) { memcpy(m_buf+m_total, begin, STDMIN(length, SaturatingSubtract(m_size, m_total))); @@ -952,9 +963,10 @@ size_t RandomNumberStore::TransferTo2(BufferedTransformation &target, lword &tra if (!blocking) throw NotImplemented("RandomNumberStore: nonblocking transfer is not implemented by this object"); - lword transferMax = transferBytes; - for (transferBytes = 0; transferBytes<transferMax && m_count < (unsigned int)m_length; ++transferBytes, ++m_count) - target.ChannelPut(channel, m_rng->GenerateByte()); + transferBytes = UnsignedMin(transferBytes, m_length - m_count); + m_rng->GenerateIntoBufferedTransformation(target, channel, transferBytes); + m_count += transferBytes; + return 0; } |