aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ModeTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ModeTest.java')
-rw-r--r--libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ModeTest.java115
1 files changed, 115 insertions, 0 deletions
diff --git a/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ModeTest.java b/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ModeTest.java
new file mode 100644
index 000000000..19fe1932c
--- /dev/null
+++ b/libraries/spongycastle/core/src/test/java/org/spongycastle/crypto/test/ModeTest.java
@@ -0,0 +1,115 @@
+package org.spongycastle.crypto.test;
+
+import org.spongycastle.crypto.BlockCipher;
+import org.spongycastle.crypto.engines.DESEngine;
+import org.spongycastle.crypto.modes.CFBBlockCipher;
+import org.spongycastle.crypto.modes.OFBBlockCipher;
+import org.spongycastle.crypto.params.KeyParameter;
+import org.spongycastle.crypto.params.ParametersWithIV;
+import org.spongycastle.util.encoders.Hex;
+import org.spongycastle.util.test.SimpleTestResult;
+import org.spongycastle.util.test.Test;
+import org.spongycastle.util.test.TestResult;
+
+/**
+ * CFB/OFB Mode test of IV padding.
+ */
+public class ModeTest
+ implements Test
+{
+ public ModeTest()
+ {
+ }
+
+ private boolean isEqualTo(
+ byte[] a,
+ byte[] b)
+ {
+ for (int i = 0; i != a.length; i++)
+ {
+ if (a[i] != b[i])
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ public TestResult perform()
+ {
+ KeyParameter key = new KeyParameter(Hex.decode("0011223344556677"));
+ byte[] input = Hex.decode("4e6f7720");
+ byte[] out1 = new byte[4];
+ byte[] out2 = new byte[4];
+
+
+ BlockCipher ofb = new OFBBlockCipher(new DESEngine(), 32);
+
+ ofb.init(true, new ParametersWithIV(key, Hex.decode("1122334455667788")));
+
+ ofb.processBlock(input, 0, out1, 0);
+
+ ofb.init(false, new ParametersWithIV(key, Hex.decode("1122334455667788")));
+ ofb.processBlock(out1, 0, out2, 0);
+
+ if (!isEqualTo(out2, input))
+ {
+ return new SimpleTestResult(false, getName() + ": test 1 - in != out");
+ }
+
+ ofb.init(true, new ParametersWithIV(key, Hex.decode("11223344")));
+
+ ofb.processBlock(input, 0, out1, 0);
+
+ ofb.init(false, new ParametersWithIV(key, Hex.decode("0000000011223344")));
+ ofb.processBlock(out1, 0, out2, 0);
+
+ if (!isEqualTo(out2, input))
+ {
+ return new SimpleTestResult(false, getName() + ": test 2 - in != out");
+ }
+
+ BlockCipher cfb = new CFBBlockCipher(new DESEngine(), 32);
+
+ cfb.init(true, new ParametersWithIV(key, Hex.decode("1122334455667788")));
+
+ cfb.processBlock(input, 0, out1, 0);
+
+ cfb.init(false, new ParametersWithIV(key, Hex.decode("1122334455667788")));
+ cfb.processBlock(out1, 0, out2, 0);
+
+ if (!isEqualTo(out2, input))
+ {
+ return new SimpleTestResult(false, getName() + ": test 3 - in != out");
+ }
+
+ cfb.init(true, new ParametersWithIV(key, Hex.decode("11223344")));
+
+ cfb.processBlock(input, 0, out1, 0);
+
+ cfb.init(false, new ParametersWithIV(key, Hex.decode("0000000011223344")));
+ cfb.processBlock(out1, 0, out2, 0);
+
+ if (!isEqualTo(out2, input))
+ {
+ return new SimpleTestResult(false, getName() + ": test 4 - in != out");
+ }
+
+ return new SimpleTestResult(true, getName() + ": Okay");
+ }
+
+ public String getName()
+ {
+ return "ModeTest";
+ }
+
+ public static void main(
+ String[] args)
+ {
+ ModeTest test = new ModeTest();
+ TestResult result = test.perform();
+
+ System.out.println(result);
+ }
+}