diff options
author | Jeffrey Walton <noloader@gmail.com> | 2017-05-10 15:26:36 -0400 |
---|---|---|
committer | Jeffrey Walton <noloader@gmail.com> | 2017-05-10 15:26:36 -0400 |
commit | b2a6ba460fc85585d8f5851574e39ad4dc649bcf (patch) | |
tree | b5e0f29087c77c09a44468fe88b42502ebbe106c /datatest.cpp | |
parent | 0de44edde1d623388fff567bc69cefae884ceba0 (diff) | |
download | cryptopp-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.cpp | 17 |
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)
|