summaryrefslogtreecommitdiff
path: root/datatest.cpp
diff options
context:
space:
mode:
authorweidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0>2010-07-24 05:55:22 +0000
committerweidai <weidai@57ff6487-cd31-0410-9ec3-f628ee90f5f0>2010-07-24 05:55:22 +0000
commit8532f317b3440154b421b1e8b8b004ead28f847e (patch)
tree9fa57aeee5c779a3c9b4f88006050d81ff68e6ef /datatest.cpp
parent5e47408d6c3c40f0aafaa2b32a2ae0889f9fc089 (diff)
downloadcryptopp-8532f317b3440154b421b1e8b8b004ead28f847e.tar.gz
add support for AES-NI and CLMUL instruction sets in AES and GMAC/GCM
git-svn-id: svn://svn.code.sf.net/p/cryptopp/code/trunk/c5@508 57ff6487-cd31-0410-9ec3-f628ee90f5f0
Diffstat (limited to 'datatest.cpp')
-rw-r--r--datatest.cpp41
1 files changed, 19 insertions, 22 deletions
diff --git a/datatest.cpp b/datatest.cpp
index cfac74a..121e0c5 100644
--- a/datatest.cpp
+++ b/datatest.cpp
@@ -57,15 +57,15 @@ const std::string & GetRequiredDatum(const TestData &data, const char *name)
return i->second;
}
-void RandomizedTransfer(BufferedTransformation &source, BufferedTransformation &target, bool finish)
+void RandomizedTransfer(BufferedTransformation &source, BufferedTransformation &target, bool finish, const std::string &channel=DEFAULT_CHANNEL)
{
while (source.MaxRetrievable() > (finish ? 0 : 4096))
{
byte buf[4096+64];
- word32 start = GlobalRNG().GenerateWord32(0, 63);
- word32 len = GlobalRNG().GenerateWord32(1, UnsignedMin(4096U, source.MaxRetrievable()));
- source.Get(buf+start, len);
- target.Put(buf+start, len);
+ size_t start = GlobalRNG().GenerateWord32(0, 63);
+ size_t len = GlobalRNG().GenerateWord32(1, UnsignedMin(4096U, 3*source.MaxRetrievable()/2));
+ len = source.Get(buf+start, len);
+ target.ChannelPut(channel, buf+start, len);
}
}
@@ -397,9 +397,9 @@ void TestSymmetricCipher(TestData &v, const NameValuePairs &overrideParameters)
return;
}
- StringSource ss(plaintext, false, new StreamTransformationFilter(*encryptor, new StringSink(encrypted), StreamTransformationFilter::NO_PADDING));
- ss.Pump(plaintext.size()/2 + 1);
- ss.PumpAll();
+ StreamTransformationFilter encFilter(*encryptor, new StringSink(encrypted), StreamTransformationFilter::NO_PADDING);
+ RandomizedTransfer(StringStore(plaintext).Ref(), encFilter, true);
+ encFilter.MessageEnd();
/*{
std::string z;
encryptor->Seek(seek);
@@ -422,14 +422,14 @@ void TestSymmetricCipher(TestData &v, const NameValuePairs &overrideParameters)
{
std::cout << "incorrectly encrypted: ";
StringSource xx(encrypted, false, new HexEncoder(new FileSink(std::cout)));
- xx.Pump(256); xx.Flush(false);
+ xx.Pump(2048); xx.Flush(false);
std::cout << "\n";
SignalTestFailure();
}
std::string decrypted;
- StringSource dd(encrypted, false, new StreamTransformationFilter(*decryptor, new StringSink(decrypted), StreamTransformationFilter::NO_PADDING));
- dd.Pump(plaintext.size()/2 + 1);
- dd.PumpAll();
+ StreamTransformationFilter decFilter(*decryptor, new StringSink(decrypted), StreamTransformationFilter::NO_PADDING);
+ RandomizedTransfer(StringStore(encrypted).Ref(), decFilter, true);
+ decFilter.MessageEnd();
if (decrypted != plaintext)
{
std::cout << "incorrectly decrypted: ";
@@ -484,27 +484,24 @@ void TestAuthenticatedSymmetricCipher(TestData &v, const NameValuePairs &overrid
StringStore sh(header), sp(plaintext), sc(ciphertext), sf(footer), sm(mac);
if (macAtBegin)
- sm.TransferTo(df);
+ RandomizedTransfer(sm, df, true);
sh.CopyTo(df, LWORD_MAX, AAD_CHANNEL);
- sc.TransferTo(df);
+ RandomizedTransfer(sc, df, true);
sf.CopyTo(df, LWORD_MAX, AAD_CHANNEL);
if (!macAtBegin)
- sm.TransferTo(df);
+ RandomizedTransfer(sm, df, true);
df.MessageEnd();
- sh.TransferTo(ef, sh.MaxRetrievable()/2+1, AAD_CHANNEL);
- sh.TransferTo(ef, LWORD_MAX, AAD_CHANNEL);
- sp.TransferTo(ef, sp.MaxRetrievable()/2+1);
- sp.TransferTo(ef);
- sf.TransferTo(ef, sf.MaxRetrievable()/2+1, AAD_CHANNEL);
- sf.TransferTo(ef, LWORD_MAX, AAD_CHANNEL);
+ RandomizedTransfer(sh, ef, true, AAD_CHANNEL);
+ RandomizedTransfer(sp, ef, true);
+ RandomizedTransfer(sf, ef, true, AAD_CHANNEL);
ef.MessageEnd();
if (test == "Encrypt" && encrypted != ciphertext+mac)
{
std::cout << "incorrectly encrypted: ";
StringSource xx(encrypted, false, new HexEncoder(new FileSink(std::cout)));
- xx.Pump(256); xx.Flush(false);
+ xx.Pump(2048); xx.Flush(false);
std::cout << "\n";
SignalTestFailure();
}