blob: a805839864e88662fbf4629b30ff64e80fc6ec07 [file] [log] [blame]
package org.bouncycastle.cms.jcajce;
import java.security.Provider;
import java.security.PublicKey;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import org.bouncycastle.cert.X509CertificateHolder;
import org.bouncycastle.cms.CMSSignatureAlgorithmNameGenerator;
import org.bouncycastle.cms.DefaultCMSSignatureAlgorithmNameGenerator;
import org.bouncycastle.cms.SignerInformationVerifier;
import org.bouncycastle.operator.ContentVerifierProvider;
import org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder;
import org.bouncycastle.operator.DigestCalculatorProvider;
import org.bouncycastle.operator.OperatorCreationException;
import org.bouncycastle.operator.SignatureAlgorithmIdentifierFinder;
import org.bouncycastle.operator.jcajce.JcaContentVerifierProviderBuilder;
import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder;
public class JcaSignerInfoVerifierBuilder
{
private Helper helper = new Helper();
private DigestCalculatorProvider digestProvider;
private CMSSignatureAlgorithmNameGenerator sigAlgNameGen = new DefaultCMSSignatureAlgorithmNameGenerator();
private SignatureAlgorithmIdentifierFinder sigAlgIDFinder = new DefaultSignatureAlgorithmIdentifierFinder();
public JcaSignerInfoVerifierBuilder(DigestCalculatorProvider digestProvider)
{
this.digestProvider = digestProvider;
}
public JcaSignerInfoVerifierBuilder setProvider(Provider provider)
{
this.helper = new ProviderHelper(provider);
return this;
}
public JcaSignerInfoVerifierBuilder setProvider(String providerName)
{
this.helper = new NamedHelper(providerName);
return this;
}
/**
* Override the default signature algorithm name generator.
*
* @param sigAlgNameGen the algorithm name generator to use.
* @return the current builder.
*/
public JcaSignerInfoVerifierBuilder setSignatureAlgorithmNameGenerator(CMSSignatureAlgorithmNameGenerator sigAlgNameGen)
{
this.sigAlgNameGen = sigAlgNameGen;
return this;
}
public JcaSignerInfoVerifierBuilder setSignatureAlgorithmFinder(SignatureAlgorithmIdentifierFinder sigAlgIDFinder)
{
this.sigAlgIDFinder = sigAlgIDFinder;
return this;
}
public SignerInformationVerifier build(X509CertificateHolder certHolder)
throws OperatorCreationException, CertificateException
{
return new SignerInformationVerifier(sigAlgNameGen, sigAlgIDFinder, helper.createContentVerifierProvider(certHolder), digestProvider);
}
public SignerInformationVerifier build(X509Certificate certificate)
throws OperatorCreationException
{
return new SignerInformationVerifier(sigAlgNameGen, sigAlgIDFinder, helper.createContentVerifierProvider(certificate), digestProvider);
}
public SignerInformationVerifier build(PublicKey pubKey)
throws OperatorCreationException
{
return new SignerInformationVerifier(sigAlgNameGen, sigAlgIDFinder, helper.createContentVerifierProvider(pubKey), digestProvider);
}
private class Helper
{
ContentVerifierProvider createContentVerifierProvider(PublicKey publicKey)
throws OperatorCreationException
{
return new JcaContentVerifierProviderBuilder().build(publicKey);
}
ContentVerifierProvider createContentVerifierProvider(X509Certificate certificate)
throws OperatorCreationException
{
return new JcaContentVerifierProviderBuilder().build(certificate);
}
ContentVerifierProvider createContentVerifierProvider(X509CertificateHolder certHolder)
throws OperatorCreationException, CertificateException
{
return new JcaContentVerifierProviderBuilder().build(certHolder);
}
DigestCalculatorProvider createDigestCalculatorProvider()
throws OperatorCreationException
{
return new JcaDigestCalculatorProviderBuilder().build();
}
}
private class NamedHelper
extends Helper
{
private final String providerName;
public NamedHelper(String providerName)
{
this.providerName = providerName;
}
ContentVerifierProvider createContentVerifierProvider(PublicKey publicKey)
throws OperatorCreationException
{
return new JcaContentVerifierProviderBuilder().setProvider(providerName).build(publicKey);
}
ContentVerifierProvider createContentVerifierProvider(X509Certificate certificate)
throws OperatorCreationException
{
return new JcaContentVerifierProviderBuilder().setProvider(providerName).build(certificate);
}
DigestCalculatorProvider createDigestCalculatorProvider()
throws OperatorCreationException
{
return new JcaDigestCalculatorProviderBuilder().setProvider(providerName).build();
}
ContentVerifierProvider createContentVerifierProvider(X509CertificateHolder certHolder)
throws OperatorCreationException, CertificateException
{
return new JcaContentVerifierProviderBuilder().setProvider(providerName).build(certHolder);
}
}
private class ProviderHelper
extends Helper
{
private final Provider provider;
public ProviderHelper(Provider provider)
{
this.provider = provider;
}
ContentVerifierProvider createContentVerifierProvider(PublicKey publicKey)
throws OperatorCreationException
{
return new JcaContentVerifierProviderBuilder().setProvider(provider).build(publicKey);
}
ContentVerifierProvider createContentVerifierProvider(X509Certificate certificate)
throws OperatorCreationException
{
return new JcaContentVerifierProviderBuilder().setProvider(provider).build(certificate);
}
DigestCalculatorProvider createDigestCalculatorProvider()
throws OperatorCreationException
{
return new JcaDigestCalculatorProviderBuilder().setProvider(provider).build();
}
ContentVerifierProvider createContentVerifierProvider(X509CertificateHolder certHolder)
throws OperatorCreationException, CertificateException
{
return new JcaContentVerifierProviderBuilder().setProvider(provider).build(certHolder);
}
}
}