package java.security.cert; import java.io.InputStream; import java.security.NoSuchProviderException; import java.security.Provider; import java.util.Collection; import java.util.Iterator; import java.util.List; /** * Uses {@link CertUtil CertUtil} to actualiy load the SPI classes. * * @see CertUtil **/ public class CertificateFactory { private CertificateFactorySpi certFacSpi; private Provider provider; private String type; protected CertificateFactory( CertificateFactorySpi certFacSpi, Provider provider, String type) { this.certFacSpi = certFacSpi; this.provider = provider; this.type = type; } public final CRL generateCRL(InputStream inStream) throws CRLException { return certFacSpi.engineGenerateCRL(inStream); } public final Collection generateCRLs(InputStream inStream) throws CRLException { return certFacSpi.engineGenerateCRLs(inStream); } public final Certificate generateCertificate(InputStream inStream) throws CertificateException { return certFacSpi.engineGenerateCertificate(inStream); } public final /*Sk13 Vector*/ Collection generateCertificates(InputStream inStream) throws CertificateException { return certFacSpi.engineGenerateCertificates(inStream); } /** * Returns an iteration of the <code>CertPath</code> encodings supported * by this certificate factory, with the default encoding first. See * Appendix A in the * Java Certification Path API Programmer's Guide for information about * standard encoding names and their formats.<br /> * <br /> * Attempts to modify the returned <code>Iterator</code> via its * <code>remove</code> method result in an * <code>UnsupportedOperationException</code>. * * @return an <code>Iterator</code> over the names of the supported * <code>CertPath</code> encodings (as <code>String</code>s) */ public final Iterator getCertPathEncodings() { return certFacSpi.engineGetCertPathEncodings(); } /** * Generates a <code>CertPath</code> object and initializes it with * the data read from the <code>InputStream</code> inStream. The data * is assumed to be in the default encoding. The name of the default * encoding is the first element of the <code>Iterator</code> returned by * the {@link #getCertPathEncodings getCertPathEncodings} method. * * @param inStream an <code>InputStream</code> containing the data * * @return a <code>CertPath</code> initialized with the data from the * <code>InputStream</code> * * @exception CertificateException if an exception occurs while decoding */ public final CertPath generateCertPath(InputStream inStream) throws CertificateException { return certFacSpi.engineGenerateCertPath(inStream); } /** * Generates a <code>CertPath</code> object and initializes it with * the data read from the <code>InputStream</code> inStream. The data * is assumed to be in the specified encoding. See Appendix A in the * <a href="../../../../guide/security/certpath/CertPathProgGuide.html#AppA"> * Java Certification Path API Programmer's Guide</a> * for information about standard encoding names and their formats. * * @param inStream an <code>InputStream</code> containing the data * @param encoding the encoding used for the data * * @return a <code>CertPath</code> initialized with the data from the * <code>InputStream</code> * * @exception CertificateException if an exception occurs while decoding or * the encoding requested is not supported */ public final CertPath generateCertPath(InputStream inStream, String encoding) throws CertificateException { return certFacSpi.engineGenerateCertPath(inStream, encoding); } /** * Generates a <code>CertPath</code> object and initializes it with * a <code>List</code> of <code>Certificate</code>s.<br /> * <br /> * The certificates supplied must be of a type supported by the * <code>CertificateFactory</code>. They will be copied out of the supplied * <code>List</code> object. * * @param certificates a <code>List</code> of <code>Certificate</code>s * * @return a <code>CertPath</code> initialized with the supplied list of * certificates * * @exception CertificateException if an exception occurs */ public final CertPath generateCertPath(List certificates) throws CertificateException { return certFacSpi.engineGenerateCertPath( certificates ); } public static final CertificateFactory getInstance(String type) throws CertificateException { try { CertUtil.Implementation imp = CertUtil.getImplementation("CertificateFactory", type, (String)null); if (imp != null) { return new CertificateFactory((CertificateFactorySpi)imp.getEngine(), imp.getProvider(), type); } throw new CertificateException("can't find type " + type); } catch (NoSuchProviderException e) { throw new CertificateException(type + " not found"); } } public static final CertificateFactory getInstance( String type, String provider) throws CertificateException, NoSuchProviderException { CertUtil.Implementation imp = CertUtil.getImplementation("CertificateFactory", type, provider); if (imp != null) { return new CertificateFactory((CertificateFactorySpi)imp.getEngine(), imp.getProvider(), type); } throw new CertificateException("can't find type " + type); } public final Provider getProvider() { return provider; } public final String getType() { return type; } }