summaryrefslogtreecommitdiff
path: root/libjava/java/security/cert/CertificateFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/security/cert/CertificateFactory.java')
-rw-r--r--libjava/java/security/cert/CertificateFactory.java259
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 );
+ }
+
+}