1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.tests.java.security; 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.KeyStoreTestSupport; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.tmpCallbackHandler; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.File; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.FileOutputStream; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStore; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStoreException; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateException; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Enumeration; 34229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class KeyStoreBuilderTest extends TestCase { 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() throws Exception { 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setUp(); 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void tearDown() throws Exception { 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.tearDown(); 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static char[] pass = { 's', 't', 'o', 'r', 'e', 'p', 'w', 'd' }; 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private KeyStore.PasswordProtection protPass = new KeyStore.PasswordProtection( 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pass); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private tmpCallbackHandler tmpCall = new tmpCallbackHandler(); 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private KeyStore.CallbackHandlerProtection callbackHand = new KeyStore.CallbackHandlerProtection( 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tmpCall); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 5550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob private MyProtectionParameter myProtParam = new MyProtectionParameter( 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new byte[5]); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String[] validValues = KeyStoreTestSupport.validValues; 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String defaultType = KeyStoreTestSupport.defaultType; 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static Provider defaultProvider = null; 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static { 6650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob defaultProvider = Security.getProviders( 6750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "KeyStore." + KeyStore.getDefaultType())[0]; 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * test for constructor KeyStoreBuilder 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testConstructor() { 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStoreBuilder ksb; 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksb = new KeyStoreBuilder(); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(ksb); 78f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksb.getKeyStore(); 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksb.getProtectionParameter("test"); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception " + e.getMessage()); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 85f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 87f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * test for method newInstance(KeyStore, KeyStore.ProtectionParameter) 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testNewInstanceKeyStoreProtectionParameter() 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws KeyStoreException, NoSuchAlgorithmException, IOException, 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateException { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // exceptions verification 93f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, null); 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 100f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, protPass); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 107f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder ksB; 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(ks, null); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when ProtectionParameter is null"); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.PasswordProtection protPass1 = new KeyStore.PasswordProtection( 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pass); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.ProtectionParameter[] pp = { protPass, protPass1, 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project callbackHand, myProtParam }; 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.length; i++) { 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = KeyStore.getInstance(KeyStore.getDefaultType()); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(ks, pp[i]); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown because KeyStore was not initialized"); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 130f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.load(null, pass); 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(ks, pp[i]); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect KeyStore", ksB.getKeyStore().size(), 0); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(ks, pp[i]); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // verification getKeyStore() and getProtectionParameter(String 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // alias) 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect KeyStore", ks, ksB.getKeyStore()); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB.getProtectionParameter(null); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter("aaa"), pp[i]); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected: " + e.toString() + " was thrown"); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter("Bad alias"), pp[i]); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no entry 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // with such alias 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter(""), pp[i]); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no entry 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // with such alias 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.ProtectionParameter pPar = ksB 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getProtectionParameter("aaa"); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (i) { 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 0: 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pPar instanceof KeyStore.PasswordProtection); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 1: 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pPar instanceof KeyStore.PasswordProtection); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 2: 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pPar instanceof KeyStore.CallbackHandlerProtection); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 3: 18150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertTrue(pPar instanceof MyProtectionParameter); 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project default: 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Incorrect protection parameter"); 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(pPar, pp[i]); 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for methods: <code>newInstance(String type, Provider provider, File 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * file, ProtectionParameter protectionParameter)</code> <code>getKeyStore()</code> 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>getProtectionParameter(String alias)</code> Assertions: throws 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NullPointerException if type, file or protectionParameter is null; throws 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException if file does not exist or is not file; throws 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException if ProtectionParameter is not PasswordProtection 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or CallbackHandlerProtection; returns new object 198f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getKeyStore() returns specified keystore; getProtectionParameter(String 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * alias) throws NullPointerException when alias is null; throws 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * KeyStoreException when alias is not available; returns 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ProtectionParameter which is used in newInstance(...) 203f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testNewInstanceStringProviderFileProtectionParameter() 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws Exception { 207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File fl = File.createTempFile("KSBuilder_ImplTest", "keystore"); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fl.deleteOnExit(); 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder ksB; 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder ksB1; 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = null; 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks1 = null; 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 21550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob MyProtectionParameter myPP = new MyProtectionParameter(new byte[5]); 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // check exceptions 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, defaultProvider, fl, protPass); 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when type is null"); 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(KeyStore.getDefaultType(), defaultProvider, null, 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protPass); 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when file is null"); 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .newInstance(KeyStore.getDefaultType(), defaultProvider, fl, null); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when ProtectionParameter is null"); 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .newInstance(KeyStore.getDefaultType(), defaultProvider, fl, myPP); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown when ProtectionParameter is not correct"); 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(KeyStore.getDefaultType(), defaultProvider, 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new File(fl.getAbsolutePath().concat("should_absent")), 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protPass); 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown when file does not exist"); 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 'file' param points to directory 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(KeyStore.getDefaultType(), defaultProvider, fl 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getParentFile(), protPass); 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown when file does not exist"); 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), defaultProvider, fl, 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protPass); 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB.getKeyStore(); 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("KeyStoreException must be throw because file is empty"); 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fl = createKS(); 264f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 26550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // Exception Tests with custom ProtectionParameter 26650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 26750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 26850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob null, fl, myPP); 26950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("IllegalArgumentException must be " 27050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + "thrown for incorrect ProtectionParameter"); 27150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (IllegalArgumentException e) { 27250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 27350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 27450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 27550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob defaultProvider, fl, myPP); 27650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("IllegalArgumentException must be " 27750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + "thrown for incorrect ProtectionParameter"); 27850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (IllegalArgumentException e) { 27950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 280f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 28150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // Tests with PasswordProtection 28250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ksB = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 28350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob null, fl, protPass); 28450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ksB1 = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 28550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob defaultProvider, fl, protPass); 28650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 28750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ks = ksB.getKeyStore(); 28850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 28950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("Unexpected KeyException was thrown"); 29050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 29150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 29250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ks1 = ksB1.getKeyStore(); 29350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 29450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("Unexpected KeyException was thrown: " + e.getMessage()); 29550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 29650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect KeyStore size", ks.size(), ks1.size()); 29750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ; 29850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 29950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob for (Enumeration<String> aliases = ks.aliases(); aliases.hasMoreElements(); ) { 30050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob String aName = aliases.nextElement(); 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 30250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect ProtectionParameter", ksB 30350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob .getProtectionParameter(aName), protPass); 30450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (Exception e) { 30550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("Unexpected: " + e.toString() 30650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + " was thrown for alias: " + aName); 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 30850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ksB.getKeyStore(); 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 3131a7e762f344c111416b001a61e41451d01f605adJorg Pleumann assertEquals(ksB.getProtectionParameter("Bad alias"), protPass); 31450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 31550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // KeyStoreException might be thrown because there is no entry 31650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // with such alias 31750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 319f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 32050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob for (Enumeration<String> aliases = ks1.aliases(); aliases.hasMoreElements(); ) { 32150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob String aName = aliases.nextElement(); 32250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect ProtectionParameter", ksB1 32350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob .getProtectionParameter(aName), protPass); 32450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 32750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals(ksB1.getProtectionParameter("Bad alias"), protPass); 32850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 32950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // KeyStoreException might be thrown because there is no entry 33050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // with such alias 33150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 332f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 33350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 33450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // Tests with CallbackHandlerProtection 33550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ksB = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 33650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob null, fl, callbackHand); 33750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ksB1 = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 33850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob defaultProvider, fl, callbackHand); 33950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 34050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ks = ksB.getKeyStore(); 34150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("KeyStoreException must be thrown for incorrect " 34250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + "ProtectionParameter"); 34350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 34450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 34550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 34650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ks1 = ksB1.getKeyStore(); 34750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("KeyStoreException must be thrown for incorrect " 34850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + "ProtectionParameter"); 34950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 35050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 35150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect KeyStore size", ks.size(), ks1.size()); 35250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 35350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob for (Enumeration<String> aliases = ks.aliases(); aliases.hasMoreElements();) { 35450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob String aName = aliases.nextElement(); 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 35650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect ProtectionParameter", ksB 35750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob .getProtectionParameter(aName), callbackHand); 35850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (Exception e) { 35950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("Unexpected: " + e.toString() 36050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + " was thrown for alias: " + aName); 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 36350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 36450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob for (Enumeration<String> iter = ks1.aliases(); iter.hasMoreElements();) { 36550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob String aName = iter.nextElement(); 36650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect ProtectionParameter", ksB1 36750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob .getProtectionParameter(aName), callbackHand); 36850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for method: <code>newInstance(String type, Provider provider, 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ProtectionParameter protectionParameter)</code> <code>getKeyStore()</code> 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>getProtectionParameter(String alias)</code> Assertions: throws 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NullPointerException if type, or protectionParameter is null; returns new 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * object 377f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getKeyStore() returns empty keystore getProtectionParameter(String alias) 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NullPointerException when alias is null; throws KeyStoreException 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when alias is not available 381f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testNewInstanceStringProviderProtectionParameter() 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws KeyStoreException { 385f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, defaultProvider, protPass); 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when type is null"); 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(defaultType, defaultProvider, null); 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when ProtectionParameter is null"); 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 39650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob MyProtectionParameter myPP = new MyProtectionParameter(new byte[5]); 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.ProtectionParameter[] pp = { protPass, myPP, callbackHand }; 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder ksB, ksB1; 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = null; 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.length; i++) { 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(defaultType, defaultProvider, 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp[i]); 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB1 = KeyStore.Builder.newInstance(defaultType, null, pp[i]); 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (i) { 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 0: 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("KeyStore is null", ks); 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter("Bad alias"), 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp[i]); 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // entry with such alias 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB1.getKeyStore(); 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("KeyStore is null", ks); 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB1.getProtectionParameter("Bad alias"), 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp[i]); 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // entry with such alias 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e1) { 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect exception", e.getMessage(), e1 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMessage()); 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 1: 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 2: 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Exception ex1 = null; 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Exception ex2 = null; 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex1 = e; 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex2 = e; 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect exception", ex1.getMessage(), ex2 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMessage()); 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB.getProtectionParameter("aaa"); 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException must be thrown because getKeyStore() was not invoked"); 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) { 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB1.getKeyStore(); 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex1 = e; 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB1.getKeyStore(); 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex2 = e; 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect exception", ex1.getMessage(), ex2 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMessage()); 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB1.getProtectionParameter("aaa"); 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException must be thrown because getKeyStore() was not invoked"); 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) { 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Additional class for creating KeyStoreBuilder 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 48650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob class MyProtectionParameter implements KeyStore.ProtectionParameter { 48750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob public MyProtectionParameter(byte[] param) { 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (param == null) { 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NullPointerException("param is null"); 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 493f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 494f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes// Creates empty KeyStore and loads it to file 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private File createKS() throws Exception { 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project FileOutputStream fos = null; 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File ff = File.createTempFile("KSBuilder_ImplTest", "keystore"); 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ff.deleteOnExit(); 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fos = new FileOutputStream(ff); 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.load(null, null); 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.store(fos, pass); 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (fos != null) { 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fos.close(); 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ff; 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class KeyStoreBuilder extends KeyStore.Builder { 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyStoreBuilder() { 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 520f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyStore getKeyStore() { 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 524f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyStore.ProtectionParameter getProtectionParameter(String alias) { 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 530