diff options
Diffstat (limited to 'core/src/test/java/org/spongycastle/crypto/test/ResetTest.java')
-rw-r--r-- | core/src/test/java/org/spongycastle/crypto/test/ResetTest.java | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/core/src/test/java/org/spongycastle/crypto/test/ResetTest.java b/core/src/test/java/org/spongycastle/crypto/test/ResetTest.java new file mode 100644 index 00000000..dd323d7d --- /dev/null +++ b/core/src/test/java/org/spongycastle/crypto/test/ResetTest.java @@ -0,0 +1,99 @@ +package org.spongycastle.crypto.test; + +import org.spongycastle.crypto.BufferedBlockCipher; +import org.spongycastle.crypto.DataLengthException; +import org.spongycastle.crypto.InvalidCipherTextException; +import org.spongycastle.crypto.engines.DESEngine; +import org.spongycastle.crypto.params.KeyParameter; +import org.spongycastle.util.encoders.Hex; +import org.spongycastle.util.test.SimpleTest; + +public class ResetTest + extends SimpleTest +{ + private static final byte[] input = Hex.decode("4e6f77206973207468652074696d6520666f7220616c6c20"); + private static final byte[] output = Hex.decode("3fa40e8a984d48156a271787ab8883f9893d51ec4b563b53"); + public String getName() + { + return "Reset"; + } + + public void performTest() + throws Exception + { + BufferedBlockCipher cipher = new BufferedBlockCipher(new DESEngine()); + + KeyParameter param = new KeyParameter(Hex.decode("0123456789abcdef")); + + basicTrial(cipher, param); + + cipher.init(false, param); + + byte[] out = new byte[input.length]; + + int len2 = cipher.processBytes(output, 0, output.length - 1, out, 0); + + try + { + cipher.doFinal(out, len2); + fail("no DataLengthException - short input"); + } + catch (DataLengthException e) + { + // ignore + } + + len2 = cipher.processBytes(output, 0, output.length, out, 0); + + cipher.doFinal(out, len2); + + if (!areEqual(input, out)) + { + fail("failed reversal one got " + new String(Hex.encode(out))); + } + + len2 = cipher.processBytes(output, 0, output.length - 1, out, 0); + + try + { + cipher.doFinal(out, len2); + fail("no DataLengthException - short output"); + } + catch (DataLengthException e) + { + // ignore + } + + len2 = cipher.processBytes(output, 0, output.length, out, 0); + + cipher.doFinal(out, len2); + + if (!areEqual(input, out)) + { + fail("failed reversal two got " + new String(Hex.encode(out))); + } + } + + private void basicTrial(BufferedBlockCipher cipher, KeyParameter param) + throws InvalidCipherTextException + { + cipher.init(true, param); + + byte[] out = new byte[input.length]; + + int len1 = cipher.processBytes(input, 0, input.length, out, 0); + + cipher.doFinal(out, len1); + + if (!areEqual(out, output)) + { + fail("failed - " + "expected " + new String(Hex.encode(output)) + " got " + new String(Hex.encode(out))); + } + } + + public static void main( + String[] args) + { + runTest(new ResetTest()); + } +} |