blob: 3051a45589bc5a81a9d441457613c8c0bf6cf198 [file] [log] [blame]
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);
}
}