KeyStoreBuilderTest.java revision 1a7e762f344c111416b001a61e41451d01f605ad
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 dalvik.annotation.BrokenTest; 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestLevel; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargetClass; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargetNew; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport dalvik.annotation.TestTargets; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.KeyStoreTestSupport; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.tmpCallbackHandler; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.File; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.FileOutputStream; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStore; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStoreException; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateException; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Enumeration; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project@TestTargetClass(KeyStore.Builder.class) 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class KeyStoreBuilderTest extends TestCase { 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() throws Exception { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setUp(); 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void tearDown() throws Exception { 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.tearDown(); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static char[] pass = { 's', 't', 'o', 'r', 'e', 'p', 'w', 'd' }; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private KeyStore.PasswordProtection protPass = new KeyStore.PasswordProtection( 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pass); 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private tmpCallbackHandler tmpCall = new tmpCallbackHandler(); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private KeyStore.CallbackHandlerProtection callbackHand = new KeyStore.CallbackHandlerProtection( 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project tmpCall); 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 6150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob private MyProtectionParameter myProtParam = new MyProtectionParameter( 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new byte[5]); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String[] validValues = KeyStoreTestSupport.validValues; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String defaultType = KeyStoreTestSupport.defaultType; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static Provider defaultProvider = null; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static { 7250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob defaultProvider = Security.getProviders( 7350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob "KeyStore." + KeyStore.getDefaultType())[0]; 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * test for constructor KeyStoreBuilder 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargets({ 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "Builder", 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ), 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getKeyStore", 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ), 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getProtectionParameter", 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.lang.String.class} 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }) 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testConstructor() { 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStoreBuilder ksb; 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksb = new KeyStoreBuilder(); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(ksb); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksb.getKeyStore(); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksb.getProtectionParameter("test"); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception " + e.getMessage()); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * test for method newInstance(KeyStore, KeyStore.ProtectionParameter) 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "newInstance", 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.security.KeyStore.class, java.security.KeyStore.ProtectionParameter.class} 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testNewInstanceKeyStoreProtectionParameter() 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws KeyStoreException, NoSuchAlgorithmException, IOException, 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateException { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // exceptions verification 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, null); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, protPass); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder ksB; 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(ks, null); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when ProtectionParameter is null"); 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.PasswordProtection protPass1 = new KeyStore.PasswordProtection( 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pass); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.ProtectionParameter[] pp = { protPass, protPass1, 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project callbackHand, myProtParam }; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.length; i++) { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = KeyStore.getInstance(KeyStore.getDefaultType()); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(ks, pp[i]); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown because KeyStore was not initialized"); 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.load(null, pass); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(ks, pp[i]); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect KeyStore", ksB.getKeyStore().size(), 0); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(ks, pp[i]); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // verification getKeyStore() and getProtectionParameter(String 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // alias) 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect KeyStore", ks, ksB.getKeyStore()); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB.getProtectionParameter(null); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter("aaa"), pp[i]); 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected: " + e.toString() + " was thrown"); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter("Bad alias"), pp[i]); 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no entry 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // with such alias 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter(""), pp[i]); 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no entry 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // with such alias 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.ProtectionParameter pPar = ksB 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getProtectionParameter("aaa"); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (i) { 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 0: 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pPar instanceof KeyStore.PasswordProtection); 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 1: 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pPar instanceof KeyStore.PasswordProtection); 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 2: 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pPar instanceof KeyStore.CallbackHandlerProtection); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 3: 21350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertTrue(pPar instanceof MyProtectionParameter); 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project default: 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Incorrect protection parameter"); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(pPar, pp[i]); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for methods: <code>newInstance(String type, Provider provider, File 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * file, ProtectionParameter protectionParameter)</code> <code>getKeyStore()</code> 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>getProtectionParameter(String alias)</code> Assertions: throws 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NullPointerException if type, file or protectionParameter is null; throws 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException if file does not exist or is not file; throws 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException if ProtectionParameter is not PasswordProtection 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or CallbackHandlerProtection; returns new object 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getKeyStore() returns specified keystore; getProtectionParameter(String 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * alias) throws NullPointerException when alias is null; throws 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * KeyStoreException when alias is not available; returns 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ProtectionParameter which is used in newInstance(...) 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "newInstance", 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.lang.String.class, java.security.Provider.class, java.io.File.class, java.security.KeyStore.ProtectionParameter.class} 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testNewInstanceStringProviderFileProtectionParameter() 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws Exception { 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File fl = File.createTempFile("KSBuilder_ImplTest", "keystore"); 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fl.deleteOnExit(); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder ksB; 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder ksB1; 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = null; 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks1 = null; 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob MyProtectionParameter myPP = new MyProtectionParameter(new byte[5]); 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // check exceptions 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, defaultProvider, fl, protPass); 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when type is null"); 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(KeyStore.getDefaultType(), defaultProvider, null, 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protPass); 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when file is null"); 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .newInstance(KeyStore.getDefaultType(), defaultProvider, fl, null); 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when ProtectionParameter is null"); 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .newInstance(KeyStore.getDefaultType(), defaultProvider, fl, myPP); 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown when ProtectionParameter is not correct"); 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(KeyStore.getDefaultType(), defaultProvider, 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new File(fl.getAbsolutePath().concat("should_absent")), 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protPass); 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown when file does not exist"); 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 'file' param points to directory 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(KeyStore.getDefaultType(), defaultProvider, fl 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getParentFile(), protPass); 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown when file does not exist"); 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), defaultProvider, fl, 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protPass); 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB.getKeyStore(); 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("KeyStoreException must be throw because file is empty"); 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fl = createKS(); 30250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 30350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // Exception Tests with custom ProtectionParameter 30450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 30550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 30650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob null, fl, myPP); 30750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("IllegalArgumentException must be " 30850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + "thrown for incorrect ProtectionParameter"); 30950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (IllegalArgumentException e) { 31050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 31150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 31250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 31350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob defaultProvider, fl, myPP); 31450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("IllegalArgumentException must be " 31550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + "thrown for incorrect ProtectionParameter"); 31650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (IllegalArgumentException e) { 31750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 31850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 31950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // Tests with PasswordProtection 32050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ksB = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 32150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob null, fl, protPass); 32250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ksB1 = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 32350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob defaultProvider, fl, protPass); 32450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 32550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ks = ksB.getKeyStore(); 32650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 32750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("Unexpected KeyException was thrown"); 32850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 32950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 33050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ks1 = ksB1.getKeyStore(); 33150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 33250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("Unexpected KeyException was thrown: " + e.getMessage()); 33350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 33450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect KeyStore size", ks.size(), ks1.size()); 33550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ; 33650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 33750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob for (Enumeration<String> aliases = ks.aliases(); aliases.hasMoreElements(); ) { 33850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob String aName = aliases.nextElement(); 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 34050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect ProtectionParameter", ksB 34150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob .getProtectionParameter(aName), protPass); 34250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (Exception e) { 34350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("Unexpected: " + e.toString() 34450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + " was thrown for alias: " + aName); 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 34650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ksB.getKeyStore(); 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 3511a7e762f344c111416b001a61e41451d01f605adJorg Pleumann assertEquals(ksB.getProtectionParameter("Bad alias"), protPass); 35250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 35350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // KeyStoreException might be thrown because there is no entry 35450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // with such alias 35550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 35850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob for (Enumeration<String> aliases = ks1.aliases(); aliases.hasMoreElements(); ) { 35950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob String aName = aliases.nextElement(); 36050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect ProtectionParameter", ksB1 36150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob .getProtectionParameter(aName), protPass); 36250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 36450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 36550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals(ksB1.getProtectionParameter("Bad alias"), protPass); 36650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 36750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // KeyStoreException might be thrown because there is no entry 36850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // with such alias 36950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 37050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 37150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 37250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob // Tests with CallbackHandlerProtection 37350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ksB = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 37450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob null, fl, callbackHand); 37550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ksB1 = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), 37650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob defaultProvider, fl, callbackHand); 37750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 37850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ks = ksB.getKeyStore(); 37950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("KeyStoreException must be thrown for incorrect " 38050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + "ProtectionParameter"); 38150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 38250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 38350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob try { 38450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob ks1 = ksB1.getKeyStore(); 38550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("KeyStoreException must be thrown for incorrect " 38650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + "ProtectionParameter"); 38750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (KeyStoreException e) { 38850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 38950b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect KeyStore size", ks.size(), ks1.size()); 39050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 39150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob for (Enumeration<String> aliases = ks.aliases(); aliases.hasMoreElements();) { 39250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob String aName = aliases.nextElement(); 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 39450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect ProtectionParameter", ksB 39550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob .getProtectionParameter(aName), callbackHand); 39650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } catch (Exception e) { 39750b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob fail("Unexpected: " + e.toString() 39850b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob + " was thrown for alias: " + aName); 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 40150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob 40250b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob for (Enumeration<String> iter = ks1.aliases(); iter.hasMoreElements();) { 40350b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob String aName = iter.nextElement(); 40450b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob assertEquals("Incorrect ProtectionParameter", ksB1 40550b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob .getProtectionParameter(aName), callbackHand); 40650b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob } 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for method: <code>newInstance(String type, Provider provider, 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ProtectionParameter protectionParameter)</code> <code>getKeyStore()</code> 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>getProtectionParameter(String alias)</code> Assertions: throws 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NullPointerException if type, or protectionParameter is null; returns new 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * object 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getKeyStore() returns empty keystore getProtectionParameter(String alias) 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NullPointerException when alias is null; throws KeyStoreException 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when alias is not available 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "newInstance", 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.lang.String.class, java.security.Provider.class, java.security.KeyStore.ProtectionParameter.class} 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testNewInstanceStringProviderProtectionParameter() 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws KeyStoreException { 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, defaultProvider, protPass); 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when type is null"); 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(defaultType, defaultProvider, null); 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when ProtectionParameter is null"); 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 44050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob MyProtectionParameter myPP = new MyProtectionParameter(new byte[5]); 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.ProtectionParameter[] pp = { protPass, myPP, callbackHand }; 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder ksB, ksB1; 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = null; 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.length; i++) { 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(defaultType, defaultProvider, 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp[i]); 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB1 = KeyStore.Builder.newInstance(defaultType, null, pp[i]); 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (i) { 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 0: 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("KeyStore is null", ks); 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter("Bad alias"), 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp[i]); 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // entry with such alias 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB1.getKeyStore(); 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("KeyStore is null", ks); 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB1.getProtectionParameter("Bad alias"), 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp[i]); 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // entry with such alias 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e1) { 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect exception", e.getMessage(), e1 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMessage()); 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 1: 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 2: 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Exception ex1 = null; 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Exception ex2 = null; 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex1 = e; 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex2 = e; 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect exception", ex1.getMessage(), ex2 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMessage()); 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB.getProtectionParameter("aaa"); 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException must be thrown because getKeyStore() was not invoked"); 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) { 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB1.getKeyStore(); 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex1 = e; 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB1.getKeyStore(); 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex2 = e; 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect exception", ex1.getMessage(), ex2 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMessage()); 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB1.getProtectionParameter("aaa"); 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException must be thrown because getKeyStore() was not invoked"); 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) { 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Additional class for creating KeyStoreBuilder 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 53050b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob class MyProtectionParameter implements KeyStore.ProtectionParameter { 53150b97349a2607e5b350ccadccc364972f3aaeeddUrs Grob public MyProtectionParameter(byte[] param) { 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (param == null) { 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NullPointerException("param is null"); 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// Creates empty KeyStore and loads it to file 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private File createKS() throws Exception { 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project FileOutputStream fos = null; 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File ff = File.createTempFile("KSBuilder_ImplTest", "keystore"); 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ff.deleteOnExit(); 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fos = new FileOutputStream(ff); 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.load(null, null); 548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.store(fos, pass); 549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (fos != null) { 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fos.close(); 553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ff; 558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 559adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class KeyStoreBuilder extends KeyStore.Builder { 561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyStoreBuilder() { 562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyStore getKeyStore() { 566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyStore.ProtectionParameter getProtectionParameter(String alias) { 570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 574