diff options
Diffstat (limited to 'libjava/java/security/cert/CertificateFactory.java')
-rw-r--r-- | libjava/java/security/cert/CertificateFactory.java | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/libjava/java/security/cert/CertificateFactory.java b/libjava/java/security/cert/CertificateFactory.java new file mode 100644 index 00000000000..b5fe2e3518e --- /dev/null +++ b/libjava/java/security/cert/CertificateFactory.java @@ -0,0 +1,259 @@ +/* CertificateFactory.java --- Certificate Factory Class + Copyright (C) 1999 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA +02111-1307 USA. + +As a special exception, if you link this library with other files to +produce an executable, this library does not by itself cause the +resulting executable to be covered by the GNU General Public License. +This exception does not however invalidate any other reasons why the +executable file might be covered by the GNU General Public License. */ + + +package java.security.cert; +import java.security.NoSuchProviderException; +import java.security.Provider; +import java.security.Security; +import java.io.InputStream; +import java.util.Collection; + +/** + This class implments the CertificateFactory class interface + used to generate certificates and certificate revocation + list (CRL) objects from their encodings. + + A certifcate factory for X.509 returns certificates of the + java.security.cert.X509Certificate class, and CRLs of the + java.security.cert.X509CRL class. + + @since JDK 1.2 + + @author Mark Benvenuto +*/ +public class CertificateFactory +{ + + private CertificateFactorySpi certFacSpi; + private Provider provider; + private String type; + + /** + Creates an instance of CertificateFactory + + @param certFacSpi A CertificateFactory engine to use + @param provider A provider to use + @param type The type of Certificate + */ + protected CertificateFactory(CertificateFactorySpi certFacSpi, Provider provider, String type) + { + this.certFacSpi = certFacSpi; + this.provider = provider; + this.type = type; + } + + + /** + Gets an instance of the CertificateFactory class representing + the specified certificate factory. If the type is not + found then, it throws CertificateException. + + @param type the type of certificate to choose + + @return a CertificateFactory repesenting the desired type + + @throws CertificateException if the type of certificate is not implemented by providers + */ + public static final CertificateFactory getInstance(String type) throws CertificateException + { + Provider[] p = Security.getProviders (); + + for (int i = 0; i < p.length; i++) + { + String classname = p[i].getProperty ("CertificateFactory." + type); + if (classname != null) + return getInstance (classname, type, p[i]); + } + + throw new CertificateException(type); + } + + + + /** + Gets an instance of the CertificateFactory class representing + the specified certificate factory from the specified provider. + If the type is not found then, it throws CertificateException. + If the provider is not found, then it throws + NoSuchProviderException. + + @param type the type of certificate to choose + + @return a CertificateFactory repesenting the desired type + + @throws CertificateException if the type of certificate is not implemented by providers + @throws NoSuchProviderException if the provider is not found + */ + public static final CertificateFactory getInstance(String type, String provider) + throws CertificateException, NoSuchProviderException + { + Provider p = Security.getProvider(provider); + if( p == null) + throw new NoSuchProviderException(); + + return getInstance (p.getProperty ("CertificateFactory." + type), + type, p); + } + + private static CertificateFactory getInstance (String classname, + String type, + Provider provider) + throws CertificateException + { + try { + return new CertificateFactory( (CertificateFactorySpi)Class.forName( classname ).newInstance(), provider, type ); + } catch( ClassNotFoundException cnfe) { + throw new CertificateException("Class not found"); + } catch( InstantiationException ie) { + throw new CertificateException("Class instantiation failed"); + } catch( IllegalAccessException iae) { + throw new CertificateException("Illegal Access"); + } + } + + + /** + Gets the provider that the class is from. + + @return the provider of this class + */ + public final Provider getProvider() + { + return provider; + } + + /** + Returns the type of the certificate supported + + @return A string with the type of certificate + */ + public final String getType() + { + return type; + } + + /** + Generates a Certificate based on the encoded data read + from the InputStream. + + The input stream must contain only one certificate. + + If there exists a specialized certificate class for the + certificate format handled by the certificate factory + then the return Ceritificate should be a typecast of it. + Ex: A X.509 CertificateFactory should return X509Certificate. + + For X.509 certificates, the certificate in inStream must be + DER encoded and supplied in binary or printable (Base64) + encoding. If the certificate is in Base64 encoding, it must be + bounded by -----BEGINCERTIFICATE-----, and + -----END CERTIFICATE-----. + + @param inStream an input stream containing the certificate data + + @return a certificate initialized with InputStream data. + + @throws CertificateException Certificate parsing error + */ + public final Certificate generateCertificate(InputStream inStream) + throws CertificateException + { + return certFacSpi.engineGenerateCertificate( inStream ); + } + + /** + Returns a collection of certificates that were read from the + input stream. It may be empty, have only one, or have + multiple certificates. + + For a X.509 certificate factory, the stream may contain a + single DER encoded certificate or a PKCS#7 certificate + chain. This is a PKCS#7 <I>SignedData</I> object with the + most significant field being <I>certificates</I>. If no + CRLs are present, then an empty collection is returned. + + @param inStream an input stream containing the certificates + + @return a collection of certificates initialized with + the InputStream data. + + @throws CertificateException Certificate parsing error + */ + public final Collection generateCertificates(InputStream inStream) + throws CertificateException + { + return certFacSpi.engineGenerateCertificates( inStream ); + } + + /** + Generates a CRL based on the encoded data read + from the InputStream. + + The input stream must contain only one CRL. + + If there exists a specialized CRL class for the + CRL format handled by the certificate factory + then the return CRL should be a typecast of it. + Ex: A X.509 CertificateFactory should return X509CRL. + + @param inStream an input stream containing the CRL data + + @return a CRL initialized with InputStream data. + + @throws CRLException CRL parsing error + */ + public final CRL generateCRL(InputStream inStream) + throws CRLException + { + return certFacSpi.engineGenerateCRL( inStream ); + } + + + /** + Generates CRLs based on the encoded data read + from the InputStream. + + For a X.509 certificate factory, the stream may contain a + single DER encoded CRL or a PKCS#7 CRL set. This is a + PKCS#7 <I>SignedData</I> object with the most significant + field being <I>crls</I>. If no CRLs are present, then an + empty collection is returned. + + @param inStream an input stream containing the CRLs + + @return a collection of CRLs initialized with + the InputStream data. + + @throws CRLException CRL parsing error + */ + public final Collection generateCRLs(InputStream inStream) + throws CRLException + { + return certFacSpi.engineGenerateCRLs( inStream ); + } + +} |