http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/cipher/JceCipherTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/cipher/JceCipherTest.java b/src/test/java/org/apache/commons/crypto/cipher/JceCipherTest.java index c40aaa1..9a0f9cd 100644 --- a/src/test/java/org/apache/commons/crypto/cipher/JceCipherTest.java +++ b/src/test/java/org/apache/commons/crypto/cipher/JceCipherTest.java @@ -20,13 +20,13 @@ package org.apache.commons.crypto.cipher; public class JceCipherTest extends AbstractCipherTest { - @Override - public void init() { - transformations = new CipherTransformation[]{ - CipherTransformation.AES_CBC_NOPADDING, - CipherTransformation.AES_CBC_PKCS5PADDING, - CipherTransformation.AES_CTR_NOPADDING}; - cipherClass = JceCipher.class.getName(); - } + @Override + public void init() { + transformations = new CipherTransformation[] { + CipherTransformation.AES_CBC_NOPADDING, + CipherTransformation.AES_CBC_PKCS5PADDING, + CipherTransformation.AES_CTR_NOPADDING }; + cipherClass = JceCipher.class.getName(); + } }
http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/cipher/OpensslCipherTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/cipher/OpensslCipherTest.java b/src/test/java/org/apache/commons/crypto/cipher/OpensslCipherTest.java index 9428e2a..c66936a 100644 --- a/src/test/java/org/apache/commons/crypto/cipher/OpensslCipherTest.java +++ b/src/test/java/org/apache/commons/crypto/cipher/OpensslCipherTest.java @@ -31,135 +31,145 @@ import org.junit.Test; public class OpensslCipherTest extends AbstractCipherTest { - @Override - public void init() { - transformations = new CipherTransformation[]{ - CipherTransformation.AES_CBC_NOPADDING, - CipherTransformation.AES_CBC_PKCS5PADDING, - CipherTransformation.AES_CTR_NOPADDING}; - cipherClass = OpensslCipher.class.getName(); - } - - @Test(expected = NoSuchAlgorithmException.class, timeout=120000) - public void testInvalidAlgorithm() throws Exception { - Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); - - try { - Openssl.getInstance("AES2/CTR/NoPadding"); - Assert.fail("Should specify correct algorithm."); - } catch (NoSuchAlgorithmException e) { - Assert.assertTrue(e.getMessage().contains("Doesn't support algorithm: AES2 and mode: CTR")); - throw e; + @Override + public void init() { + transformations = new CipherTransformation[] { + CipherTransformation.AES_CBC_NOPADDING, + CipherTransformation.AES_CBC_PKCS5PADDING, + CipherTransformation.AES_CTR_NOPADDING }; + cipherClass = OpensslCipher.class.getName(); } - } - - @Test(expected = NoSuchPaddingException.class, timeout=120000) - public void testInvalidPadding() throws Exception { - Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); - - try { - Openssl.getInstance("AES/CTR/NoPadding2"); - Assert.fail("Should specify correct padding."); - } catch (NoSuchPaddingException e) { - Assert.assertTrue(e.getMessage().contains("Doesn't support padding: NoPadding2")); - throw e; - } - } - - @Test(expected = NoSuchAlgorithmException.class, timeout=120000) - public void testInvalidMode() throws Exception { - try { - Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); - Openssl.getInstance("AES/CTR2/NoPadding"); - Assert.fail("java.security.NoSuchAlgorithmException should be thrown."); - } catch (NoSuchAlgorithmException e) { - Assert.assertTrue(e.getMessage().contains("Doesn't support algorithm: AES and mode: CTR2")); - throw e; - } - } - - @Test(timeout=120000) - public void testUpdateArguments() throws Exception { - Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); - Openssl cipher = Openssl.getInstance(CipherTransformation.AES_CTR_NOPADDING.getName()); - Assert.assertNotNull(cipher); - - cipher.init(Openssl.ENCRYPT_MODE, KEY, IV); - - // Require direct buffers - ByteBuffer input = ByteBuffer.allocate(1024); - ByteBuffer output = ByteBuffer.allocate(1024); - try { - cipher.update(input, output); - Assert.fail("Input and output buffer should be direct buffer."); - } catch (IllegalArgumentException e) { - Assert.assertTrue(e.getMessage().contains("Direct buffers are required")); + @Test(expected = NoSuchAlgorithmException.class, timeout = 120000) + public void testInvalidAlgorithm() throws Exception { + Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); + + try { + Openssl.getInstance("AES2/CTR/NoPadding"); + Assert.fail("Should specify correct algorithm."); + } catch (NoSuchAlgorithmException e) { + Assert.assertTrue(e.getMessage().contains( + "Doesn't support algorithm: AES2 and mode: CTR")); + throw e; + } } - // Output buffer length should be sufficient to store output data - input = ByteBuffer.allocateDirect(1024); - output = ByteBuffer.allocateDirect(1000); - try { - cipher.update(input, output); - Assert.fail("Output buffer length should be sufficient " + - "to store output data"); - } catch (ShortBufferException e) { - Assert.assertTrue(e.getMessage().contains("Output buffer is not sufficient")); + @Test(expected = NoSuchPaddingException.class, timeout = 120000) + public void testInvalidPadding() throws Exception { + Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); + + try { + Openssl.getInstance("AES/CTR/NoPadding2"); + Assert.fail("Should specify correct padding."); + } catch (NoSuchPaddingException e) { + Assert.assertTrue(e.getMessage().contains( + "Doesn't support padding: NoPadding2")); + throw e; + } } - } - @Test(timeout=120000) - public void testDoFinalArguments() throws Exception { - Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); - Openssl cipher = Openssl.getInstance(CipherTransformation.AES_CTR_NOPADDING.getName()); - Assert.assertNotNull(cipher); - - cipher.init(Openssl.ENCRYPT_MODE, KEY, IV); + @Test(expected = NoSuchAlgorithmException.class, timeout = 120000) + public void testInvalidMode() throws Exception { + try { + Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); + Openssl.getInstance("AES/CTR2/NoPadding"); + Assert.fail("java.security.NoSuchAlgorithmException should be thrown."); + } catch (NoSuchAlgorithmException e) { + Assert.assertTrue(e.getMessage().contains( + "Doesn't support algorithm: AES and mode: CTR2")); + throw e; + } + } - // Require direct buffer - ByteBuffer output = ByteBuffer.allocate(1024); + @Test(timeout = 120000) + public void testUpdateArguments() throws Exception { + Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); + Openssl cipher = Openssl + .getInstance(CipherTransformation.AES_CTR_NOPADDING.getName()); + Assert.assertNotNull(cipher); + + cipher.init(Openssl.ENCRYPT_MODE, KEY, IV); + + // Require direct buffers + ByteBuffer input = ByteBuffer.allocate(1024); + ByteBuffer output = ByteBuffer.allocate(1024); + + try { + cipher.update(input, output); + Assert.fail("Input and output buffer should be direct buffer."); + } catch (IllegalArgumentException e) { + Assert.assertTrue(e.getMessage().contains( + "Direct buffers are required")); + } + + // Output buffer length should be sufficient to store output data + input = ByteBuffer.allocateDirect(1024); + output = ByteBuffer.allocateDirect(1000); + try { + cipher.update(input, output); + Assert.fail("Output buffer length should be sufficient " + + "to store output data"); + } catch (ShortBufferException e) { + Assert.assertTrue(e.getMessage().contains( + "Output buffer is not sufficient")); + } + } - try { - cipher.doFinal(output); - Assert.fail("Output buffer should be direct buffer."); - } catch (IllegalArgumentException e) { - Assert.assertTrue(e.getMessage().contains("Direct buffer is required")); + @Test(timeout = 120000) + public void testDoFinalArguments() throws Exception { + Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); + Openssl cipher = Openssl + .getInstance(CipherTransformation.AES_CTR_NOPADDING.getName()); + Assert.assertNotNull(cipher); + + cipher.init(Openssl.ENCRYPT_MODE, KEY, IV); + + // Require direct buffer + ByteBuffer output = ByteBuffer.allocate(1024); + + try { + cipher.doFinal(output); + Assert.fail("Output buffer should be direct buffer."); + } catch (IllegalArgumentException e) { + Assert.assertTrue(e.getMessage().contains( + "Direct buffer is required")); + } } - } - - @Test(expected = InvalidKeyException.class, timeout=120000) - public void testInvalidKey() throws Exception { - Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); - Openssl cipher = Openssl.getInstance(CipherTransformation.AES_CTR_NOPADDING.getName()); - Assert.assertNotNull(cipher); - - final byte[] invalidKey = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x11}; - try { - cipher.init(Openssl.ENCRYPT_MODE, invalidKey, IV); - Assert.fail("java.security.InvalidKeyException should be thrown."); - } catch (Exception e) { - Assert.assertTrue(e.getMessage().contains("Invalid key length.")); - throw e; + + @Test(expected = InvalidKeyException.class, timeout = 120000) + public void testInvalidKey() throws Exception { + Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); + Openssl cipher = Openssl + .getInstance(CipherTransformation.AES_CTR_NOPADDING.getName()); + Assert.assertNotNull(cipher); + + final byte[] invalidKey = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x11 }; + try { + cipher.init(Openssl.ENCRYPT_MODE, invalidKey, IV); + Assert.fail("java.security.InvalidKeyException should be thrown."); + } catch (Exception e) { + Assert.assertTrue(e.getMessage().contains("Invalid key length.")); + throw e; + } } - } - - @Test(expected = InvalidAlgorithmParameterException.class, timeout=120000) - public void testInvalidIV() throws Exception { - Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); - Openssl cipher = Openssl.getInstance(CipherTransformation.AES_CTR_NOPADDING.getName()); - Assert.assertNotNull(cipher); - - final byte[] invalidIV = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x11}; - try { - cipher.init(Openssl.ENCRYPT_MODE, KEY, invalidIV); - Assert.fail("java.security.InvalidAlgorithmParameterException should be thrown."); - } catch (Exception e) { - Assert.assertTrue(e.getMessage().contains("Wrong IV length.")); - throw e; + + @Test(expected = InvalidAlgorithmParameterException.class, timeout = 120000) + public void testInvalidIV() throws Exception { + Assume.assumeTrue(Openssl.getLoadingFailureReason() == null); + Openssl cipher = Openssl + .getInstance(CipherTransformation.AES_CTR_NOPADDING.getName()); + Assert.assertNotNull(cipher); + + final byte[] invalidIV = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x11 }; + try { + cipher.init(Openssl.ENCRYPT_MODE, KEY, invalidIV); + Assert.fail("java.security.InvalidAlgorithmParameterException should be thrown."); + } catch (Exception e) { + Assert.assertTrue(e.getMessage().contains("Wrong IV length.")); + throw e; + } } - } } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/cipher/TestData.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/cipher/TestData.java b/src/test/java/org/apache/commons/crypto/cipher/TestData.java index 2f8da8f..d67414e 100644 --- a/src/test/java/org/apache/commons/crypto/cipher/TestData.java +++ b/src/test/java/org/apache/commons/crypto/cipher/TestData.java @@ -22,135 +22,126 @@ import java.util.Map; public class TestData { - private static String[] CBCNoPaddingTests = { - /* - * key_len,key,iv,plainText,cipherText - */ - "128", - "2b7e151628aed2a6abf7158809cf4f3c", - "000102030405060708090a0b0c0d0e0f", - "6bc1bee22e409f96e93d7e117393172a", - "7649abac8119b246cee98e9b12e9197d", - - "128", - "2b7e151628aed2a6abf7158809cf4f3c", - "7649ABAC8119B246CEE98E9B12E9197D", - "ae2d8a571e03ac9c9eb76fac45af8e51", - "5086cb9b507219ee95db113a917678b2", - - "192", - "603deb1015ca71be2b73aef0857d77811f352c073b6108d7", - "9CFC4E967EDB808D679F777BC6702C7D", - "30c81c46a35ce411e5fbc1191a0a52ef", - "78C57E3F543A18F472756DAC2F018523", - - "192", - "603deb1015ca71be2b73aef0857d77811f352c073b6108d7", - "39F23369A9D9BACFA530E26304231461", - "f69f2445df4f9b17ad2b417be66c3710", - "79ECA9610F0B9AAFB8C7C2D655047A41", - - "256", - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", - "000102030405060708090a0b0c0d0e0f", - "6bc1bee22e409f96e93d7e117393172a", - "f58c4c04d6e5f1ba779eabfb5f7bfbd6", - - "256", - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", - "F58C4C04D6E5F1BA779EABFB5F7BFBD6", - "ae2d8a571e03ac9c9eb76fac45af8e51", - "9cfc4e967edb808d679f777bc6702c7d" - }; - - private static String[] CBCPKCS5PaddingTests = { - /* - * key_len,key,iv,plainText,cipherText - */ - //Test#0 for input of 6 bytes - "128", - "ac5800ac3cb59c7c14f36019e43b44fe", - "f013ce1ec901b5b60a85a986b3b72eba", - "f6cee5ff28fd", - "e8a846fd9718507371604504d4ca1ac7", - - //Test#0 for input of 15 bytes - "128", - "0784fa652e733cb699f250b0df2c4b41", - "106519760fb3ef97e1ccea073b27122d", - "6842455a2992c2e5193056a5524075", - "56a8e0c3ee3315f913693c0ca781e917", - - //Test#0 for input of 16 bytes - "128", - "04952c3fcf497a4d449c41e8730c5d9a", - "53549bf7d5553b727458c1abaf0ba167", - "c9a44f6f75e98ddbca7332167f5c45e3", - "7fa290322ca7a1a04b61a1147ff20fe66fde58510a1d0289d11c0ddf6f4decfd", - - //Test#0 for input of 32 bytes - "128", - "2ae7081caebe54909820620a44a60a0f", - "fc5e783fbe7be12f58b1f025d82ada50", - "1ba93ee6f83752df47909585b3f28e56693f89e169d3093eee85175ea3a46cd3", - "7944957a99e473e2c07eb496a83ec4e55db2fb44ebdd42bb611e0def29b23a73ac37eb0f4f5d86f090f3ddce3980425a", - - //Test#0 for input of 33 bytes - "128", - "898be9cc5004ed0fa6e117c9a3099d31", - "9dea7621945988f96491083849b068df", - "0397f4f6820b1f9386f14403be5ac16e50213bd473b4874b9bcbf5f318ee686b1d", - "e232cd6ef50047801ee681ec30f61d53cfd6b0bca02fd03c1b234baa10ea82ac9dab8b960926433a19ce6dea08677e34"}; - - private static String[] cipherCTRTests = { - /* - * key_len,key,iv,plainText,cipherText - */ - "128", - "2b7e151628aed2a6abf7158809cf4f3c", - "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", - "6bc1bee22e409f96e93d7e117393172a", - "874d6191b620e3261bef6864990db6ce", - - "128", - "2b7e151628aed2a6abf7158809cf4f3c", - "f0f1f2f3f4f5f6f7f8f9fafbfcfdff00", - "ae2d8a571e03ac9c9eb76fac45af8e51", - "9806f66b7970fdff8617187bb9fffdff", - - //Test for input of 15 bytes - "128", - "2b7e151628aed2a6abf7158809cf4f3c", - "f0f1f2f3f4f5f6f7f8f9fafbfcfdff01", - "30c81c46a35ce411e5fbc1191a0a52", - "5ae4df3edbd5d35e5b4f09020db03e", - - "256", - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", - "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", - "6bc1bee22e409f96e93d7e117393172a", - "601ec313775789a5b7a7f504bbf3d228", - - "256", - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", - "f0f1f2f3f4f5f6f7f8f9fafbfcfdff00", - "ae2d8a571e03ac9c9eb76fac45af8e51", - "f443e3ca4d62b59aca84e990cacaf5c5", - - //Test for input of 15 bytes - "256", - "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", - "f0f1f2f3f4f5f6f7f8f9fafbfcfdff01", - "30c81c46a35ce411e5fbc1191a0a52", - "2b0930daa23de94ce87017ba2d8498" }; - - private static Map<CipherTransformation, String[]> testData = - new HashMap<CipherTransformation, String[]>(); + private static String[] CBCNoPaddingTests = { + /* + * key_len,key,iv,plainText,cipherText + */ + "128", "2b7e151628aed2a6abf7158809cf4f3c", + "000102030405060708090a0b0c0d0e0f", + "6bc1bee22e409f96e93d7e117393172a", + "7649abac8119b246cee98e9b12e9197d", + + "128", "2b7e151628aed2a6abf7158809cf4f3c", + "7649ABAC8119B246CEE98E9B12E9197D", + "ae2d8a571e03ac9c9eb76fac45af8e51", + "5086cb9b507219ee95db113a917678b2", + + "192", "603deb1015ca71be2b73aef0857d77811f352c073b6108d7", + "9CFC4E967EDB808D679F777BC6702C7D", + "30c81c46a35ce411e5fbc1191a0a52ef", + "78C57E3F543A18F472756DAC2F018523", + + "192", "603deb1015ca71be2b73aef0857d77811f352c073b6108d7", + "39F23369A9D9BACFA530E26304231461", + "f69f2445df4f9b17ad2b417be66c3710", + "79ECA9610F0B9AAFB8C7C2D655047A41", + + "256", + "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", + "000102030405060708090a0b0c0d0e0f", + "6bc1bee22e409f96e93d7e117393172a", + "f58c4c04d6e5f1ba779eabfb5f7bfbd6", + + "256", + "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", + "F58C4C04D6E5F1BA779EABFB5F7BFBD6", + "ae2d8a571e03ac9c9eb76fac45af8e51", + "9cfc4e967edb808d679f777bc6702c7d" }; + + private static String[] CBCPKCS5PaddingTests = { + /* + * key_len,key,iv,plainText,cipherText + */ + // Test#0 for input of 6 bytes + "128", + "ac5800ac3cb59c7c14f36019e43b44fe", + "f013ce1ec901b5b60a85a986b3b72eba", + "f6cee5ff28fd", + "e8a846fd9718507371604504d4ca1ac7", + + // Test#0 for input of 15 bytes + "128", + "0784fa652e733cb699f250b0df2c4b41", + "106519760fb3ef97e1ccea073b27122d", + "6842455a2992c2e5193056a5524075", + "56a8e0c3ee3315f913693c0ca781e917", + + // Test#0 for input of 16 bytes + "128", + "04952c3fcf497a4d449c41e8730c5d9a", + "53549bf7d5553b727458c1abaf0ba167", + "c9a44f6f75e98ddbca7332167f5c45e3", + "7fa290322ca7a1a04b61a1147ff20fe66fde58510a1d0289d11c0ddf6f4decfd", + + // Test#0 for input of 32 bytes + "128", + "2ae7081caebe54909820620a44a60a0f", + "fc5e783fbe7be12f58b1f025d82ada50", + "1ba93ee6f83752df47909585b3f28e56693f89e169d3093eee85175ea3a46cd3", + "7944957a99e473e2c07eb496a83ec4e55db2fb44ebdd42bb611e0def29b23a73ac37eb0f4f5d86f090f3ddce3980425a", + + // Test#0 for input of 33 bytes + "128", + "898be9cc5004ed0fa6e117c9a3099d31", + "9dea7621945988f96491083849b068df", + "0397f4f6820b1f9386f14403be5ac16e50213bd473b4874b9bcbf5f318ee686b1d", + "e232cd6ef50047801ee681ec30f61d53cfd6b0bca02fd03c1b234baa10ea82ac9dab8b960926433a19ce6dea08677e34" }; + + private static String[] cipherCTRTests = { + /* + * key_len,key,iv,plainText,cipherText + */ + "128", + "2b7e151628aed2a6abf7158809cf4f3c", + "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", + "6bc1bee22e409f96e93d7e117393172a", + "874d6191b620e3261bef6864990db6ce", + + "128", + "2b7e151628aed2a6abf7158809cf4f3c", + "f0f1f2f3f4f5f6f7f8f9fafbfcfdff00", + "ae2d8a571e03ac9c9eb76fac45af8e51", + "9806f66b7970fdff8617187bb9fffdff", + + // Test for input of 15 bytes + "128", "2b7e151628aed2a6abf7158809cf4f3c", + "f0f1f2f3f4f5f6f7f8f9fafbfcfdff01", + "30c81c46a35ce411e5fbc1191a0a52", "5ae4df3edbd5d35e5b4f09020db03e", + + "256", + "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", + "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", + "6bc1bee22e409f96e93d7e117393172a", + "601ec313775789a5b7a7f504bbf3d228", + + "256", + "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", + "f0f1f2f3f4f5f6f7f8f9fafbfcfdff00", + "ae2d8a571e03ac9c9eb76fac45af8e51", + "f443e3ca4d62b59aca84e990cacaf5c5", + + // Test for input of 15 bytes + "256", + "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4", + "f0f1f2f3f4f5f6f7f8f9fafbfcfdff01", + "30c81c46a35ce411e5fbc1191a0a52", "2b0930daa23de94ce87017ba2d8498" }; + + private static Map<CipherTransformation, String[]> testData = new HashMap<CipherTransformation, String[]>(); static { testData.put(CipherTransformation.AES_CBC_NOPADDING, CBCNoPaddingTests); testData.put(CipherTransformation.AES_CBC_PKCS5PADDING, - CBCPKCS5PaddingTests); + CBCPKCS5PaddingTests); testData.put(CipherTransformation.AES_CTR_NOPADDING, cipherCTRTests); } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/random/AbstractRandomTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/random/AbstractRandomTest.java b/src/test/java/org/apache/commons/crypto/random/AbstractRandomTest.java index 1d1db88..2ccd163 100644 --- a/src/test/java/org/apache/commons/crypto/random/AbstractRandomTest.java +++ b/src/test/java/org/apache/commons/crypto/random/AbstractRandomTest.java @@ -24,34 +24,35 @@ import org.junit.Test; public abstract class AbstractRandomTest { - public abstract CryptoRandom getCryptoRandom() throws GeneralSecurityException; + public abstract CryptoRandom getCryptoRandom() + throws GeneralSecurityException; - @Test(timeout=120000) - public void testRandomBytes() throws Exception { - CryptoRandom random = getCryptoRandom(); - // len = 16 - checkRandomBytes(random, 16); - // len = 32 - checkRandomBytes(random, 32); - // len = 128 - checkRandomBytes(random, 128); - // len = 256 - checkRandomBytes(random, 256); - random.close(); - } + @Test(timeout = 120000) + public void testRandomBytes() throws Exception { + CryptoRandom random = getCryptoRandom(); + // len = 16 + checkRandomBytes(random, 16); + // len = 32 + checkRandomBytes(random, 32); + // len = 128 + checkRandomBytes(random, 128); + // len = 256 + checkRandomBytes(random, 256); + random.close(); + } - /** - * Test will timeout if secure random implementation always returns a - * constant value. - */ - private void checkRandomBytes(CryptoRandom random, int len) { - byte[] bytes = new byte[len]; - byte[] bytes1 = new byte[len]; - random.nextBytes(bytes); - random.nextBytes(bytes1); + /** + * Test will timeout if secure random implementation always returns a + * constant value. + */ + private void checkRandomBytes(CryptoRandom random, int len) { + byte[] bytes = new byte[len]; + byte[] bytes1 = new byte[len]; + random.nextBytes(bytes); + random.nextBytes(bytes1); - while (Arrays.equals(bytes, bytes1)) { - random.nextBytes(bytes1); + while (Arrays.equals(bytes, bytes1)) { + random.nextBytes(bytes1); + } } - } } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/random/TestJavaCryptoRandom.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/random/TestJavaCryptoRandom.java b/src/test/java/org/apache/commons/crypto/random/TestJavaCryptoRandom.java index bb84bc7..b9642ab 100644 --- a/src/test/java/org/apache/commons/crypto/random/TestJavaCryptoRandom.java +++ b/src/test/java/org/apache/commons/crypto/random/TestJavaCryptoRandom.java @@ -25,16 +25,18 @@ import static junit.framework.Assert.fail; public class TestJavaCryptoRandom extends AbstractRandomTest { - @Override - public CryptoRandom getCryptoRandom() throws GeneralSecurityException { - Properties props = new Properties(); - props.setProperty(ConfigurationKeys.COMMONS_CRYPTO_SECURE_RANDOM_CLASSES_KEY, - JavaCryptoRandom.class.getName()); - CryptoRandom random = CryptoRandomFactory.getCryptoRandom(props); - if ( !(random instanceof JavaCryptoRandom)) { - fail("The CryptoRandom should be: " + JavaCryptoRandom.class.getName()); + @Override + public CryptoRandom getCryptoRandom() throws GeneralSecurityException { + Properties props = new Properties(); + props.setProperty( + ConfigurationKeys.COMMONS_CRYPTO_SECURE_RANDOM_CLASSES_KEY, + JavaCryptoRandom.class.getName()); + CryptoRandom random = CryptoRandomFactory.getCryptoRandom(props); + if (!(random instanceof JavaCryptoRandom)) { + fail("The CryptoRandom should be: " + + JavaCryptoRandom.class.getName()); + } + return random; } - return random; - } } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/random/TestOpensslCryptoRandom.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/random/TestOpensslCryptoRandom.java b/src/test/java/org/apache/commons/crypto/random/TestOpensslCryptoRandom.java index fede249..0a6600a 100644 --- a/src/test/java/org/apache/commons/crypto/random/TestOpensslCryptoRandom.java +++ b/src/test/java/org/apache/commons/crypto/random/TestOpensslCryptoRandom.java @@ -25,16 +25,18 @@ import static junit.framework.Assert.fail; public class TestOpensslCryptoRandom extends AbstractRandomTest { - @Override - public CryptoRandom getCryptoRandom() throws GeneralSecurityException { - Properties props = new Properties(); - props.setProperty(ConfigurationKeys.COMMONS_CRYPTO_SECURE_RANDOM_CLASSES_KEY, - OpensslCryptoRandom.class.getName()); - CryptoRandom random = CryptoRandomFactory.getCryptoRandom(props); - if ( !(random instanceof OpensslCryptoRandom)) { - fail("The CryptoRandom should be: " + OpensslCryptoRandom.class.getName()); + @Override + public CryptoRandom getCryptoRandom() throws GeneralSecurityException { + Properties props = new Properties(); + props.setProperty( + ConfigurationKeys.COMMONS_CRYPTO_SECURE_RANDOM_CLASSES_KEY, + OpensslCryptoRandom.class.getName()); + CryptoRandom random = CryptoRandomFactory.getCryptoRandom(props); + if (!(random instanceof OpensslCryptoRandom)) { + fail("The CryptoRandom should be: " + + OpensslCryptoRandom.class.getName()); + } + return random; } - return random; - } } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/random/TestOsCryptoRandom.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/random/TestOsCryptoRandom.java b/src/test/java/org/apache/commons/crypto/random/TestOsCryptoRandom.java index 9968c34..9f0b149 100644 --- a/src/test/java/org/apache/commons/crypto/random/TestOsCryptoRandom.java +++ b/src/test/java/org/apache/commons/crypto/random/TestOsCryptoRandom.java @@ -19,10 +19,10 @@ package org.apache.commons.crypto.random; import java.util.Properties; -public class TestOsCryptoRandom extends AbstractRandomTest{ +public class TestOsCryptoRandom extends AbstractRandomTest { - @Override - public CryptoRandom getCryptoRandom() { - return new OsCryptoRandom(new Properties()); - } + @Override + public CryptoRandom getCryptoRandom() { + return new OsCryptoRandom(new Properties()); + } } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/stream/AbstractCipherStreamTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/stream/AbstractCipherStreamTest.java b/src/test/java/org/apache/commons/crypto/stream/AbstractCipherStreamTest.java index a89e4d1..feb318d 100644 --- a/src/test/java/org/apache/commons/crypto/stream/AbstractCipherStreamTest.java +++ b/src/test/java/org/apache/commons/crypto/stream/AbstractCipherStreamTest.java @@ -44,416 +44,424 @@ import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public abstract class AbstractCipherStreamTest { - private static final Log LOG= LogFactory.getLog(AbstractCipherStreamTest.class); - - private final int dataLen = 20000; - private byte[] data = new byte[dataLen]; - private byte[] encData; - private Properties props = new Properties(); - protected byte[] key = new byte[16]; - private byte[] iv = new byte[16]; - private int count = 10000; - protected static int defaultBufferSize = 8192; - protected static int smallBufferSize = 1024; - - private final String jceCipherClass = JceCipher.class.getName(); - private final String opensslCipherClass = OpensslCipher.class.getName(); - protected CipherTransformation transformation; - - public abstract void setUp() throws IOException; - - @Before - public void before() throws IOException { - Random random = new SecureRandom(); - random.nextBytes(data); - random.nextBytes(key); - random.nextBytes(iv); - setUp(); - prepareData(); - } - - /** Test skip. */ - @Test(timeout=120000) - public void testSkip() throws Exception { - doSkipTest(jceCipherClass, false); - doSkipTest(opensslCipherClass, false); - - doSkipTest(jceCipherClass, true); - doSkipTest(opensslCipherClass, true); - } - - /** Test byte buffer read with different buffer size. */ - @Test(timeout=120000) - public void testByteBufferRead() throws Exception { - doByteBufferRead(jceCipherClass, false); - doByteBufferRead(opensslCipherClass, false); - - doByteBufferRead(jceCipherClass, true); - doByteBufferRead(opensslCipherClass, true); - } - - /** Test byte buffer write. */ - @Test(timeout=120000) - public void testByteBufferWrite() throws Exception { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - doByteBufferWrite(jceCipherClass, baos, false); - doByteBufferWrite(opensslCipherClass, baos, false); - - doByteBufferWrite(jceCipherClass, baos, true); - doByteBufferWrite(opensslCipherClass, baos, true); - } - - private void doSkipTest(String cipherClass, boolean withChannel) throws IOException { - InputStream in = getCryptoInputStream(new ByteArrayInputStream(encData), - getCipher(cipherClass), defaultBufferSize, iv, withChannel); - byte[] result = new byte[dataLen]; - int n1 = readAll(in, result, 0, dataLen / 3); - - long skipped = in.skip(dataLen / 3); - int n2 = readAll(in, result, 0, dataLen); - - Assert.assertEquals(dataLen, n1 + skipped + n2); - byte[] readData = new byte[n2]; - System.arraycopy(result, 0, readData, 0, n2); - byte[] expectedData = new byte[n2]; - System.arraycopy(data, dataLen - n2, expectedData, 0, n2); - Assert.assertArrayEquals(readData, expectedData); - - try { - skipped = in.skip(-3); - Assert.fail("Skip Negative length should fail."); - } catch (IllegalArgumentException e) { - Assert.assertTrue(e.getMessage().contains("Negative skip length")); + private static final Log LOG = LogFactory + .getLog(AbstractCipherStreamTest.class); + + private final int dataLen = 20000; + private byte[] data = new byte[dataLen]; + private byte[] encData; + private Properties props = new Properties(); + protected byte[] key = new byte[16]; + private byte[] iv = new byte[16]; + private int count = 10000; + protected static int defaultBufferSize = 8192; + protected static int smallBufferSize = 1024; + + private final String jceCipherClass = JceCipher.class.getName(); + private final String opensslCipherClass = OpensslCipher.class.getName(); + protected CipherTransformation transformation; + + public abstract void setUp() throws IOException; + + @Before + public void before() throws IOException { + Random random = new SecureRandom(); + random.nextBytes(data); + random.nextBytes(key); + random.nextBytes(iv); + setUp(); + prepareData(); } - // Skip after EOF - skipped = in.skip(3); - Assert.assertEquals(skipped, 0); - - in.close(); - } - - private void doByteBufferRead(String cipherClass, boolean withChannel) throws Exception { - // Default buffer size, initial buffer position is 0 - InputStream in = getCryptoInputStream(new ByteArrayInputStream(encData), - getCipher(cipherClass), defaultBufferSize, iv, withChannel); - ByteBuffer buf = ByteBuffer.allocate(dataLen + 100); - byteBufferReadCheck(in, buf, 0); - in.close(); - - // Default buffer size, initial buffer position is not 0 - in = getCryptoInputStream(new ByteArrayInputStream(encData), - getCipher(cipherClass), defaultBufferSize, iv, withChannel); - buf.clear(); - byteBufferReadCheck(in, buf, 11); - in.close(); - - // Small buffer size, initial buffer position is 0 - in = getCryptoInputStream(new ByteArrayInputStream(encData), - getCipher(cipherClass), smallBufferSize, iv, withChannel); - buf.clear(); - byteBufferReadCheck(in, buf, 0); - in.close(); - - // Small buffer size, initial buffer position is not 0 - in = getCryptoInputStream(new ByteArrayInputStream(encData), - getCipher(cipherClass), smallBufferSize, iv, withChannel); - buf.clear(); - byteBufferReadCheck(in, buf, 11); - in.close(); - - // Direct buffer, default buffer size, initial buffer position is 0 - in = getCryptoInputStream(new ByteArrayInputStream(encData), - getCipher(cipherClass), defaultBufferSize, iv, withChannel); - buf = ByteBuffer.allocateDirect(dataLen + 100); - byteBufferReadCheck(in, buf, 0); - in.close(); - - // Direct buffer, default buffer size, initial buffer position is not 0 - in = getCryptoInputStream(new ByteArrayInputStream(encData), - getCipher(cipherClass), defaultBufferSize, iv, withChannel); - buf.clear(); - byteBufferReadCheck(in, buf, 11); - in.close(); - - // Direct buffer, small buffer size, initial buffer position is 0 - in = getCryptoInputStream(new ByteArrayInputStream(encData), - getCipher(cipherClass), smallBufferSize, iv, withChannel); - buf.clear(); - byteBufferReadCheck(in, buf, 0); - in.close(); - - // Direct buffer, small buffer size, initial buffer position is not 0 - in = getCryptoInputStream(new ByteArrayInputStream(encData), - getCipher(cipherClass), smallBufferSize, iv, withChannel); - buf.clear(); - byteBufferReadCheck(in, buf, 11); - in.close(); - } - - private void doByteBufferWrite(String cipherClass, ByteArrayOutputStream baos, - boolean withChannel) - throws Exception { - baos.reset(); - CryptoOutputStream out = - getCryptoOutputStream(baos, getCipher(cipherClass), defaultBufferSize, - iv, withChannel); - ByteBuffer buf = ByteBuffer.allocateDirect(dataLen / 2); - buf.put(data, 0, dataLen / 2); - buf.flip(); - int n1 = out.write(buf); - - buf.clear(); - buf.put(data, n1, dataLen / 3); - buf.flip(); - int n2 = out.write(buf); - - buf.clear(); - buf.put(data, n1 + n2, dataLen - n1 - n2); - buf.flip(); - int n3 = out.write(buf); - - Assert.assertEquals(dataLen, n1 + n2 + n3); - - out.flush(); - - InputStream in = getCryptoInputStream(new ByteArrayInputStream(encData), - getCipher(cipherClass), defaultBufferSize, iv, withChannel); - buf = ByteBuffer.allocate(dataLen + 100); - byteBufferReadCheck(in, buf, 0); - in.close(); - } - - private void byteBufferReadCheck(InputStream in, ByteBuffer buf, - int bufPos) throws Exception { - buf.position(bufPos); - int n = ((ReadableByteChannel) in).read(buf); - Assert.assertEquals(bufPos + n, buf.position()); - byte[] readData = new byte[n]; - buf.rewind(); - buf.position(bufPos); - buf.get(readData); - byte[] expectedData = new byte[n]; - System.arraycopy(data, 0, expectedData, 0, n); - Assert.assertArrayEquals(readData, expectedData); - } - - private void prepareData() throws IOException { - CryptoCipher cipher = null; - try { - cipher = (CryptoCipher)ReflectionUtils.newInstance( - ReflectionUtils.getClassByName(jceCipherClass), props, transformation); - } catch (ClassNotFoundException cnfe) { - throw new IOException("Illegal crypto cipher!"); + /** Test skip. */ + @Test(timeout = 120000) + public void testSkip() throws Exception { + doSkipTest(jceCipherClass, false); + doSkipTest(opensslCipherClass, false); + + doSkipTest(jceCipherClass, true); + doSkipTest(opensslCipherClass, true); + } + + /** Test byte buffer read with different buffer size. */ + @Test(timeout = 120000) + public void testByteBufferRead() throws Exception { + doByteBufferRead(jceCipherClass, false); + doByteBufferRead(opensslCipherClass, false); + + doByteBufferRead(jceCipherClass, true); + doByteBufferRead(opensslCipherClass, true); + } + + /** Test byte buffer write. */ + @Test(timeout = 120000) + public void testByteBufferWrite() throws Exception { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + doByteBufferWrite(jceCipherClass, baos, false); + doByteBufferWrite(opensslCipherClass, baos, false); + + doByteBufferWrite(jceCipherClass, baos, true); + doByteBufferWrite(opensslCipherClass, baos, true); + } + + private void doSkipTest(String cipherClass, boolean withChannel) + throws IOException { + InputStream in = getCryptoInputStream( + new ByteArrayInputStream(encData), getCipher(cipherClass), + defaultBufferSize, iv, withChannel); + byte[] result = new byte[dataLen]; + int n1 = readAll(in, result, 0, dataLen / 3); + + long skipped = in.skip(dataLen / 3); + int n2 = readAll(in, result, 0, dataLen); + + Assert.assertEquals(dataLen, n1 + skipped + n2); + byte[] readData = new byte[n2]; + System.arraycopy(result, 0, readData, 0, n2); + byte[] expectedData = new byte[n2]; + System.arraycopy(data, dataLen - n2, expectedData, 0, n2); + Assert.assertArrayEquals(readData, expectedData); + + try { + skipped = in.skip(-3); + Assert.fail("Skip Negative length should fail."); + } catch (IllegalArgumentException e) { + Assert.assertTrue(e.getMessage().contains("Negative skip length")); + } + + // Skip after EOF + skipped = in.skip(3); + Assert.assertEquals(skipped, 0); + + in.close(); } - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - OutputStream out = new CryptoOutputStream(baos, cipher, defaultBufferSize, - new SecretKeySpec(key,"AES"), new IvParameterSpec(iv)); - out.write(data); - out.flush(); - out.close(); - encData = baos.toByteArray(); - } - - protected CryptoInputStream getCryptoInputStream(ByteArrayInputStream bais, - CryptoCipher cipher, - int bufferSize, byte[] iv, - boolean withChannel) throws - IOException { - if (withChannel) { - return new CryptoInputStream(Channels.newChannel(bais), cipher, - bufferSize, new SecretKeySpec(key,"AES"), new IvParameterSpec(iv)); - } else { - return new CryptoInputStream(bais, cipher, bufferSize, - new SecretKeySpec(key,"AES"), new IvParameterSpec(iv)); + private void doByteBufferRead(String cipherClass, boolean withChannel) + throws Exception { + // Default buffer size, initial buffer position is 0 + InputStream in = getCryptoInputStream( + new ByteArrayInputStream(encData), getCipher(cipherClass), + defaultBufferSize, iv, withChannel); + ByteBuffer buf = ByteBuffer.allocate(dataLen + 100); + byteBufferReadCheck(in, buf, 0); + in.close(); + + // Default buffer size, initial buffer position is not 0 + in = getCryptoInputStream(new ByteArrayInputStream(encData), + getCipher(cipherClass), defaultBufferSize, iv, withChannel); + buf.clear(); + byteBufferReadCheck(in, buf, 11); + in.close(); + + // Small buffer size, initial buffer position is 0 + in = getCryptoInputStream(new ByteArrayInputStream(encData), + getCipher(cipherClass), smallBufferSize, iv, withChannel); + buf.clear(); + byteBufferReadCheck(in, buf, 0); + in.close(); + + // Small buffer size, initial buffer position is not 0 + in = getCryptoInputStream(new ByteArrayInputStream(encData), + getCipher(cipherClass), smallBufferSize, iv, withChannel); + buf.clear(); + byteBufferReadCheck(in, buf, 11); + in.close(); + + // Direct buffer, default buffer size, initial buffer position is 0 + in = getCryptoInputStream(new ByteArrayInputStream(encData), + getCipher(cipherClass), defaultBufferSize, iv, withChannel); + buf = ByteBuffer.allocateDirect(dataLen + 100); + byteBufferReadCheck(in, buf, 0); + in.close(); + + // Direct buffer, default buffer size, initial buffer position is not 0 + in = getCryptoInputStream(new ByteArrayInputStream(encData), + getCipher(cipherClass), defaultBufferSize, iv, withChannel); + buf.clear(); + byteBufferReadCheck(in, buf, 11); + in.close(); + + // Direct buffer, small buffer size, initial buffer position is 0 + in = getCryptoInputStream(new ByteArrayInputStream(encData), + getCipher(cipherClass), smallBufferSize, iv, withChannel); + buf.clear(); + byteBufferReadCheck(in, buf, 0); + in.close(); + + // Direct buffer, small buffer size, initial buffer position is not 0 + in = getCryptoInputStream(new ByteArrayInputStream(encData), + getCipher(cipherClass), smallBufferSize, iv, withChannel); + buf.clear(); + byteBufferReadCheck(in, buf, 11); + in.close(); } - } - - protected CryptoOutputStream getCryptoOutputStream(ByteArrayOutputStream baos, - CryptoCipher cipher, - int bufferSize, byte[] iv, - boolean withChannel) throws - IOException { - if (withChannel) { - return new CryptoOutputStream(Channels.newChannel(baos), cipher, - bufferSize, new SecretKeySpec(key,"AES"), new IvParameterSpec(iv)); - } else { - return new CryptoOutputStream(baos, cipher, bufferSize, - new SecretKeySpec(key,"AES"), new IvParameterSpec(iv)); + + private void doByteBufferWrite(String cipherClass, + ByteArrayOutputStream baos, boolean withChannel) throws Exception { + baos.reset(); + CryptoOutputStream out = getCryptoOutputStream(baos, + getCipher(cipherClass), defaultBufferSize, iv, withChannel); + ByteBuffer buf = ByteBuffer.allocateDirect(dataLen / 2); + buf.put(data, 0, dataLen / 2); + buf.flip(); + int n1 = out.write(buf); + + buf.clear(); + buf.put(data, n1, dataLen / 3); + buf.flip(); + int n2 = out.write(buf); + + buf.clear(); + buf.put(data, n1 + n2, dataLen - n1 - n2); + buf.flip(); + int n3 = out.write(buf); + + Assert.assertEquals(dataLen, n1 + n2 + n3); + + out.flush(); + + InputStream in = getCryptoInputStream( + new ByteArrayInputStream(encData), getCipher(cipherClass), + defaultBufferSize, iv, withChannel); + buf = ByteBuffer.allocate(dataLen + 100); + byteBufferReadCheck(in, buf, 0); + in.close(); } - } - - private int readAll(InputStream in, byte[] b, int offset, int len) - throws IOException { - int n = 0; - int total = 0; - while (n != -1) { - total += n; - if (total >= len) { - break; - } - n = in.read(b, offset + total, len - total); + + private void byteBufferReadCheck(InputStream in, ByteBuffer buf, int bufPos) + throws Exception { + buf.position(bufPos); + int n = ((ReadableByteChannel) in).read(buf); + Assert.assertEquals(bufPos + n, buf.position()); + byte[] readData = new byte[n]; + buf.rewind(); + buf.position(bufPos); + buf.get(readData); + byte[] expectedData = new byte[n]; + System.arraycopy(data, 0, expectedData, 0, n); + Assert.assertArrayEquals(readData, expectedData); } - return total; - } + private void prepareData() throws IOException { + CryptoCipher cipher = null; + try { + cipher = (CryptoCipher) ReflectionUtils.newInstance( + ReflectionUtils.getClassByName(jceCipherClass), props, + transformation); + } catch (ClassNotFoundException cnfe) { + throw new IOException("Illegal crypto cipher!"); + } + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + OutputStream out = new CryptoOutputStream(baos, cipher, + defaultBufferSize, new SecretKeySpec(key, "AES"), + new IvParameterSpec(iv)); + out.write(data); + out.flush(); + out.close(); + encData = baos.toByteArray(); + } - protected CryptoCipher getCipher(String cipherClass) throws IOException { - try { - return (CryptoCipher)ReflectionUtils.newInstance( - ReflectionUtils.getClassByName(cipherClass), props, transformation); - } catch (ClassNotFoundException cnfe) { - throw new IOException("Illegal crypto cipher!"); + protected CryptoInputStream getCryptoInputStream(ByteArrayInputStream bais, + CryptoCipher cipher, int bufferSize, byte[] iv, boolean withChannel) + throws IOException { + if (withChannel) { + return new CryptoInputStream(Channels.newChannel(bais), cipher, + bufferSize, new SecretKeySpec(key, "AES"), + new IvParameterSpec(iv)); + } else { + return new CryptoInputStream(bais, cipher, bufferSize, + new SecretKeySpec(key, "AES"), new IvParameterSpec(iv)); + } } - } - - @Test - public void testReadWrite() throws Exception { - Assert.assertEquals(null, Openssl.getLoadingFailureReason()); - doReadWriteTest(0, jceCipherClass, jceCipherClass, iv); - doReadWriteTest(0, opensslCipherClass, opensslCipherClass, iv); - doReadWriteTest(count, jceCipherClass, jceCipherClass, iv); - doReadWriteTest(count, opensslCipherClass, opensslCipherClass, iv); - doReadWriteTest(count, jceCipherClass, opensslCipherClass, iv); - doReadWriteTest(count, opensslCipherClass, jceCipherClass, iv); - // Overflow test, IV: xx xx xx xx xx xx xx xx ff ff ff ff ff ff ff ff - for(int i = 0; i < 8; i++) { - iv[8 + i] = (byte) 0xff; + + protected CryptoOutputStream getCryptoOutputStream( + ByteArrayOutputStream baos, CryptoCipher cipher, int bufferSize, + byte[] iv, boolean withChannel) throws IOException { + if (withChannel) { + return new CryptoOutputStream(Channels.newChannel(baos), cipher, + bufferSize, new SecretKeySpec(key, "AES"), + new IvParameterSpec(iv)); + } else { + return new CryptoOutputStream(baos, cipher, bufferSize, + new SecretKeySpec(key, "AES"), new IvParameterSpec(iv)); + } } - doReadWriteTest(count, jceCipherClass, jceCipherClass, iv); - doReadWriteTest(count, opensslCipherClass, opensslCipherClass, iv); - doReadWriteTest(count, jceCipherClass, opensslCipherClass, iv); - doReadWriteTest(count, opensslCipherClass, jceCipherClass, iv); - } - - private void doReadWriteTest(int count, String encCipherClass, - String decCipherClass, byte[] iv) throws IOException { - doReadWriteTestForInputStream(count, encCipherClass, decCipherClass, iv); - doReadWriteTestForReadableByteChannel(count, encCipherClass, decCipherClass, - iv); - } - - private void doReadWriteTestForInputStream(int count, String encCipherClass, - String decCipherClass, byte[] iv) throws IOException { - CryptoCipher encCipher = getCipher(encCipherClass); - LOG.debug("Created a cipher object of type: " + encCipherClass); - - // Generate data - SecureRandom random = new SecureRandom(); - byte[] originalData = new byte[count]; - byte[] decryptedData = new byte[count]; - random.nextBytes(originalData); - LOG.debug("Generated " + count + " records"); - - // Encrypt data - ByteArrayOutputStream encryptedData = new ByteArrayOutputStream(); - CryptoOutputStream out = - getCryptoOutputStream(encryptedData, encCipher, defaultBufferSize, iv, - false); - out.write(originalData, 0, originalData.length); - out.flush(); - out.close(); - LOG.debug("Finished encrypting data"); - - CryptoCipher decCipher = getCipher(decCipherClass); - LOG.debug("Created a cipher object of type: " + decCipherClass); - - // Decrypt data - CryptoInputStream in = getCryptoInputStream( - new ByteArrayInputStream(encryptedData.toByteArray()), decCipher, - defaultBufferSize, iv, false); - - // Check - int remainingToRead = count; - int offset = 0; - while (remainingToRead > 0) { - int n = in.read(decryptedData, offset, decryptedData.length - offset); - if (n >=0) { - remainingToRead -= n; - offset += n; - } + + private int readAll(InputStream in, byte[] b, int offset, int len) + throws IOException { + int n = 0; + int total = 0; + while (n != -1) { + total += n; + if (total >= len) { + break; + } + n = in.read(b, offset + total, len - total); + } + + return total; } - Assert.assertArrayEquals("originalData and decryptedData not equal", - originalData, decryptedData); - - // Decrypt data byte-at-a-time - in = getCryptoInputStream( - new ByteArrayInputStream(encryptedData.toByteArray()), decCipher, - defaultBufferSize, iv, false); - - // Check - DataInputStream originalIn = new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(originalData))); - int expected; - do { - expected = originalIn.read(); - Assert.assertEquals("Decrypted stream read by byte does not match", - expected, in.read()); - } while (expected != -1); - - LOG.debug("SUCCESS! Completed checking " + count + " records"); - } - - private void doReadWriteTestForReadableByteChannel(int count, - String encCipherClass, - String decCipherClass, - byte[] iv) throws IOException { - CryptoCipher encCipher = getCipher(encCipherClass); - LOG.debug("Created a cipher object of type: " + encCipherClass); - - // Generate data - SecureRandom random = new SecureRandom(); - byte[] originalData = new byte[count]; - byte[] decryptedData = new byte[count]; - random.nextBytes(originalData); - LOG.debug("Generated " + count + " records"); - - // Encrypt data - ByteArrayOutputStream encryptedData = new ByteArrayOutputStream(); - CryptoOutputStream out = - getCryptoOutputStream(encryptedData, encCipher, defaultBufferSize, iv, - true); - out.write(originalData, 0, originalData.length); - out.flush(); - out.close(); - LOG.debug("Finished encrypting data"); - - CryptoCipher decCipher = getCipher(decCipherClass); - LOG.debug("Created a cipher object of type: " + decCipherClass); - - // Decrypt data - CryptoInputStream in = getCryptoInputStream( - new ByteArrayInputStream(encryptedData.toByteArray()), decCipher, - defaultBufferSize, iv, true); - - // Check - int remainingToRead = count; - int offset = 0; - while (remainingToRead > 0) { - int n = in.read(decryptedData, offset, decryptedData.length - offset); - if (n >=0) { - remainingToRead -= n; - offset += n; - } + protected CryptoCipher getCipher(String cipherClass) throws IOException { + try { + return (CryptoCipher) ReflectionUtils.newInstance( + ReflectionUtils.getClassByName(cipherClass), props, + transformation); + } catch (ClassNotFoundException cnfe) { + throw new IOException("Illegal crypto cipher!"); + } } - Assert.assertArrayEquals("originalData and decryptedData not equal", - originalData, decryptedData); + @Test + public void testReadWrite() throws Exception { + Assert.assertEquals(null, Openssl.getLoadingFailureReason()); + doReadWriteTest(0, jceCipherClass, jceCipherClass, iv); + doReadWriteTest(0, opensslCipherClass, opensslCipherClass, iv); + doReadWriteTest(count, jceCipherClass, jceCipherClass, iv); + doReadWriteTest(count, opensslCipherClass, opensslCipherClass, iv); + doReadWriteTest(count, jceCipherClass, opensslCipherClass, iv); + doReadWriteTest(count, opensslCipherClass, jceCipherClass, iv); + // Overflow test, IV: xx xx xx xx xx xx xx xx ff ff ff ff ff ff ff ff + for (int i = 0; i < 8; i++) { + iv[8 + i] = (byte) 0xff; + } + doReadWriteTest(count, jceCipherClass, jceCipherClass, iv); + doReadWriteTest(count, opensslCipherClass, opensslCipherClass, iv); + doReadWriteTest(count, jceCipherClass, opensslCipherClass, iv); + doReadWriteTest(count, opensslCipherClass, jceCipherClass, iv); + } - // Decrypt data byte-at-a-time - in = getCryptoInputStream(new ByteArrayInputStream( - encryptedData.toByteArray()),decCipher,defaultBufferSize,iv,true); + private void doReadWriteTest(int count, String encCipherClass, + String decCipherClass, byte[] iv) throws IOException { + doReadWriteTestForInputStream(count, encCipherClass, decCipherClass, iv); + doReadWriteTestForReadableByteChannel(count, encCipherClass, + decCipherClass, iv); + } - // Check - DataInputStream originalIn = new DataInputStream(new BufferedInputStream(new ByteArrayInputStream(originalData))); - int expected; - do { - expected = originalIn.read(); - Assert.assertEquals("Decrypted stream read by byte does not match", - expected, in.read()); - } while (expected != -1); + private void doReadWriteTestForInputStream(int count, + String encCipherClass, String decCipherClass, byte[] iv) + throws IOException { + CryptoCipher encCipher = getCipher(encCipherClass); + LOG.debug("Created a cipher object of type: " + encCipherClass); + + // Generate data + SecureRandom random = new SecureRandom(); + byte[] originalData = new byte[count]; + byte[] decryptedData = new byte[count]; + random.nextBytes(originalData); + LOG.debug("Generated " + count + " records"); + + // Encrypt data + ByteArrayOutputStream encryptedData = new ByteArrayOutputStream(); + CryptoOutputStream out = getCryptoOutputStream(encryptedData, + encCipher, defaultBufferSize, iv, false); + out.write(originalData, 0, originalData.length); + out.flush(); + out.close(); + LOG.debug("Finished encrypting data"); + + CryptoCipher decCipher = getCipher(decCipherClass); + LOG.debug("Created a cipher object of type: " + decCipherClass); + + // Decrypt data + CryptoInputStream in = getCryptoInputStream(new ByteArrayInputStream( + encryptedData.toByteArray()), decCipher, defaultBufferSize, iv, + false); + + // Check + int remainingToRead = count; + int offset = 0; + while (remainingToRead > 0) { + int n = in.read(decryptedData, offset, decryptedData.length + - offset); + if (n >= 0) { + remainingToRead -= n; + offset += n; + } + } + + Assert.assertArrayEquals("originalData and decryptedData not equal", + originalData, decryptedData); + + // Decrypt data byte-at-a-time + in = getCryptoInputStream( + new ByteArrayInputStream(encryptedData.toByteArray()), + decCipher, defaultBufferSize, iv, false); + + // Check + DataInputStream originalIn = new DataInputStream( + new BufferedInputStream(new ByteArrayInputStream(originalData))); + int expected; + do { + expected = originalIn.read(); + Assert.assertEquals("Decrypted stream read by byte does not match", + expected, in.read()); + } while (expected != -1); + + LOG.debug("SUCCESS! Completed checking " + count + " records"); + } - LOG.debug("SUCCESS! Completed checking " + count + " records"); - } + private void doReadWriteTestForReadableByteChannel(int count, + String encCipherClass, String decCipherClass, byte[] iv) + throws IOException { + CryptoCipher encCipher = getCipher(encCipherClass); + LOG.debug("Created a cipher object of type: " + encCipherClass); + + // Generate data + SecureRandom random = new SecureRandom(); + byte[] originalData = new byte[count]; + byte[] decryptedData = new byte[count]; + random.nextBytes(originalData); + LOG.debug("Generated " + count + " records"); + + // Encrypt data + ByteArrayOutputStream encryptedData = new ByteArrayOutputStream(); + CryptoOutputStream out = getCryptoOutputStream(encryptedData, + encCipher, defaultBufferSize, iv, true); + out.write(originalData, 0, originalData.length); + out.flush(); + out.close(); + LOG.debug("Finished encrypting data"); + + CryptoCipher decCipher = getCipher(decCipherClass); + LOG.debug("Created a cipher object of type: " + decCipherClass); + + // Decrypt data + CryptoInputStream in = getCryptoInputStream(new ByteArrayInputStream( + encryptedData.toByteArray()), decCipher, defaultBufferSize, iv, + true); + + // Check + int remainingToRead = count; + int offset = 0; + while (remainingToRead > 0) { + int n = in.read(decryptedData, offset, decryptedData.length + - offset); + if (n >= 0) { + remainingToRead -= n; + offset += n; + } + } + + Assert.assertArrayEquals("originalData and decryptedData not equal", + originalData, decryptedData); + + // Decrypt data byte-at-a-time + in = getCryptoInputStream( + new ByteArrayInputStream(encryptedData.toByteArray()), + decCipher, defaultBufferSize, iv, true); + + // Check + DataInputStream originalIn = new DataInputStream( + new BufferedInputStream(new ByteArrayInputStream(originalData))); + int expected; + do { + expected = originalIn.read(); + Assert.assertEquals("Decrypted stream read by byte does not match", + expected, in.read()); + } while (expected != -1); + + LOG.debug("SUCCESS! Completed checking " + count + " records"); + } } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/stream/CBCNoPaddingCipherStreamTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/stream/CBCNoPaddingCipherStreamTest.java b/src/test/java/org/apache/commons/crypto/stream/CBCNoPaddingCipherStreamTest.java index 3b4c66e..fcf569d 100644 --- a/src/test/java/org/apache/commons/crypto/stream/CBCNoPaddingCipherStreamTest.java +++ b/src/test/java/org/apache/commons/crypto/stream/CBCNoPaddingCipherStreamTest.java @@ -23,10 +23,9 @@ import org.apache.commons.crypto.cipher.CipherTransformation; public class CBCNoPaddingCipherStreamTest extends AbstractCipherStreamTest { - @Override -public void setUp() throws IOException { - transformation = CipherTransformation - .AES_CBC_NOPADDING; - } + @Override + public void setUp() throws IOException { + transformation = CipherTransformation.AES_CBC_NOPADDING; + } } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/stream/CBCPKCS5PaddingCipherStreamTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/stream/CBCPKCS5PaddingCipherStreamTest.java b/src/test/java/org/apache/commons/crypto/stream/CBCPKCS5PaddingCipherStreamTest.java index c605a3b..830b970 100644 --- a/src/test/java/org/apache/commons/crypto/stream/CBCPKCS5PaddingCipherStreamTest.java +++ b/src/test/java/org/apache/commons/crypto/stream/CBCPKCS5PaddingCipherStreamTest.java @@ -23,9 +23,8 @@ import org.apache.commons.crypto.cipher.CipherTransformation; public class CBCPKCS5PaddingCipherStreamTest extends AbstractCipherStreamTest { - @Override -public void setUp() throws IOException { - transformation = CipherTransformation - .AES_CBC_PKCS5PADDING; - } + @Override + public void setUp() throws IOException { + transformation = CipherTransformation.AES_CBC_PKCS5PADDING; + } } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/stream/CTRCryptoStreamTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/stream/CTRCryptoStreamTest.java b/src/test/java/org/apache/commons/crypto/stream/CTRCryptoStreamTest.java index 0953196..ad8220b 100644 --- a/src/test/java/org/apache/commons/crypto/stream/CTRCryptoStreamTest.java +++ b/src/test/java/org/apache/commons/crypto/stream/CTRCryptoStreamTest.java @@ -27,33 +27,32 @@ import org.apache.commons.crypto.cipher.CipherTransformation; public class CTRCryptoStreamTest extends AbstractCipherStreamTest { - @Override -public void setUp() throws IOException { - transformation = CipherTransformation - .AES_CTR_NOPADDING; - } + @Override + public void setUp() throws IOException { + transformation = CipherTransformation.AES_CTR_NOPADDING; + } - @Override - protected CTRCryptoInputStream getCryptoInputStream - (ByteArrayInputStream bais, CryptoCipher cipher, int - bufferSize, byte[] iv, boolean withChannel) - throws IOException { - if (withChannel) { - return new CTRCryptoInputStream(Channels.newChannel(bais), cipher, - bufferSize, key, iv); - } else { - return new CTRCryptoInputStream(bais, cipher, bufferSize, key, iv); + @Override + protected CTRCryptoInputStream getCryptoInputStream( + ByteArrayInputStream bais, CryptoCipher cipher, int bufferSize, + byte[] iv, boolean withChannel) throws IOException { + if (withChannel) { + return new CTRCryptoInputStream(Channels.newChannel(bais), cipher, + bufferSize, key, iv); + } else { + return new CTRCryptoInputStream(bais, cipher, bufferSize, key, iv); + } } - } - @Override - protected CTRCryptoOutputStream getCryptoOutputStream(ByteArrayOutputStream baos, CryptoCipher cipher, - int bufferSize, byte[] iv, boolean withChannel) - throws IOException { - if (withChannel) { - return new CTRCryptoOutputStream(Channels.newChannel(baos), cipher, bufferSize, key, iv); - } else { - return new CTRCryptoOutputStream(baos, cipher, bufferSize, key, iv); + @Override + protected CTRCryptoOutputStream getCryptoOutputStream( + ByteArrayOutputStream baos, CryptoCipher cipher, int bufferSize, + byte[] iv, boolean withChannel) throws IOException { + if (withChannel) { + return new CTRCryptoOutputStream(Channels.newChannel(baos), cipher, + bufferSize, key, iv); + } else { + return new CTRCryptoOutputStream(baos, cipher, bufferSize, key, iv); + } } - } } http://git-wip-us.apache.org/repos/asf/commons-crypto/blob/95a8d486/src/test/java/org/apache/commons/crypto/stream/CTRNoPaddingCipherStreamTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/crypto/stream/CTRNoPaddingCipherStreamTest.java b/src/test/java/org/apache/commons/crypto/stream/CTRNoPaddingCipherStreamTest.java index dc9907f..2638a39 100644 --- a/src/test/java/org/apache/commons/crypto/stream/CTRNoPaddingCipherStreamTest.java +++ b/src/test/java/org/apache/commons/crypto/stream/CTRNoPaddingCipherStreamTest.java @@ -23,10 +23,9 @@ import org.apache.commons.crypto.cipher.CipherTransformation; public class CTRNoPaddingCipherStreamTest extends AbstractCipherStreamTest { - @Override -public void setUp() throws IOException { - transformation = CipherTransformation - .AES_CTR_NOPADDING; - } + @Override + public void setUp() throws IOException { + transformation = CipherTransformation.AES_CTR_NOPADDING; + } }