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