KeyStoreBuilderTest.java revision adc854b798c1cfe3bfd4c27d68d5cee38ca617da
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 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 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 { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProvider = Security.getProviders("KeyFactory.DSA")[0]; 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * test for constructor KeyStoreBuilder 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargets({ 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "Builder", 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ), 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getKeyStore", 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {} 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ), 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "getProtectionParameter", 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.lang.String.class} 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }) 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testConstructor() { 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStoreBuilder ksb; 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksb = new KeyStoreBuilder(); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(ksb); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksb.getKeyStore(); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksb.getProtectionParameter("test"); 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected exception " + e.getMessage()); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * test for method newInstance(KeyStore, KeyStore.ProtectionParameter) 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "newInstance", 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.security.KeyStore.class, java.security.KeyStore.ProtectionParameter.class} 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testNewInstanceKeyStoreProtectionParameter() 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws KeyStoreException, NoSuchAlgorithmException, IOException, 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateException { 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // exceptions verification 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, null); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, protPass); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder ksB; 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(ks, null); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when ProtectionParameter is null"); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.PasswordProtection protPass1 = new KeyStore.PasswordProtection( 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pass); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.ProtectionParameter[] pp = { protPass, protPass1, 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project callbackHand, myProtParam }; 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.length; i++) { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = KeyStore.getInstance(KeyStore.getDefaultType()); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(ks, pp[i]); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown because KeyStore was not initialized"); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.load(null, pass); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(ks, pp[i]); 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect KeyStore", ksB.getKeyStore().size(), 0); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(ks, pp[i]); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // verification getKeyStore() and getProtectionParameter(String 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // alias) 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect KeyStore", ks, ksB.getKeyStore()); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB.getProtectionParameter(null); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown"); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter("aaa"), pp[i]); 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected: " + e.toString() + " was thrown"); 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter("Bad alias"), pp[i]); 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no entry 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // with such alias 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter(""), pp[i]); 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no entry 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // with such alias 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.ProtectionParameter pPar = ksB 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getProtectionParameter("aaa"); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (i) { 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 0: 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pPar instanceof KeyStore.PasswordProtection); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 1: 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pPar instanceof KeyStore.PasswordProtection); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 2: 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pPar instanceof KeyStore.CallbackHandlerProtection); 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 3: 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(pPar instanceof myProtectionParameter); 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project default: 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Incorrect protection parameter"); 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(pPar, pp[i]); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for methods: <code>newInstance(String type, Provider provider, File 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * file, ProtectionParameter protectionParameter)</code> <code>getKeyStore()</code> 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>getProtectionParameter(String alias)</code> Assertions: throws 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NullPointerException if type, file or protectionParameter is null; throws 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException if file does not exist or is not file; throws 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IllegalArgumentException if ProtectionParameter is not PasswordProtection 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or CallbackHandlerProtection; returns new object 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getKeyStore() returns specified keystore; getProtectionParameter(String 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * alias) throws NullPointerException when alias is null; throws 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * KeyStoreException when alias is not available; returns 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ProtectionParameter which is used in newInstance(...) 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "newInstance", 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.lang.String.class, java.security.Provider.class, java.io.File.class, java.security.KeyStore.ProtectionParameter.class} 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @BrokenTest("different tests are not performed in the loop") 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 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 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(); 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.ProtectionParameter[] pp = { myPP, protPass, callbackHand }; 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.length; i++) { 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i == 0) { 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(KeyStore.getDefaultType(), null, fl, pp[i]); 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown for incorrect ProtectionParameter"); 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(KeyStore.getDefaultType(), defaultProvider, 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fl, pp[i]); 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalArgumentException must be thrown for incorrect ProtectionParameter"); 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project continue; 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), null, fl, pp[i]); 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB1 = KeyStore.Builder.newInstance(KeyStore.getDefaultType(), defaultProvider, 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fl, pp[i]); 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i == 2) { 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("KeyStoreException must be thrown for incorrect ProtectionParameter"); 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect KeyStore size", ks.size(), 0); 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i == 2) { 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project continue; 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected KeyException was thrown"); 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks1 = ksB1.getKeyStore(); 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i == 2) { 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("KeyStoreException must be thrown for incorrect ProtectionParameter"); 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i == 2) { 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project continue; 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected KeyException was thrown"); 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect KeyStore size", ks.size(), ks1.size()); 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Enumeration<String> iter = ks.aliases(); 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String aName; 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (iter.hasMoreElements()) { 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project aName = iter.nextElement(); 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect ProtectionParameter", ksB 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getProtectionParameter(aName), pp[i]); 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Unexpected: " + e.toString() 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + " was thrown for alias: " + aName); 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter("Bad alias"), pp[i]); 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no entry 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // with such alias 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project iter = ks1.aliases(); 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (iter.hasMoreElements()) { 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project aName = iter.nextElement(); 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect ProtectionParameter", ksB1 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getProtectionParameter(aName), pp[i]); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB1.getProtectionParameter("Bad alias"), pp[i]); 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no entry 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // with such alias 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for method: <code>newInstance(String type, Provider provider, 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ProtectionParameter protectionParameter)</code> <code>getKeyStore()</code> 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>getProtectionParameter(String alias)</code> Assertions: throws 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * NullPointerException if type, or protectionParameter is null; returns new 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * object 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * getKeyStore() returns empty keystore getProtectionParameter(String alias) 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws NullPointerException when alias is null; throws KeyStoreException 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when alias is not available 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @TestTargetNew( 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project level = TestLevel.COMPLETE, 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project notes = "", 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project method = "newInstance", 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project args = {java.lang.String.class, java.security.Provider.class, java.security.KeyStore.ProtectionParameter.class} 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ) 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testNewInstanceStringProviderProtectionParameter() 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws KeyStoreException { 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(null, defaultProvider, protPass); 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when type is null"); 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder.newInstance(defaultType, defaultProvider, null); 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when ProtectionParameter is null"); 412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project myProtectionParameter myPP = new myProtectionParameter(new byte[5]); 415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.ProtectionParameter[] pp = { protPass, myPP, callbackHand }; 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.Builder ksB, ksB1; 417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = null; 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < pp.length; i++) { 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB = KeyStore.Builder.newInstance(defaultType, defaultProvider, 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp[i]); 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB1 = KeyStore.Builder.newInstance(defaultType, null, pp[i]); 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (i) { 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 0: 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("KeyStore is null", ks); 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB.getProtectionParameter("Bad alias"), 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp[i]); 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // entry with such alias 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB1.getKeyStore(); 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("KeyStore is null", ks); 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(ksB1.getProtectionParameter("Bad alias"), 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pp[i]); 441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // KeyStoreException might be thrown because there is no 443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // entry with such alias 444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e1) { 449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect exception", e.getMessage(), e1 450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMessage()); 451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 1: 455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project case 2: 456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Exception ex1 = null; 457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Exception ex2 = null; 458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex1 = e; 462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB.getKeyStore(); 465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex2 = e; 467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect exception", ex1.getMessage(), ex2 469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMessage()); 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB.getProtectionParameter("aaa"); 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException must be thrown because getKeyStore() was not invoked"); 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) { 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB1.getKeyStore(); 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex1 = e; 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks = ksB1.getKeyStore(); 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ex2 = e; 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect exception", ex1.getMessage(), ex2 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getMessage()); 489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ksB1.getProtectionParameter("aaa"); 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IllegalStateException must be thrown because getKeyStore() was not invoked"); 493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalStateException e) { 494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project break; 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Additional class for creating KeyStoreBuilder 503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class myProtectionParameter implements KeyStore.ProtectionParameter { 505adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public myProtectionParameter(byte[] param) { 506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (param == null) { 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NullPointerException("param is null"); 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// Creates empty KeyStore and loads it to file 513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private File createKS() throws Exception { 514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project FileOutputStream fos = null; 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project File ff = File.createTempFile("KSBuilder_ImplTest", "keystore"); 516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ff.deleteOnExit(); 517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); 520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fos = new FileOutputStream(ff); 521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.load(null, null); 522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ks.store(fos, pass); 523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } finally { 524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (fos != null) { 525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fos.close(); 527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ff; 532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 533adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class KeyStoreBuilder extends KeyStore.Builder { 535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyStoreBuilder() { 536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(); 537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyStore getKeyStore() { 540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyStore.ProtectionParameter getProtectionParameter(String alias) { 544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 548