summaryrefslogtreecommitdiffstats
path: root/bcprov/src/main/java/org/bouncycastle/jce/provider/test/DESedeTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/jce/provider/test/DESedeTest.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jce/provider/test/DESedeTest.java326
1 files changed, 0 insertions, 326 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/jce/provider/test/DESedeTest.java b/bcprov/src/main/java/org/bouncycastle/jce/provider/test/DESedeTest.java
deleted file mode 100644
index 313f665..0000000
--- a/bcprov/src/main/java/org/bouncycastle/jce/provider/test/DESedeTest.java
+++ /dev/null
@@ -1,326 +0,0 @@
-package org.bouncycastle.jce.provider.test;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.security.Key;
-import java.security.SecureRandom;
-import java.security.Security;
-
-import javax.crypto.Cipher;
-import javax.crypto.CipherInputStream;
-import javax.crypto.CipherOutputStream;
-import javax.crypto.KeyGenerator;
-import javax.crypto.SecretKey;
-import javax.crypto.SecretKeyFactory;
-import javax.crypto.spec.DESedeKeySpec;
-import javax.crypto.spec.IvParameterSpec;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-import org.bouncycastle.util.encoders.Hex;
-import org.bouncycastle.util.test.SimpleTest;
-
-/**
- * basic test class for key generation for a DES-EDE block cipher, basically
- * this just exercises the provider, and makes sure we are behaving sensibly,
- * correctness of the implementation is shown in the lightweight test classes.
- */
-public class DESedeTest
- extends SimpleTest
-{
- static String[] cipherTests1 =
- {
- "112",
- "2f4bc6b30c893fa549d82c560d61cf3eb088aed020603de249d82c560d61cf3e529e95ecd8e05394",
- "128",
- "2f4bc6b30c893fa549d82c560d61cf3eb088aed020603de249d82c560d61cf3e529e95ecd8e05394",
- "168",
- "50ddb583a25c21e6c9233f8e57a86d40bb034af421c03096c9233f8e57a86d402fce91e8eb639f89",
- "192",
- "50ddb583a25c21e6c9233f8e57a86d40bb034af421c03096c9233f8e57a86d402fce91e8eb639f89",
- };
-
- static byte[] input1 = Hex.decode("000102030405060708090a0b0c0d0e0fff0102030405060708090a0b0c0d0e0f");
-
- /**
- * a fake random number generator - we just want to make sure the random numbers
- * aren't random so that we get the same output, while still getting to test the
- * key generation facilities.
- */
- private class FixedSecureRandom
- extends SecureRandom
- {
- byte[] seed = {
- (byte)0xaa, (byte)0xfd, (byte)0x12, (byte)0xf6, (byte)0x59,
- (byte)0xca, (byte)0xe6, (byte)0x34, (byte)0x89, (byte)0xb4,
- (byte)0x79, (byte)0xe5, (byte)0x07, (byte)0x6d, (byte)0xde,
- (byte)0xc2, (byte)0xf0, (byte)0x6c, (byte)0xb5, (byte)0x8f
- };
-
- public void nextBytes(
- byte[] bytes)
- {
- int offset = 0;
-
- while ((offset + seed.length) < bytes.length)
- {
- System.arraycopy(seed, 0, bytes, offset, seed.length);
- offset += seed.length;
- }
-
- System.arraycopy(seed, 0, bytes, offset, bytes.length - offset);
- }
- }
-
- public String getName()
- {
- return "DESEDE";
- }
-
- private boolean equalArray(
- byte[] a,
- byte[] b)
- {
- if (a.length != b.length)
- {
- return false;
- }
-
- for (int i = 0; i != a.length; i++)
- {
- if (a[i] != b[i])
- {
- return false;
- }
- }
-
- return true;
- }
-
- private boolean equalArray(
- byte[] a,
- byte[] b,
- int length)
- {
- if (a.length < length)
- {
- return false;
- }
-
- if (b.length < length)
- {
- return false;
- }
-
- for (int i = 0; i != length; i++)
- {
- if (a[i] != b[i])
- {
- return false;
- }
- }
-
- return true;
- }
-
- private void wrapTest(
- String alg,
- int id,
- byte[] kek,
- byte[] iv,
- byte[] in,
- byte[] out)
- {
- try
- {
- Cipher wrapper = Cipher.getInstance(alg + "Wrap", "BC");
-
- wrapper.init(Cipher.WRAP_MODE, new SecretKeySpec(kek, alg), new IvParameterSpec(iv));
-
- try
- {
- byte[] cText = wrapper.wrap(new SecretKeySpec(in, alg));
- if (!equalArray(cText, out))
- {
- fail("failed wrap test " + id + " expected " + new String(Hex.encode(out)) + " got " + new String(Hex.encode(cText)));
- }
- }
- catch (Exception e)
- {
- fail("failed wrap test exception " + e.toString());
- }
-
- wrapper.init(Cipher.UNWRAP_MODE, new SecretKeySpec(kek, alg));
-
- try
- {
- Key pText = wrapper.unwrap(out, alg, Cipher.SECRET_KEY);
- if (!equalArray(pText.getEncoded(), in))
- {
- fail("failed unwrap test " + id + " expected " + new String(Hex.encode(in)) + " got " + new String(Hex.encode(pText.getEncoded())));
- }
- }
- catch (Exception e)
- {
- fail("failed unwrap test exception " + e.toString());
- }
- }
- catch (Exception ex)
- {
- fail("failed exception " + ex.toString());
- }
- }
-
- public void test(
- String alg,
- int strength,
- byte[] input,
- byte[] output)
- {
- Key key = null;
- KeyGenerator keyGen;
- SecureRandom rand;
- Cipher in = null;
- Cipher out = null;
- CipherInputStream cIn;
- CipherOutputStream cOut;
- ByteArrayInputStream bIn;
- ByteArrayOutputStream bOut;
-
- rand = new FixedSecureRandom();
-
- try
- {
- keyGen = KeyGenerator.getInstance(alg, "BC");
- keyGen.init(strength, rand);
-
- key = keyGen.generateKey();
-
- in = Cipher.getInstance(alg + "/ECB/PKCS7Padding", "BC");
- out = Cipher.getInstance(alg + "/ECB/PKCS7Padding", "BC");
-
- out.init(Cipher.ENCRYPT_MODE, key, rand);
- }
- catch (Exception e)
- {
- fail(alg + " failed initialisation - " + e.toString());
- }
-
- try
- {
- in.init(Cipher.DECRYPT_MODE, key);
- }
- catch (Exception e)
- {
- fail(alg + " failed initialisation - " + e.toString());
- }
-
- //
- // encryption pass
- //
- bOut = new ByteArrayOutputStream();
-
- cOut = new CipherOutputStream(bOut, out);
-
- try
- {
- for (int i = 0; i != input.length / 2; i++)
- {
- cOut.write(input[i]);
- }
- cOut.write(input, input.length / 2, input.length - input.length / 2);
- cOut.close();
- }
- catch (IOException e)
- {
- fail(alg + " failed encryption - " + e.toString());
- }
-
- byte[] bytes;
-
- bytes = bOut.toByteArray();
-
- if (!equalArray(bytes, output))
- {
- fail(alg + " failed encryption - expected " + new String(Hex.encode(output)) + " got " + new String(Hex.encode(bytes)));
- }
-
- //
- // decryption pass
- //
- bIn = new ByteArrayInputStream(bytes);
-
- cIn = new CipherInputStream(bIn, in);
-
- try
- {
- DataInputStream dIn = new DataInputStream(cIn);
-
- bytes = new byte[input.length];
-
- for (int i = 0; i != input.length / 2; i++)
- {
- bytes[i] = (byte)dIn.read();
- }
- dIn.readFully(bytes, input.length / 2, bytes.length - input.length / 2);
- }
- catch (Exception e)
- {
- fail(alg + " failed encryption - " + e.toString());
- }
-
- if (!equalArray(bytes, input))
- {
- fail(alg + " failed decryption - expected " + new String(Hex.encode(input)) + " got " + new String(Hex.encode(bytes)));
- }
-
- //
- // keyspec test
- //
- try
- {
- SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(alg, "BC");
- DESedeKeySpec keySpec = (DESedeKeySpec)keyFactory.getKeySpec((SecretKey)key, DESedeKeySpec.class);
-
- if (!equalArray(key.getEncoded(), keySpec.getKey(), 16))
- {
- fail(alg + " KeySpec does not match key.");
- }
- }
- catch (Exception e)
- {
- fail(alg + " failed keyspec - " + e.toString());
- }
- }
-
- public void performTest()
- {
- for (int i = 0; i != cipherTests1.length; i += 2)
- {
- test("DESEDE", Integer.parseInt(cipherTests1[i]), input1, Hex.decode(cipherTests1[i + 1]));
- }
-
- for (int i = 0; i != cipherTests1.length; i += 2)
- {
- test("TDEA", Integer.parseInt(cipherTests1[i]), input1, Hex.decode(cipherTests1[i + 1]));
- }
-
- byte[] kek1 = Hex.decode("255e0d1c07b646dfb3134cc843ba8aa71f025b7c0838251f");
- byte[] iv1 = Hex.decode("5dd4cbfc96f5453b");
- byte[] in1 = Hex.decode("2923bf85e06dd6ae529149f1f1bae9eab3a7da3d860d3e98");
- byte[] out1 = Hex.decode("690107618ef092b3b48ca1796b234ae9fa33ebb4159604037db5d6a84eb3aac2768c632775a467d4");
-
- wrapTest("DESEDE", 1, kek1, iv1, in1, out1);
- wrapTest("TDEA", 1, kek1, iv1, in1, out1);
- }
-
- public static void main(
- String[] args)
- {
- Security.addProvider(new BouncyCastleProvider());
-
- runTest(new DESedeTest());
- }
-}