summaryrefslogtreecommitdiff
path: root/filters.cpp
diff options
context:
space:
mode:
authorweidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0>2007-05-04 15:38:32 +0000
committerweidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0>2007-05-04 15:38:32 +0000
commite893a752d7bf74c9692cad5f058a190a6a047210 (patch)
treead77c798110d040680e92eb3bf46523222bca155 /filters.cpp
parent0cee348b78bdb6ef7da48ae6682c17dd75dc2fd4 (diff)
downloadcryptopp-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.cpp18
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 &parameters)
+{
+ 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;
}