| package org.bouncycastle.cert.jcajce; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.IOException; |
| import java.security.NoSuchProviderException; |
| import java.security.Provider; |
| import java.security.cert.CertificateException; |
| import java.security.cert.CertificateFactory; |
| import java.security.cert.CertificateParsingException; |
| import java.security.cert.X509Certificate; |
| |
| import org.bouncycastle.cert.X509CertificateHolder; |
| |
| /** |
| * Converter for producing X509Certificate objects tied to a specific provider from X509CertificateHolder objects. |
| */ |
| public class JcaX509CertificateConverter |
| { |
| private CertHelper helper = new DefaultCertHelper(); |
| |
| /** |
| * Base constructor, configure with the default provider. |
| */ |
| public JcaX509CertificateConverter() |
| { |
| this.helper = new DefaultCertHelper(); |
| } |
| |
| /** |
| * Set the provider to use from a Provider object. |
| * |
| * @param provider the provider to use. |
| * @return the converter instance. |
| */ |
| public JcaX509CertificateConverter setProvider(Provider provider) |
| { |
| this.helper = new ProviderCertHelper(provider); |
| |
| return this; |
| } |
| |
| /** |
| * Set the provider to use by name. |
| * |
| * @param providerName name of the provider to use. |
| * @return the converter instance. |
| */ |
| public JcaX509CertificateConverter setProvider(String providerName) |
| { |
| this.helper = new NamedCertHelper(providerName); |
| |
| return this; |
| } |
| |
| /** |
| * Use the configured converter to produce a X509Certificate object from a X509CertificateHolder object. |
| * |
| * @param certHolder the holder to be converted |
| * @return a X509Certificate object |
| * @throws CertificateException if the conversion is unable to be made. |
| */ |
| public X509Certificate getCertificate(X509CertificateHolder certHolder) |
| throws CertificateException |
| { |
| try |
| { |
| CertificateFactory cFact = helper.getCertificateFactory("X.509"); |
| |
| return (X509Certificate)cFact.generateCertificate(new ByteArrayInputStream(certHolder.getEncoded())); |
| } |
| catch (IOException e) |
| { |
| throw new ExCertificateParsingException("exception parsing certificate: " + e.getMessage(), e); |
| } |
| catch (NoSuchProviderException e) |
| { |
| throw new ExCertificateException("cannot find required provider:" + e.getMessage(), e); |
| } |
| } |
| |
| private class ExCertificateParsingException |
| extends CertificateParsingException |
| { |
| private Throwable cause; |
| |
| public ExCertificateParsingException(String msg, Throwable cause) |
| { |
| super(msg); |
| |
| this.cause = cause; |
| } |
| |
| public Throwable getCause() |
| { |
| return cause; |
| } |
| } |
| |
| private class ExCertificateException |
| extends CertificateException |
| { |
| private Throwable cause; |
| |
| public ExCertificateException(String msg, Throwable cause) |
| { |
| super(msg); |
| |
| this.cause = cause; |
| } |
| |
| public Throwable getCause() |
| { |
| return cause; |
| } |
| } |
| } |