From b2a6ba460fc85585d8f5851574e39ad4dc649bcf Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Wed, 10 May 2017 15:26:36 -0400 Subject: Make datatest.cpp aware of padding schemes This change was needed for Kalyna and its CBC test vectors. One test uses OneAndZeros padding --- datatest.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'datatest.cpp') 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(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(paddingScheme))); while (ss.Pump(64)) {} ss.PumpAll(); for (int i=0; i(paddingScheme)); RandomizedTransfer(StringStore(encrypted).Ref(), decFilter, true); decFilter.MessageEnd(); if (decrypted != plaintext) -- cgit v1.2.1