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;
|
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);
|
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;
|
ConstByteArrayParameter iv;
|
||||||
if (pairs.GetValue(Name::IV(), iv) && iv.size() != encryptor->IVSize() && (int)iv.size() != blockSize)
|
if (pairs.GetValue(Name::IV(), iv) && iv.size() != encryptor->IVSize() && (int)iv.size() != blockSize)
|
||||||
SignalTestFailure();
|
SignalTestFailure();
|
||||||
|
|
@ -439,13 +445,15 @@ void TestSymmetricCipher(TestData &v, const NameValuePairs &overrideParameters)
|
||||||
return;
|
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);
|
RandomizedTransfer(StringStore(plaintext).Ref(), encFilter, true);
|
||||||
encFilter.MessageEnd();
|
encFilter.MessageEnd();
|
||||||
/*{
|
/*{
|
||||||
std::string z;
|
std::string z;
|
||||||
encryptor->Seek(seek);
|
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)) {}
|
while (ss.Pump(64)) {}
|
||||||
ss.PumpAll();
|
ss.PumpAll();
|
||||||
for (int i=0; i<z.length(); i++)
|
for (int i=0; i<z.length(); i++)
|
||||||
|
|
@ -469,7 +477,8 @@ void TestSymmetricCipher(TestData &v, const NameValuePairs &overrideParameters)
|
||||||
SignalTestFailure();
|
SignalTestFailure();
|
||||||
}
|
}
|
||||||
std::string decrypted;
|
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);
|
RandomizedTransfer(StringStore(encrypted).Ref(), decFilter, true);
|
||||||
decFilter.MessageEnd();
|
decFilter.MessageEnd();
|
||||||
if (decrypted != plaintext)
|
if (decrypted != plaintext)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue