/* * jPOS Project [http://jpos.org] * Copyright (C) 2000-2017 jPOS Software SRL * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.jpos.security.jceadapter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import java.security.Key; import java.security.Provider; import javax.crypto.spec.SecretKeySpec; import org.junit.Before; import org.junit.Test; public class JCEHandlerTest { private JCEHandler jCEHandler; private Provider provider; @Before public void onSetup() { provider = mock(Provider.class); jCEHandler = new JCEHandler(provider); } @Test public void testConstructor() throws Throwable { assertEquals("jCEHandler.desPadding", "NoPadding", JCEHandler.DES_NO_PADDING); assertEquals("jCEHandler.desMode", "ECB", JCEHandler.DES_MODE_ECB); assertSame("jCEHandler.provider", provider, jCEHandler.provider); } @Test public void testConstructorThrowsJCEHandlerException() throws Throwable { try { new JCEHandler("testJCEHandlerJceProviderClassName"); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "java.lang.ClassNotFoundException: testJCEHandlerJceProviderClassName", ex.getMessage()); assertEquals("ex.getNested().getMessage()", "testJCEHandlerJceProviderClassName", ex.getNested().getMessage()); } } @Test public void testDecryptDataThrowsJCEHandlerException() throws Throwable { jCEHandler = new JCEHandler((Provider) null); byte[] clearKeyBytes = new byte[1]; Key key = jCEHandler.formDESKey((short) 192, clearKeyBytes); byte[] encryptedData = new byte[0]; try { jCEHandler.decryptData(encryptedData, key); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "java.lang.NullPointerException", ex.getMessage()); assertNull("ex.getNested().getMessage()", ex.getNested().getMessage()); assertEquals("(SecretKeySpec) key.getAlgorithm()", "DESede", key.getAlgorithm()); } } @Test public void testDecryptDataThrowsNullPointerException() throws Throwable { try { new JCEHandler((Provider) null).decryptData("testString".getBytes(), null); fail("Expected NullPointerException to be thrown"); } catch (NullPointerException ex) { assertNull("ex.getMessage()", ex.getMessage()); } } @Test public void testDecryptDESKeyThrowsJCEHandlerException() throws Throwable { jCEHandler = new JCEHandler((Provider) null); JCEHandler jCEHandler2 = new JCEHandler((Provider) null); byte[] clearKeyBytes = new byte[1]; Key encryptingKey = jCEHandler2.formDESKey((short) 192, clearKeyBytes); byte[] encryptedDESKey = new byte[3]; try { jCEHandler.decryptDESKey((short) 100, encryptedDESKey, encryptingKey, true); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "java.lang.NullPointerException", ex.getMessage()); assertNull("ex.getNested().getMessage()", ex.getNested().getMessage()); assertEquals("(SecretKeySpec) encryptingKey.getAlgorithm()", "DESede", encryptingKey.getAlgorithm()); } } @Test public void testDecryptDESKeyThrowsNullPointerException() throws Throwable { byte[] encryptedDESKey = new byte[2]; try { new JCEHandler((Provider) null).decryptDESKey((short) 100, encryptedDESKey, null, true); fail("Expected NullPointerException to be thrown"); } catch (NullPointerException ex) { assertNull("ex.getMessage()", ex.getMessage()); } } @Test public void testDoCryptStuffThrowsJCEHandlerException() throws Throwable { jCEHandler = new JCEHandler((Provider) null); byte[] bytes = new byte[1]; Key key = new SecretKeySpec(bytes, "testJCEHandlerParam2"); byte[] data = new byte[3]; try { jCEHandler.doCryptStuff(data, key, 100); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "java.lang.NullPointerException", ex.getMessage()); assertNull("ex.getNested().getMessage()", ex.getNested().getMessage()); assertEquals("(SecretKeySpec) key.getAlgorithm()", "testJCEHandlerParam2", key.getAlgorithm()); } } @Test public void testDoCryptStuffThrowsJCEHandlerException1() throws Throwable { byte[] clearKeyBytes = new byte[1]; Key key = jCEHandler.formDESKey((short) 192, clearKeyBytes); JCEHandler jCEHandler2 = new JCEHandler((Provider) null); byte[] data = new byte[3]; try { jCEHandler2.doCryptStuff(data, key, 100); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "java.lang.NullPointerException", ex.getMessage()); assertNull("ex.getNested().getMessage()", ex.getNested().getMessage()); assertEquals("(SecretKeySpec) key.getAlgorithm()", "DESede", key.getAlgorithm()); } } @Test public void testDoCryptStuffThrowsNullPointerException() throws Throwable { byte[] data = new byte[4]; try { jCEHandler.doCryptStuff(data, null, 100); fail("Expected NullPointerException to be thrown"); } catch (NullPointerException ex) { assertNull("ex.getMessage()", ex.getMessage()); } } @Test public void testEncryptDataThrowsJCEHandlerException() throws Throwable { jCEHandler = new JCEHandler((Provider) null); JCEHandler jCEHandler2 = new JCEHandler((Provider) null); byte[] clearKeyBytes = new byte[1]; Key key = jCEHandler2.formDESKey((short) 192, clearKeyBytes); byte[] data = new byte[1]; try { jCEHandler.encryptData(data, key); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "java.lang.NullPointerException", ex.getMessage()); assertNull("ex.getNested().getMessage()", ex.getNested().getMessage()); assertEquals("(SecretKeySpec) key.getAlgorithm()", "DESede", key.getAlgorithm()); } } @Test public void testEncryptDataThrowsNullPointerException() throws Throwable { byte[] data = new byte[1]; try { new JCEHandler((Provider) null).encryptData(data, null); fail("Expected NullPointerException to be thrown"); } catch (NullPointerException ex) { assertNull("ex.getMessage()", ex.getMessage()); } } @Test public void testEncryptDESKeyThrowsArrayIndexOutOfBoundsException() throws Throwable { byte[] bytes = new byte[3]; Key clearDESKey = new SecretKeySpec(bytes, 0, 1, "DESde"); byte[] bytes2 = new byte[1]; Key encryptingKey = new SecretKeySpec(bytes2, "testJCEHandlerParam2"); try { new JCEHandler((Provider) null).encryptDESKey((short) 64, clearDESKey, encryptingKey); fail("Expected ArrayIndexOutOfBoundsException to be thrown"); } catch (ArrayIndexOutOfBoundsException ex) { assertNull("ex.getMessage()", ex.getMessage()); assertEquals("(SecretKeySpec) clearDESKey.getAlgorithm()", "DESde", clearDESKey.getAlgorithm()); assertEquals("(SecretKeySpec) encryptingKey.getAlgorithm()", "testJCEHandlerParam2", encryptingKey.getAlgorithm()); } } @Test public void testEncryptDESKeyThrowsJCEHandlerException() throws Throwable { byte[] clearKeyBytes = new byte[1]; Key clearDESKey = jCEHandler.formDESKey((short) 192, clearKeyBytes); try { new JCEHandler((Provider) null).encryptDESKey((short) 100, clearDESKey, clearDESKey); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "Unsupported key length: 100 bits", ex.getMessage()); assertNull("ex.getNested()", ex.getNested()); assertEquals("(SecretKeySpec) clearDESKey.getAlgorithm()", "DESede", clearDESKey.getAlgorithm()); } } @Test public void testEncryptDESKeyThrowsNullPointerException() throws Throwable { byte[] bytes = new byte[1]; Key encryptingKey = new SecretKeySpec(bytes, "testJCEHandlerParam2"); try { new JCEHandler((Provider) null).encryptDESKey((short) 100, null, encryptingKey); fail("Expected NullPointerException to be thrown"); } catch (NullPointerException ex) { assertNull("ex.getMessage()", ex.getMessage()); assertEquals("(SecretKeySpec) encryptingKey.getAlgorithm()", "testJCEHandlerParam2", encryptingKey.getAlgorithm()); } } @Test public void testExtractDESKeyMaterialThrowsArrayIndexOutOfBoundsException() throws Throwable { byte[] clearKeyBytes = new byte[1]; Key clearDESKey = jCEHandler.formDESKey((short) 192, clearKeyBytes); JCEHandler jCEHandler2 = new JCEHandler((Provider) null); try { jCEHandler2.extractDESKeyMaterial((short) 128, clearDESKey); fail("Expected ArrayIndexOutOfBoundsException to be thrown"); } catch (ArrayIndexOutOfBoundsException ex) { assertNull("ex.getMessage()", ex.getMessage()); assertEquals("(SecretKeySpec) clearDESKey.getAlgorithm()", "DESede", clearDESKey.getAlgorithm()); } } @Test public void testExtractDESKeyMaterialThrowsJCEHandlerException() throws Throwable { JCEHandler jCEHandler2 = new JCEHandler((Provider) null); byte[] clearKeyBytes = new byte[1]; Key clearDESKey = jCEHandler.formDESKey((short) 192, clearKeyBytes); try { jCEHandler2.extractDESKeyMaterial((short) 100, clearDESKey); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "Unsupported key length: 100 bits", ex.getMessage()); assertNull("ex.getNested()", ex.getNested()); assertEquals("(SecretKeySpec) clearDESKey.getAlgorithm()", "DESede", clearDESKey.getAlgorithm()); } } @Test public void testExtractDESKeyMaterialThrowsJCEHandlerException1() throws Throwable { byte[] bytes = new byte[1]; Key clearDESKey = new SecretKeySpec(bytes, "testJCEHandlerParam2"); try { jCEHandler.extractDESKeyMaterial((short) 100, clearDESKey); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "Unsupported key algorithm: testJCEHandlerParam2", ex.getMessage()); assertNull("ex.getNested()", ex.getNested()); assertEquals("(SecretKeySpec) clearDESKey.getAlgorithm()", "testJCEHandlerParam2", clearDESKey.getAlgorithm()); } } @Test public void testExtractDESKeyMaterialThrowsNullPointerException() throws Throwable { try { jCEHandler.extractDESKeyMaterial((short) 100, null); fail("Expected NullPointerException to be thrown"); } catch (NullPointerException ex) { assertNull("ex.getMessage()", ex.getMessage()); } } @Test public void testFormDESKey() throws Throwable { byte[] clearKeyBytes = new byte[4]; SecretKeySpec result = (SecretKeySpec) jCEHandler.formDESKey((short) 64, clearKeyBytes); assertEquals("result.getAlgorithm()", "DES", result.getAlgorithm()); } @Test public void testFormDESKey1() throws Throwable { byte[] clearKeyBytes = new byte[1]; SecretKeySpec result = (SecretKeySpec) jCEHandler.formDESKey((short) 192, clearKeyBytes); assertEquals("result.getAlgorithm()", "DESede", result.getAlgorithm()); } @Test public void testFormDESKeyThrowsArrayIndexOutOfBoundsException() throws Throwable { byte[] clearKeyBytes = new byte[1]; try { jCEHandler.formDESKey((short) 128, clearKeyBytes); fail("Expected ArrayIndexOutOfBoundsException to be thrown"); } catch (ArrayIndexOutOfBoundsException ex) { assertNull("ex.getMessage()", ex.getMessage()); } } @Test public void testFormDESKeyThrowsIllegalArgumentException() throws Throwable { byte[] clearKeyBytes = new byte[0]; try { jCEHandler.formDESKey((short) 192, clearKeyBytes); fail("Expected IllegalArgumentException to be thrown"); } catch (IllegalArgumentException ex) { assertEquals("ex.getMessage()", "Empty key", ex.getMessage()); } } @Test public void testFormDESKeyThrowsIllegalArgumentException1() throws Throwable { byte[] clearKeyBytes = new byte[0]; try { jCEHandler.formDESKey((short) 64, clearKeyBytes); fail("Expected IllegalArgumentException to be thrown"); } catch (IllegalArgumentException ex) { assertEquals("ex.getMessage()", "Empty key", ex.getMessage()); } } @Test public void testFormDESKeyThrowsJCEHandlerException() throws Throwable { byte[] clearKeyBytes = new byte[1]; try { jCEHandler.formDESKey((short) 100, clearKeyBytes); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "Unsupported DES key length: 100 bits", ex.getMessage()); assertNull("ex.getNested()", ex.getNested()); } } @Test public void testGenerateDESKeyThrowsJCEHandlerException() throws Throwable { try { new JCEHandler((Provider) null).generateDESKey((short) 63); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "java.lang.NullPointerException", ex.getMessage()); assertNull("ex.getNested().getMessage()", ex.getNested().getMessage()); } } @Test public void testGenerateDESKeyThrowsJCEHandlerException1() throws Throwable { try { new JCEHandler((Provider) null).generateDESKey((short) 64); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "java.lang.NullPointerException", ex.getMessage()); assertNull("ex.getNested().getMessage()", ex.getNested().getMessage()); } } @Test public void testGenerateDESKeyThrowsJCEHandlerException2() throws Throwable { try { new JCEHandler((Provider) null).generateDESKey((short) 65); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "java.lang.NullPointerException", ex.getMessage()); assertNull("ex.getNested().getMessage()", ex.getNested().getMessage()); } } @Test public void testGetBytesLength() throws Throwable { jCEHandler.getBytesLength((short) 128); assertTrue("Test completed without Exception", true); } @Test public void testGetBytesLength1() throws Throwable { jCEHandler.getBytesLength((short) 192); assertTrue("Test completed without Exception", true); } @Test public void testGetBytesLength2() throws Throwable { int result = jCEHandler.getBytesLength((short) 64); assertEquals("result", 8, result); } @Test public void testGetBytesLengthThrowsJCEHandlerException() throws Throwable { try { jCEHandler.getBytesLength((short) 100); fail("Expected JCEHandlerException to be thrown"); } catch (JCEHandlerException ex) { assertEquals("ex.getMessage()", "Unsupported key length: 100 bits", ex.getMessage()); assertNull("ex.getNested()", ex.getNested()); } } }