CertificateFactory.java revision 2f9e468ed4985edfd5e351faf2089d91e561e41d
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 Projectpackage java.security.cert; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchAlgorithmException; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.NoSuchProviderException; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Provider; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Security; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Iterator; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.fortress.Engine; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.internal.nls.Messages; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class implements the functionality of a certificate factory algorithm, 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * relying on parsing a stream of bytes. 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * It defines methods for parsing certificate chains (certificate paths) and 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <i>Certificate Revocation Lists</i> (CRLs). 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class CertificateFactory { 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store CertificateFactory service name 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final String SERVICE = "CertificateFactory"; //$NON-NLS-1$ 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Used to access common engine functionality 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static Engine engine = new Engine(SERVICE); 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store used provider 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final Provider provider; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store used CertificateFactorySpi implementation 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final CertificateFactorySpi spiImpl; 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Store used type 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final String type; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code CertificateFactory} instance. 592f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param certFacSpi 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the implementation delegate. 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param provider 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the associated provider. 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param type 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the certificate type. 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected CertificateFactory(CertificateFactorySpi certFacSpi, 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider provider, String type) { 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.provider = provider; 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.type = type; 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.spiImpl = certFacSpi; 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code CertificateFactory} instance that provides the 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * requested certificate type. 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param type 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the certificate type. 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the new {@code CertificateFactory} instance. 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateException 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified certificate type is not available at any 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * installed provider. 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code type} is {@code null}. 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final CertificateFactory getInstance(String type) 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateException { 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (type == null) { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NullPointerException(Messages.getString("security.07")); //$NON-NLS-1$ 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (engine) { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project engine.getInstance(type, null); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new CertificateFactory((CertificateFactorySpi) engine.spi, 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project engine.provider, type); 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new CertificateException(e); 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code CertificateFactory} instance from the specified 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * provider that provides the requested certificate type. 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param type 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the certificate type. 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param provider 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the provider providing certificates of the 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified type. 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the new {@code CertificateFactory} instance. 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateException 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified certificate type is not available by the 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified provider. 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NoSuchProviderException 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if no provider with the specified name can be found. 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified provider name is {@code null} or empty. 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * it {@code type} is {@code null}. 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final CertificateFactory getInstance(String type, 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project String provider) throws CertificateException, 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project NoSuchProviderException { 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if ((provider == null) || (provider.length() == 0)) { 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(Messages.getString("security.02")); //$NON-NLS-1$ 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider impProvider = Security.getProvider(provider); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (impProvider == null) { 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NoSuchProviderException(provider); 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return getInstance(type, impProvider); 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code CertificateFactory} instance from the specified 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * provider that provides the requested certificate type. 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param type 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the certificate type. 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param provider 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the name of the provider providing certificates of the 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified type. 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the new {@code CertificateFactory} instance. 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateException 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified certificate type is not available at the 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified provider. 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws IllegalArgumentException 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the specified provider is {@code null}. 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is {@code type} is {@code null}. 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final CertificateFactory getInstance(String type, 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Provider provider) throws CertificateException { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (provider == null) { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(Messages.getString("security.04")); //$NON-NLS-1$ 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (type == null) { 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new NullPointerException(Messages.getString("security.07")); //$NON-NLS-1$ 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (engine) { 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project engine.getInstance(type, provider, null); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new CertificateFactory((CertificateFactorySpi) engine.spi, 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project provider, type); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NoSuchAlgorithmException e) { 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new CertificateException(e.getMessage()); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code Provider} of the certificate factory represented by 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the certificate. 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the provider of this certificate factory. 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final Provider getProvider() { 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return provider; 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the Certificate type. 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return type of certificate being used. 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final String getType() { 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return type; 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Generates and initializes a {@code Certificate} from the provided input 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stream. 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param inStream 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the stream from where data is read to create the {@code 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Certificate}. 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an initialized Certificate. 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateException 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if parsing problems are detected. 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final Certificate generateCertificate(InputStream inStream) 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateException { 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineGenerateCertificate(inStream); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns an {@code Iterator} over the supported {@code CertPath} encodings 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (as Strings). The first element is the default encoding scheme to apply. 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an iterator over supported {@link CertPath} encodings (as 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Strings). 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final Iterator<String> getCertPathEncodings() { 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineGetCertPathEncodings(); 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Generates a {@code CertPath} (a certificate chain) from the provided 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code InputStream}. The default encoding scheme is applied. 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param inStream 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code InputStream} with encoded data. 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code CertPath} initialized from the provided data. 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateException 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if parsing problems are detected. 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final CertPath generateCertPath(InputStream inStream) 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateException { 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Iterator<String> it = getCertPathEncodings(); 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!it.hasNext()) { 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new CertificateException(Messages.getString("security.74")); //$NON-NLS-1$ 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineGenerateCertPath(inStream, it.next()); 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Generates a {@code CertPath} (a certificate chain) from the provided 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code InputStream} and the specified encoding scheme. 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param inStream 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code InputStream} containing certificate path data in 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified encoding. 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param encoding 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * encoding of the data in the input stream. 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code CertPath} initialized from the provided data. 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateException 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if parsing problems are detected. 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedOperationException 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the provider does not implement this method. 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final CertPath generateCertPath(InputStream inStream, String encoding) 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateException { 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineGenerateCertPath(inStream, encoding); 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Generates a {@code CertPath} from the provided list of certificates. The 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * encoding is the default encoding. 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param certificates 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the list containing certificates in a format supported by the 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code CertificateFactory}. 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code CertPath} initialized from the provided data. 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateException 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if parsing problems are detected. 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws UnsupportedOperationException 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the provider does not implement this method. 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final CertPath generateCertPath(List<? extends Certificate> certificates) 272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateException { 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineGenerateCertPath(certificates); 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Generates and initializes a collection of (unrelated) certificates from 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the provided input stream. 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param inStream 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the stream from which the data is read to create the 282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * collection. 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an initialized collection of certificates. 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateException 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if parsing problems are detected. 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final Collection<? extends Certificate> generateCertificates(InputStream inStream) 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateException { 289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineGenerateCertificates(inStream); 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Generates and initializes a <i>Certificate Revocation List</i> (CRL) from 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the provided input stream. 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param inStream 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the stream from where data is read to create the CRL. 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an initialized CRL. 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception CRLException 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if parsing problems are detected. 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final CRL generateCRL(InputStream inStream) throws CRLException { 303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineGenerateCRL(inStream); 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Generates and initializes a collection of <i>Certificate Revocation 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * List</i> (CRL) from the provided input stream. 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param inStream 311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the stream from which the data is read to create the CRLs. 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an initialized collection of CRLs. 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception CRLException 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if parsing problems are detected. 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public final Collection<? extends CRL> generateCRLs(InputStream inStream) 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CRLException { 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return spiImpl.engineGenerateCRLs(inStream); 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 321