public TestResult perform()
{
KeyParameter key = new KeyParameter(keyBytes);
BlockCipher cipher = new DESEngine();
Mac mac = new CBCBlockCipherMac(cipher);
//
// standard DAC - zero IV
//
mac.init(key);
mac.update(input1, 0, input1.length);
byte[] out = new byte[4];
mac.doFinal(out, 0);
if (!arraysEqual(out, output1))
{
return new SimpleTestResult(false, getName() + ": Failed - expected " + new String(Hex.encode(output1)) + " got " + new String(Hex.encode(out)));
}
//
// mac with IV.
//
ParametersWithIV param = new ParametersWithIV(key, ivBytes);
mac.init(param);
mac.update(input1, 0, input1.length);
out = new byte[4];
mac.doFinal(out, 0);
if (!arraysEqual(out, output2))
{
return new SimpleTestResult(false, getName() + ": Failed - expected " + new String(Hex.encode(output2)) + " got " + new String(Hex.encode(out)));
}
//
// CFB mac with IV - 8 bit CFB mode
//
param = new ParametersWithIV(key, ivBytes);
mac = new CFBBlockCipherMac(cipher);
mac.init(param);
mac.update(input1, 0, input1.length);
out = new byte[4];
mac.doFinal(out, 0);
if (!arraysEqual(out, output3))
{
return new SimpleTestResult(false, getName() + ": Failed - expected " + new String(Hex.encode(output3)) + " got " + new String(Hex.encode(out)));
}
//
// word aligned data - zero IV
//
mac.init(key);
mac.update(input2, 0, input2.length);
out = new byte[4];
mac.doFinal(out, 0);
if (!arraysEqual(out, output4))
{
return new SimpleTestResult(false, getName() + ": Failed - expected " + new String(Hex.encode(output4)) + " got " + new String(Hex.encode(out)));
}
//
// word aligned data - zero IV - CBC padding
//
mac = new CBCBlockCipherMac(cipher, new PKCS7Padding());
mac.init(key);
mac.update(input2, 0, input2.length);
out = new byte[4];
mac.doFinal(out, 0);
if (!arraysEqual(out, output5))
{
return new SimpleTestResult(false, getName() + ": Failed - expected " + new String(Hex.encode(output5)) + " got " + new String(Hex.encode(out)));
}
//
// non-word aligned data - zero IV - CBC padding
//
mac.reset();
mac.update(input1, 0, input1.length);
out = new byte[4];
mac.doFinal(out, 0);
if (!arraysEqual(out, output6))
{
return new SimpleTestResult(false, getName() + ": Failed - expected " + new String(Hex.encode(output6)) + " got " + new String(Hex.encode(out)));
}
//
// non-word aligned data - zero IV - CBC padding
//
mac.init(key);
mac.update(input1, 0, input1.length);
out = new byte[4];
mac.doFinal(out, 0);
if (!arraysEqual(out, output6))
{
return new SimpleTestResult(false, getName() + ": Failed - expected " + new String(Hex.encode(output6)) + " got " + new String(Hex.encode(out)));
}