summaryrefslogtreecommitdiff
path: root/java/security/cert/CertificateFactory.java
diff options
context:
space:
mode:
authorAaron M. Renn <arenn@urbanophile.com>1999-07-18 21:39:52 +0000
committerAaron M. Renn <arenn@urbanophile.com>1999-07-18 21:39:52 +0000
commit9c401cddf07afe7340148ba626a7a7a5dbb0cf74 (patch)
treea22eaa5802e621bb2d8b7c6ffeffe890d18017ac /java/security/cert/CertificateFactory.java
parent11a56217114c8a391aa3d8bd274df8553d03633f (diff)
downloadclasspath-9c401cddf07afe7340148ba626a7a7a5dbb0cf74.tar.gz
Initial checking of Mark Benvenuto's security code
Diffstat (limited to 'java/security/cert/CertificateFactory.java')
-rw-r--r--java/security/cert/CertificateFactory.java250
1 files changed, 250 insertions, 0 deletions
diff --git a/java/security/cert/CertificateFactory.java b/java/security/cert/CertificateFactory.java
new file mode 100644
index 000000000..023a34c60
--- /dev/null
+++ b/java/security/cert/CertificateFactory.java
@@ -0,0 +1,250 @@
+/* CertificateFactory.java --- Certificate Factory Class
+
+ Copyright (c) 1999 by Free Software Foundation, Inc.
+ Written by Mark Benvenuto <ivymccough@worldnet.att.net>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation, version 2. (see COPYING.LIB)
+
+ This program 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 this program; if not, write to the Free Software Foundation
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. */
+
+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 );
+}
+
+}