summaryrefslogtreecommitdiff
path: root/datatest.cpp
diff options
context:
space:
mode:
authorJeffrey Walton <noloader@gmail.com>2017-05-10 15:26:36 -0400
committerJeffrey Walton <noloader@gmail.com>2017-05-10 15:26:36 -0400
commitb2a6ba460fc85585d8f5851574e39ad4dc649bcf (patch)
treeb5e0f29087c77c09a44468fe88b42502ebbe106c /datatest.cpp
parent0de44edde1d623388fff567bc69cefae884ceba0 (diff)
downloadcryptopp-git-b2a6ba460fc85585d8f5851574e39ad4dc649bcf.tar.gz
Make datatest.cpp aware of padding schemes
This change was needed for Kalyna and its CBC test vectors. One test uses OneAndZeros padding
Diffstat (limited to 'datatest.cpp')
-rw-r--r--datatest.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/datatest.cpp b/datatest.cpp
index 5289642c..b0122f54 100644
--- a/datatest.cpp
+++ b/datatest.cpp
@@ -375,9 +375,15 @@ void TestSymmetricCipher(TestData &v, const NameValuePairs &overrideParameters)
lastName = name;
}
- // Most block ciphers don't specify this. Kalyna and Threefish use it.
+ // Most block ciphers don't specify BlockSize. Kalyna and Threefish use it.
int blockSize = pairs.GetIntValueWithDefault(Name::BlockSize(), 0);
+ // Most block ciphers don't specify BlockPaddingScheme. Kalyna uses it in test vectors.
+ // 0 is NoPadding, 1 is ZerosPadding, 2 is PkcsPadding, 3 is OneAndZerosPadding, etc
+ // Note: The machinery is wired such that paddingScheme is effectively latched. An
+ // old paddingScheme may be unintentionally used in a subsequent test.
+ int paddingScheme = pairs.GetIntValueWithDefault(Name::BlockPaddingScheme(), 0);
+
ConstByteArrayParameter iv;
if (pairs.GetValue(Name::IV(), iv) && iv.size() != encryptor->IVSize() && (int)iv.size() != blockSize)
SignalTestFailure();
@@ -439,13 +445,15 @@ void TestSymmetricCipher(TestData &v, const NameValuePairs &overrideParameters)
return;
}
- StreamTransformationFilter encFilter(*encryptor, new StringSink(encrypted), StreamTransformationFilter::NO_PADDING);
+ StreamTransformationFilter encFilter(*encryptor, new StringSink(encrypted),
+ static_cast<BlockPaddingSchemeDef::BlockPaddingScheme>(paddingScheme));
RandomizedTransfer(StringStore(plaintext).Ref(), encFilter, true);
encFilter.MessageEnd();
/*{
std::string z;
encryptor->Seek(seek);
- StringSource ss(plaintext, false, new StreamTransformationFilter(*encryptor, new StringSink(z), StreamTransformationFilter::NO_PADDING));
+ StringSource ss(plaintext, false, new StreamTransformationFilter(*encryptor, new StringSink(z),
+ static_cast<BlockPaddingSchemeDef::BlockPaddingScheme>(paddingScheme)));
while (ss.Pump(64)) {}
ss.PumpAll();
for (int i=0; i<z.length(); i++)
@@ -469,7 +477,8 @@ void TestSymmetricCipher(TestData &v, const NameValuePairs &overrideParameters)
SignalTestFailure();
}
std::string decrypted;
- StreamTransformationFilter decFilter(*decryptor, new StringSink(decrypted), StreamTransformationFilter::NO_PADDING);
+ StreamTransformationFilter decFilter(*decryptor, new StringSink(decrypted),
+ static_cast<BlockPaddingSchemeDef::BlockPaddingScheme>(paddingScheme));
RandomizedTransfer(StringStore(encrypted).Ref(), decFilter, true);
decFilter.MessageEnd();
if (decrypted != plaintext)