1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Vera Y. Petrashkova 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.tests.java.security; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStore; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.KeyStoreException; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.SignatureException; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Principal; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.PublicKey; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.InvalidKeyException; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.Certificate; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateException; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateEncodingException; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateExpiredException; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateNotYetValidException; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.X509Certificate; 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Date; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Set; 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger; 452f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport javax.crypto.KeyGenerator; 462f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughesimport javax.crypto.SecretKey; 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.KeyStoreTestSupport; 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.MyLoadStoreParams; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.SpiEngUtils; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport junit.framework.TestCase; 53229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>KeyStore</code> constructor and methods 56f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class KeyStoreTest extends TestCase { 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String KeyStoreProviderClass = "org.apache.harmony.security.tests.support.MyKeyStore"; 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String defaultType = "KeyStore"; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean KSSupported = false; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String defaultProviderName = null; 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static Provider defaultProvider = null; 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String NotSupportMsg = "Default KeyStore type is not supported"; 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider mProv; 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public KeyStore[] createKS() throws Exception { 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(NotSupportMsg, KSSupported); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore[] kpg = new KeyStore[3]; 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kpg[0] = KeyStore.getInstance(defaultType); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kpg[1] = KeyStore.getInstance(defaultType, defaultProvider); 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kpg[2] = KeyStore.getInstance(defaultType, defaultProviderName); 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return kpg; 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() throws Exception { 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.setUp(); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project mProv = (new SpiEngUtils()).new MyProvider("MyKSProvider", 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project "Testing provider", KeyStoreTestSupport.srvKeyStore.concat(".") 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .concat(defaultType), KeyStoreProviderClass); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Security.insertProviderAt(mProv, 2); 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProvider = SpiEngUtils.isSupport(defaultType, 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStoreTestSupport.srvKeyStore); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KSSupported = (defaultProvider != null); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProviderName = (KSSupported ? defaultProvider.getName() : null); 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see TestCase#tearDown() 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void tearDown() throws Exception { 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super.tearDown(); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Security.removeProvider(mProv.getName()); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 105f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Test for <code>load(LoadStoreParameter param)</code> 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>store(LoadStoreParameter param)</code> 107f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * methods 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertions: throw IllegalArgumentException if param is null; 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testLoadStore02() throws Exception { 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(NotSupportMsg, KSSupported); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore[] kss = createKS(); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("KeyStore objects were not created", kss); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < kss.length; i++) { 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kss[i].load(null); 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException or IllegalArgumentException should be thrown for null parameter"); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kss[i].load(null, null); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kss[i].store(null); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("IOException or IllegalArgumentException should be thrown for null parameter"); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IllegalArgumentException e) { 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.LoadStoreParameter lParam = new MyLoadStoreParams( 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new KeyStore.PasswordProtection(new char[0])); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < kss.length; i++) { 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kss[i].load(lParam); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect result", kss[i].size(), 0); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kss[i].store(lParam); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 140f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 142f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Test for <code>setKeyEntry(String alias, byte[] key, Certificate[] chain)</code> 143f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * method 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: stores KeyEntry. 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testSetKeyEntry() throws Exception { 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(NotSupportMsg, KSSupported); 148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore[] kss = createKS(); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("KeyStore objects were not created", kss); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] kk = { (byte) 1, (byte) 2, (byte) 127, (byte) 77 }; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String alias = "keyEntry"; 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project char[] pwd = new char[0]; 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project byte[] res; 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Certificate certs[] = { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new KeyStoreTestSupport.MCertificate(alias, kk), 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new KeyStoreTestSupport.MCertificate(alias, kk) }; 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < kss.length; i++) { 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kss[i].load(null, null); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kss[i].setKeyEntry("proba", null, null); 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("KeyStoreException must be thrown"); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kss[i].setKeyEntry(alias, kk, certs); 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project res = kss[i].getKey(alias, pwd).getEncoded(); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(kk.length, res.length); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int j = 0; j < res.length; j++) { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(res[j], kk[j]); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(kss[i].getCertificateChain(alias).length, certs.length); 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project kss[i].setKeyEntry(alias, kk, null); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project res = kss[i].getKey(alias, pwd).getEncoded(); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(kk.length, res.length); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int j = 0; j < res.length; j++) { 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(res[j], kk[j]); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(kss[i].getCertificateChain(alias)); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>getDefaultType()</code> method Assertion: returns 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * default security key store type or "jks" string 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testKeyStore01() { 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String propName = "keystore.type"; 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String defKSType = Security.getProperty(propName); 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String dType = KeyStore.getDefaultType(); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String resType = defKSType; 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (resType == null) { 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project resType = defaultType; 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("Default type have not be null", dType); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect default type", dType, resType); 196f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (defKSType == null) { 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Security.setProperty(propName, defaultType); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project dType = KeyStore.getDefaultType(); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project resType = Security.getProperty(propName); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("Incorrect default type", resType); 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("Default type have not be null", dType); 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect default type", dType, resType); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 208f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Test for <code>getInstance(String type)</code> method 209f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Assertion: 210f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * throws NullPointerException when type is null 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * throws KeyStoreException when type is not available 212f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testKeyStore02() throws KeyStoreException { 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String[] invalidValues = SpiEngUtils.invalidValues; 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.getInstance(null); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("NullPointerException must be thrown when type is null"); 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException e) { 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < invalidValues.length; i++) { 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.getInstance(invalidValues[i]); 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("KeyStoreException must be thrown (type: ".concat( 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project invalidValues[i]).concat(" )")); 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (KeyStoreException e) { 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @test java.security.KeyStore.PasswordProtection.getPassword() 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testKeyStorePPGetPassword() { 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-1539 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // no exception expected 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNull(new KeyStore.PasswordProtection(null).getPassword()); 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project char[] password = new char[] {'a', 'b', 'c'}; 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project KeyStore.PasswordProtection pp = new KeyStore.PasswordProtection(password); 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotSame(pp.getPassword(), password); 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertSame(pp.getPassword(), pp.getPassword()); 242f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2452f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 2462f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes /* 247229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.security.KeyStoreSpi.engineEntryInstanceOf(String, Class<? extends Entry>) 2482f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes */ 2492f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes public void testEngineEntryInstanceOf() throws Exception { 2502f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes //Regression for HARMONY-615 2512f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 252f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // create a KeyStore 2532f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); 2542f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes keyStore.load(null, "pwd".toCharArray()); 2552f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 256f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // generate a key 2572f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes KeyGenerator keyGen = KeyGenerator.getInstance("DES"); 2582f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes keyGen.init(56); 2592f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes SecretKey secretKey = keyGen.generateKey(); 2602f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 261f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // put the key into keystore 2622f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes String alias = "alias"; 2632f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes keyStore.setKeyEntry(alias, secretKey, "pwd".toCharArray(), null); 2642f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 265f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // check if it is a secret key 2662f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes assertTrue(keyStore.entryInstanceOf(alias, 2672f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes KeyStore.SecretKeyEntry.class)); 2682f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 269f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes // check if it is NOT a private key 2702f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes assertFalse(keyStore.entryInstanceOf(alias, 2712f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes KeyStore.PrivateKeyEntry.class)); 2722f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes } 2732f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 275229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.security.KeyStore.TrustedCertificateEntry.toString() 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testKeyStoreTCToString() { 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Regression for HARMONY-1542 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // no exception expected 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project class TestX509Certificate extends X509Certificate { 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = 1L; 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkValidity() throws CertificateExpiredException,CertificateNotYetValidException {} 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void checkValidity(Date p) throws CertificateExpiredException, CertificateNotYetValidException {} 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getVersion() { 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public BigInteger getSerialNumber() { 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Principal getIssuerDN() { 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Principal getSubjectDN() { 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Date getNotBefore() { 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Date getNotAfter() { 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] getTBSCertificate() throws CertificateEncodingException { 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] getSignature() { 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getSigAlgName() { 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String getSigAlgOID() { 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] getSigAlgParams() { 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean[] getIssuerUniqueID() { 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean[] getSubjectUniqueID() { 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean[] getKeyUsage() { 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int getBasicConstraints() { 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] getEncoded() throws CertificateEncodingException { 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void verify(PublicKey p) 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateException, 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchAlgorithmException, 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InvalidKeyException, 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchProviderException, 337f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes SignatureException 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project {} 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void verify(PublicKey p0, String p1) 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateException, 341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchAlgorithmException, 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InvalidKeyException, 343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchProviderException, 344f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes SignatureException 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project {} 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public String toString() { 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public PublicKey getPublicKey() { 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean hasUnsupportedCriticalExtension() { 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set getCriticalExtensionOIDs() { 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Set getNonCriticalExtensionOIDs() { 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] getExtensionValue(String p) { 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull(new KeyStore.TrustedCertificateEntry(new TestX509Certificate()).toString()); 366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 368