Make datatest.cpp aware of padding schemes
This change was needed for Kalyna and its CBC test vectors. One test uses OneAndZeros paddingpull/416/head
parent
0de44edde1
commit
b2a6ba460f
17
datatest.cpp
17
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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue