1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Vera Y. Petrashkova 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.crypto.tests.javax.crypto; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Key; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SecureRandom; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.InvalidKeySpecException; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.spec.KeySpec; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.KeyGenerator; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.SecretKey; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.SecretKeyFactory; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.SecretKeyFactorySpi; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.spec.DESKeySpec; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.spec.DESedeKeySpec; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.crypto.spec.SecretKeySpec; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.crypto.tests.support.MySecretKeyFactorySpi; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.SpiEngUtils; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>SecretKeyFactory</code> class constructors and methods. 49f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class SecretKeyFactoryTest extends TestCase { 52f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final String srvSecretKeyFactory = "SecretKeyFactory"; 54f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String defaultAlgorithm1 = "DESede"; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String defaultAlgorithm2 = "DES"; 57f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String defaultAlgorithm = null; 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String defaultProviderName = null; 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static Provider defaultProvider = null; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String[] invalidValues = SpiEngUtils.invalidValues; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final String[] validValues = new String[2]; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static boolean DEFSupported = false; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String NotSupportMsg = "Default algorithm is not supported"; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProvider = SpiEngUtils.isSupport(defaultAlgorithm1, 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvSecretKeyFactory); 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DEFSupported = (defaultProvider != null); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (DEFSupported) { 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultAlgorithm = defaultAlgorithm1; 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[0] = defaultAlgorithm.toUpperCase(); 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[1] = defaultAlgorithm.toLowerCase(); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProviderName = defaultProvider.getName(); 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProvider = SpiEngUtils.isSupport(defaultAlgorithm2, 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project srvSecretKeyFactory); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DEFSupported = (defaultProvider != null); 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (DEFSupported) { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultAlgorithm = defaultAlgorithm2; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[0] = defaultAlgorithm.toUpperCase(); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[2] = defaultAlgorithm.toLowerCase(); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProviderName = defaultProvider.getName(); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultAlgorithm = null; 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProviderName = null; 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProvider = null; 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected SecretKeyFactory[] createSKFac() { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!DEFSupported) { 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(defaultAlgorithm + " algorithm is not supported"); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory[] skF = new SecretKeyFactory[3]; 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project skF[0] = SecretKeyFactory.getInstance(defaultAlgorithm); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project skF[1] = SecretKeyFactory.getInstance(defaultAlgorithm, 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProvider); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project skF[2] = SecretKeyFactory.getInstance(defaultAlgorithm, 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProviderName); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return skF; 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project e.printStackTrace(); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>SecretKeyFactory</code> constructor 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: returns SecretKeyFactory object 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeyFactory01() throws NoSuchAlgorithmException, 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InvalidKeySpecException, InvalidKeyException { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!DEFSupported) { 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(NotSupportMsg); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactorySpi spi = new MySecretKeyFactorySpi(); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory secKF = new mySecretKeyFactory(spi, defaultProvider, 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultAlgorithm); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect algorithm", secKF.getAlgorithm(), 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultAlgorithm); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect provider", secKF.getProvider(), defaultProvider); 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Incorrect result", secKF.generateSecret(null)); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Incorrect result", secKF.getKeySpec(null, null)); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Incorrect result", secKF.translateKey(null)); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project secKF = new mySecretKeyFactory(null, null, null); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Algorithm must be null", secKF.getAlgorithm()); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull("Provider must be null", secKF.getProvider()); 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project secKF.translateKey(null); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 141f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes } catch (NullPointerException e) { 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 146f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Test for <code>getInstance(String algorithm)</code> method 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertions: 148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * throws NullPointerException when algorithm is null; 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NoSuchAlgorithmException when algorithm has invalid value 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeyFactory02() throws NoSuchAlgorithmException { 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory.getInstance(null); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException or NoSuchAlgorithmException should be thrown if algorithm is null"); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < invalidValues.length; i++) { 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory.getInstance(invalidValues[i]); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchAlgorithmException was not thrown as expected"); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getInstance(String algorithm)</code> method 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: returns SecretKeyObject 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeyFactory03() throws NoSuchAlgorithmException { 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!DEFSupported) { 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(NotSupportMsg); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory secKF = SecretKeyFactory 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getInstance(validValues[i]); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect algorithm", secKF.getAlgorithm(), 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[i]); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getInstance(String algorithm, String provider)</code> 186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * method 187f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Assertion: 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NullPointerException when algorithm is null; 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NoSuchAlgorithmException when algorithm is invalid 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeyFactory04() throws NoSuchAlgorithmException, 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchProviderException { 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!DEFSupported) { 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(NotSupportMsg); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory.getInstance(null, defaultProviderName); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException or NoSuchAlgorithmException should be thrown if algorithm is null"); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < invalidValues.length; i++) { 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory.getInstance(invalidValues[i], 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProviderName); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchAlgorithmException was not thrown as expected (algorithm: " 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[i]).concat(")")); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getInstance(String algorithm, String provider)</code> 216f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * method 217f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Assertion: 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws IllegalArgumentException when provider is null or empty; 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NoSuchProviderException when provider has invalid value 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeyFactory05() throws NoSuchAlgorithmException, 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchProviderException { 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!DEFSupported) { 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(NotSupportMsg); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String prov = null; 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory.getInstance(validValues[i], prov); 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException was not thrown as expected (algorithm: " 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(validValues[i]).concat(" provider: null")); 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory.getInstance(validValues[i], ""); 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException was not thrown as expected (algorithm: " 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(validValues[i]).concat(" provider: empty")); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int j = 1; j < invalidValues.length; j++) { 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory.getInstance(validValues[i], 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project invalidValues[j]); 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchProviderException was not thrown as expected (algorithm: " 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(validValues[i]).concat(" provider: ") 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[j]).concat(")")); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchProviderException e) { 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getInstance(String algorithm, String provider)</code> 256f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * method 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: returns SecretKeyFactory object 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeyFactory06() throws NoSuchProviderException, 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchAlgorithmException { 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!DEFSupported) { 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(NotSupportMsg); 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory secKF = SecretKeyFactory.getInstance( 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[i], defaultProviderName); 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect algorithm", secKF.getAlgorithm(), 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[i]); 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect provider", secKF.getProvider().getName(), 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProviderName); 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getInstance(String algorithm, Provider provider)</code> 277f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * method 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: throws NullPointerException when algorithm is null; 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NoSuchAlgorithmException when algorithm is invalid 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeyFactory07() throws NoSuchAlgorithmException { 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!DEFSupported) { 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(NotSupportMsg); 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory.getInstance(null, defaultProvider); 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException or NoSuchAlgorithmException should be thrown if algorithm is null"); 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < invalidValues.length; i++) { 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory.getInstance(invalidValues[i], defaultProvider); 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NoSuchAlgorithmException was not thrown as expected (algorithm: " 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(invalidValues[i]).concat(")")); 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getInstance(String algorithm, Provider provider)</code> 304f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * method 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: throws IllegalArgumentException when provider is null 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeyFactory08() throws NoSuchAlgorithmException { 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!DEFSupported) { 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(NotSupportMsg); 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider prov = null; 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory.getInstance(validValues[i], prov); 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException was not thrown as expected (provider is null, algorithm: " 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(validValues[i]).concat(")")); 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getInstance(String algorithm, Provider provider)</code> 325f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * method 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: returns SecretKeyFactory object 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeyFactory09() throws NoSuchAlgorithmException { 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!DEFSupported) { 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(NotSupportMsg); 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory secKF = SecretKeyFactory.getInstance( 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[i], defaultProvider); 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect algorithm", secKF.getAlgorithm(), 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[i]); 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect provider", secKF.getProvider(), 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProvider); 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>generateSecret(KeySpec keySpec)</code> and 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>getKeySpec(SecretKey key, Class keySpec) 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * methods 347f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Assertion: 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throw InvalidKeySpecException if parameter is inappropriate 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSecretKeyFactory10() throws InvalidKeyException, 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InvalidKeySpecException { 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!DEFSupported) { 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(NotSupportMsg); 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return; 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] bb = new byte[24]; 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeySpec ks = (defaultAlgorithm.equals(defaultAlgorithm2) ? (KeySpec)new DESKeySpec(bb) : 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project (KeySpec)new DESedeKeySpec(bb)); 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeySpec rks = null; 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeySpec secKeySpec = new SecretKeySpec(bb, defaultAlgorithm); 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKey secKey = null; 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory[] skF = createSKFac(); 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("SecretKeyFactory object were not created", skF); 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < skF.length; i++) { 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project skF[i].generateSecret(null); 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("generateSecret(null): InvalidKeySpecException must be thrown"); 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeySpecException e) { 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project secKey = skF[i].generateSecret(ks); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project skF[i].getKeySpec(null, null); 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("getKeySpec(null,null): InvalidKeySpecException must be thrown"); 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeySpecException e) { 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project skF[i].getKeySpec(null, ks.getClass()); 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("getKeySpec(null, Class): InvalidKeySpecException must be thrown"); 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeySpecException e) { 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project skF[i].getKeySpec(secKey, null); 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("getKeySpec(secKey, null): NullPointerException or InvalidKeySpecException must be thrown"); 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeySpecException e) { 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Expected 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Expected 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 390f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class c; 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (defaultAlgorithm.equals(defaultAlgorithm2)) { 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = DESedeKeySpec.class; 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c = DESKeySpec.class; 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project skF[i].getKeySpec(secKeySpec, c); 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("getKeySpec(secKey, Class): InvalidKeySpecException must be thrown"); 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeySpecException e) { 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 402f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes rks = skF[i].getKeySpec(secKeySpec, ks.getClass()); 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (defaultAlgorithm.equals(defaultAlgorithm1)) { 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect getKeySpec() result 1", 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rks instanceof DESedeKeySpec); 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect getKeySpec() result 1", 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rks instanceof DESKeySpec); 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rks = skF[i].getKeySpec(secKey, ks.getClass()); 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (defaultAlgorithm.equals(defaultAlgorithm1)) { 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect getKeySpec() result 2", 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rks instanceof DESedeKeySpec); 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Incorrect getKeySpec() result 2", 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project rks instanceof DESKeySpec); 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getAlgorithm() throws NoSuchAlgorithmException { 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory secKF = SecretKeyFactory 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getInstance(validValues[i]); 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect algorithm", secKF.getAlgorithm(), 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project validValues[i]); 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 429f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Mock_SecretKeyFactory msf = new Mock_SecretKeyFactory(null, null, null); 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(msf.getAlgorithm()); 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 433f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class Mock_SecretKeyFactory extends SecretKeyFactory{ 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected Mock_SecretKeyFactory(SecretKeyFactorySpi arg0, Provider arg1, String arg2) { 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(arg0, arg1, arg2); 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 439f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_getProvider() throws NoSuchAlgorithmException { 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory secKF = SecretKeyFactory 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getInstance(validValues[i]); 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(secKF.getProvider()); 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 446f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Mock_SecretKeyFactory msf = new Mock_SecretKeyFactory(null, null, null); 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(msf.getProvider()); 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_translateKeyLjavax_crypto_SecretKey() 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws NoSuchAlgorithmException, InvalidKeyException { 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyGenerator kg = null; 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Key key = null; 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project SecretKeyFactory secKF = null; 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < validValues.length; i++) { 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project secKF = SecretKeyFactory 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getInstance(validValues[i]); 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(secKF.getProvider()); 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kg = KeyGenerator.getInstance(secKF.getAlgorithm()); 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kg.init(new SecureRandom()); 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project key = kg.generateKey(); 464f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project secKF.translateKey((SecretKey) key); 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project secKF.translateKey(null); 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("InvalidKeyException expected"); 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (InvalidKeyException e) { 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project //expected 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectclass mySecretKeyFactory extends SecretKeyFactory { 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public mySecretKeyFactory(SecretKeyFactorySpi spi, Provider prov, String alg) { 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(spi, prov, alg); 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 481