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 tests.security.cert; 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.SpiEngUtils; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.tests.support.cert.TestUtils; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport tests.support.resource.Support_Resources; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertPath; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.Certificate; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.cert.CertificateFactory; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Iterator; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Vector; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tests for <code>CertificateFactory</code> class methods 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class CertificateFactory3Test extends TestCase { 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String defaultProviderName = null; 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static Provider defaultProvider = null; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String defaultType = CertificateFactory1Test.defaultType; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String fileCertPathPki = "java/security/cert/CertPath.PkiPath"; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static boolean X509Support = false; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static String NotSupportMsg = ""; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static { 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProvider = SpiEngUtils.isSupport(defaultType, 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory1Test.srvCertificateFactory); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project X509Support = defaultProvider != null; 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProviderName = X509Support ? defaultProvider.getName() : null; 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NotSupportMsg = defaultType.concat(" is not supported"); 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static CertificateFactory[] initCertFs() throws Exception { 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!X509Support) { 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail(NotSupportMsg); 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory[] certFs = new CertificateFactory[3]; 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project certFs[0] = CertificateFactory.getInstance(defaultType); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project certFs[1] = CertificateFactory.getInstance(defaultType, 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project defaultProviderName); 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project certFs[2] = CertificateFactory 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getInstance(defaultType, defaultProvider); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return certFs; 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>generateCertificate(InputStream inStream)</code> method 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: returns Certificate 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGenerateCertificate() throws Exception { 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory[] certFs = initCertFs(); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("CertificateFactory objects were not created", certFs); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Certificate[] certs = new Certificate[3]; 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < certFs.length; i++) { 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project certs[i] = certFs[i].generateCertificate(new ByteArrayInputStream( 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestUtils.getEncodedX509Certificate())); 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(certs[0], certs[1]); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(certs[0], certs[2]); 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>generateCertificates(InputStream inStream)</code> method 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: returns Collection which consists of 1 Certificate 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGenerateCertificates() throws Exception { 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory[] certFs = initCertFs(); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("CertificateFactory objects were not created", certFs); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Certificate cert = certFs[0] 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .generateCertificate(new ByteArrayInputStream(TestUtils 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getEncodedX509Certificate())); 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < certFs.length; i++) { 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Collection<? extends Certificate> col = null; 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project col = certFs[i].generateCertificates(new ByteArrayInputStream( 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestUtils.getEncodedX509Certificate())); 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Iterator<? extends Certificate> it = col.iterator(); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect Collection size", col.size(), 1); 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect Certificate in Collection", cert, it.next()); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>generateCertPath(List certificates)</code> method 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: returns CertPath with 1 Certificate 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGenerateCertPath01() throws Exception { 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory[] certFs = initCertFs(); 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("CertificateFactory objects were not created", certFs); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // create list of certificates with one certificate 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Certificate cert = certFs[0] 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .generateCertificate(new ByteArrayInputStream(TestUtils 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getEncodedX509Certificate())); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project List<Certificate> list = new Vector<Certificate>(); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project list.add(cert); 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < certFs.length; i++) { 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertPath certPath = null; 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project certPath = certFs[i].generateCertPath(list); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(cert.getType(), certPath.getType()); 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project List<? extends Certificate> list1 = certPath.getCertificates(); 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Result list is empty", list1.isEmpty()); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Iterator<? extends Certificate> it = list1.iterator(); 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect Certificate in CertPath", cert, it.next()); 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>generateCertPath(InputStream inStream, String encoding)</code> 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method Assertion: returns CertPath with 1 Certificate 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGenerateCertPath02() throws Exception { 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory[] certFs = initCertFs(); 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("CertificateFactory objects were not created", certFs); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < certFs.length; i++) { 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertPath certPath = null; 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream fis = Support_Resources 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getResourceStream(fileCertPathPki); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project certPath = certFs[i].generateCertPath(fis, "PkiPath"); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fis.close(); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(defaultType, certPath.getType()); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project List<? extends Certificate> list1 = certPath.getCertificates(); 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Result list is empty", list1.isEmpty()); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Test for <code>generateCertPath(InputStream inStream)</code> method 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Assertion: returns CertPath with 1 Certificate 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void testGenerateCertPath03() throws Exception { 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String certPathEncoding = "PkiPath"; 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory[] certFs = initCertFs(); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertNotNull("CertificateFactory objects were not created", certFs); 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < certFs.length; i++) { 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Iterator<String> it = certFs[0].getCertPathEncodings(); 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("no CertPath encodings", it.hasNext()); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Incorrect default encoding", certPathEncoding, it 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .next()); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertPath certPath = null; 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project InputStream fis = Support_Resources 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getResourceStream(fileCertPathPki); 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project certPath = certFs[i].generateCertPath(fis); 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fis.close(); 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals(defaultType, certPath.getType()); 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project List<? extends Certificate> list1 = certPath.getCertificates(); 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse("Result list is empty", list1.isEmpty()); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 191