org.bouncycastle.cert.jcajce.JcaCertStoreBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcpkix-jdk15on Show documentation
Show all versions of bcpkix-jdk15on Show documentation
The Bouncy Castle Java APIs for CMS, PKCS, EAC, TSP, CMP, CRMF, OCSP, and certificate generation. This jar contains APIs for JDK 1.5 and up. The APIs can be used in conjunction with a JCE/JCA provider such as the one provided with the Bouncy Castle Cryptography APIs.
The newest version!
package org.bouncycastle.cert.jcajce;
import java.security.GeneralSecurityException;
import java.security.Provider;
import java.security.cert.CRLException;
import java.security.cert.CertStore;
import java.security.cert.CertificateException;
import java.security.cert.CollectionCertStoreParameters;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.bouncycastle.cert.X509CRLHolder;
import org.bouncycastle.cert.X509CertificateHolder;
import org.bouncycastle.util.Store;
/**
* Builder to create a CertStore from certificate and CRL stores.
*/
public class JcaCertStoreBuilder
{
private List certs = new ArrayList();
private List crls = new ArrayList();
private Object provider;
private JcaX509CertificateConverter certificateConverter = new JcaX509CertificateConverter();
private JcaX509CRLConverter crlConverter = new JcaX509CRLConverter();
private String type = "Collection";
/**
* Add a store full of X509CertificateHolder objects.
*
* @param certStore a store of X509CertificateHolder objects.
*/
public JcaCertStoreBuilder addCertificates(Store certStore)
{
certs.addAll(certStore.getMatches(null));
return this;
}
/**
* Add a single certificate.
*
* @param cert the X509 certificate holder containing the certificate.
*/
public JcaCertStoreBuilder addCertificate(X509CertificateHolder cert)
{
certs.add(cert);
return this;
}
/**
* Add a store full of X509CRLHolder objects.
* @param crlStore a store of X509CRLHolder objects.
*/
public JcaCertStoreBuilder addCRLs(Store crlStore)
{
crls.addAll(crlStore.getMatches(null));
return this;
}
/**
* Add a single CRL.
*
* @param crl the X509 CRL holder containing the CRL.
*/
public JcaCertStoreBuilder addCRL(X509CRLHolder crl)
{
crls.add(crl);
return this;
}
public JcaCertStoreBuilder setProvider(String providerName)
{
certificateConverter.setProvider(providerName);
crlConverter.setProvider(providerName);
this.provider = providerName;
return this;
}
public JcaCertStoreBuilder setProvider(Provider provider)
{
certificateConverter.setProvider(provider);
crlConverter.setProvider(provider);
this.provider = provider;
return this;
}
/**
* Set the type of the CertStore generated. By default it is "Collection".
*
* @param type type of CertStore passed to CertStore.getInstance().
* @return the current builder.
*/
public JcaCertStoreBuilder setType(String type)
{
this.type = type;
return this;
}
/**
* Build the CertStore from the current inputs.
*
* @return a CertStore.
* @throws GeneralSecurityException
*/
public CertStore build()
throws GeneralSecurityException
{
CollectionCertStoreParameters params = convertHolders(certificateConverter, crlConverter);
if (provider instanceof String)
{
return CertStore.getInstance(type, params, (String)provider);
}
if (provider instanceof Provider)
{
return CertStore.getInstance(type, params, (Provider)provider);
}
return CertStore.getInstance(type, params);
}
private CollectionCertStoreParameters convertHolders(JcaX509CertificateConverter certificateConverter, JcaX509CRLConverter crlConverter)
throws CertificateException, CRLException
{
List jcaObjs = new ArrayList(certs.size() + crls.size());
for (Iterator it = certs.iterator(); it.hasNext();)
{
jcaObjs.add(certificateConverter.getCertificate((X509CertificateHolder)it.next()));
}
for (Iterator it = crls.iterator(); it.hasNext();)
{
jcaObjs.add(crlConverter.getCRL((X509CRLHolder)it.next()));
}
return new CollectionCertStoreParameters(jcaObjs);
}
}