Home | History | Annotate | Download | only in jcajce
      1 package org.bouncycastle.cms.jcajce;
      2 
      3 import java.security.Provider;
      4 import java.security.PublicKey;
      5 import java.security.cert.CertificateException;
      6 import java.security.cert.X509Certificate;
      7 
      8 import org.bouncycastle.cert.X509CertificateHolder;
      9 import org.bouncycastle.cms.CMSSignatureAlgorithmNameGenerator;
     10 import org.bouncycastle.cms.DefaultCMSSignatureAlgorithmNameGenerator;
     11 import org.bouncycastle.cms.SignerInformationVerifier;
     12 import org.bouncycastle.operator.ContentVerifierProvider;
     13 import org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder;
     14 import org.bouncycastle.operator.DigestCalculatorProvider;
     15 import org.bouncycastle.operator.OperatorCreationException;
     16 import org.bouncycastle.operator.SignatureAlgorithmIdentifierFinder;
     17 import org.bouncycastle.operator.jcajce.JcaContentVerifierProviderBuilder;
     18 import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder;
     19 
     20 public class JcaSignerInfoVerifierBuilder
     21 {
     22     private Helper helper = new Helper();
     23     private DigestCalculatorProvider digestProvider;
     24     private CMSSignatureAlgorithmNameGenerator sigAlgNameGen = new DefaultCMSSignatureAlgorithmNameGenerator();
     25     private SignatureAlgorithmIdentifierFinder sigAlgIDFinder = new DefaultSignatureAlgorithmIdentifierFinder();
     26 
     27     public JcaSignerInfoVerifierBuilder(DigestCalculatorProvider digestProvider)
     28     {
     29         this.digestProvider = digestProvider;
     30     }
     31 
     32     public JcaSignerInfoVerifierBuilder setProvider(Provider provider)
     33     {
     34         this.helper = new ProviderHelper(provider);
     35 
     36         return this;
     37     }
     38 
     39     public JcaSignerInfoVerifierBuilder setProvider(String providerName)
     40     {
     41         this.helper = new NamedHelper(providerName);
     42 
     43         return this;
     44     }
     45 
     46     /**
     47      * Override the default signature algorithm name generator.
     48      *
     49      * @param sigAlgNameGen the algorithm name generator to use.
     50      * @return the current builder.
     51      */
     52     public JcaSignerInfoVerifierBuilder setSignatureAlgorithmNameGenerator(CMSSignatureAlgorithmNameGenerator sigAlgNameGen)
     53     {
     54         this.sigAlgNameGen = sigAlgNameGen;
     55 
     56         return this;
     57     }
     58 
     59     public JcaSignerInfoVerifierBuilder setSignatureAlgorithmFinder(SignatureAlgorithmIdentifierFinder sigAlgIDFinder)
     60     {
     61         this.sigAlgIDFinder = sigAlgIDFinder;
     62 
     63         return this;
     64     }
     65 
     66     public SignerInformationVerifier build(X509CertificateHolder certHolder)
     67         throws OperatorCreationException, CertificateException
     68     {
     69         return new SignerInformationVerifier(sigAlgNameGen, sigAlgIDFinder, helper.createContentVerifierProvider(certHolder), digestProvider);
     70     }
     71 
     72     public SignerInformationVerifier build(X509Certificate certificate)
     73         throws OperatorCreationException
     74     {
     75         return new SignerInformationVerifier(sigAlgNameGen, sigAlgIDFinder, helper.createContentVerifierProvider(certificate), digestProvider);
     76     }
     77 
     78     public SignerInformationVerifier build(PublicKey pubKey)
     79         throws OperatorCreationException
     80     {
     81         return new SignerInformationVerifier(sigAlgNameGen, sigAlgIDFinder, helper.createContentVerifierProvider(pubKey), digestProvider);
     82     }
     83 
     84     private class Helper
     85     {
     86         ContentVerifierProvider createContentVerifierProvider(PublicKey publicKey)
     87             throws OperatorCreationException
     88         {
     89             return new JcaContentVerifierProviderBuilder().build(publicKey);
     90         }
     91 
     92         ContentVerifierProvider createContentVerifierProvider(X509Certificate certificate)
     93             throws OperatorCreationException
     94         {
     95             return new JcaContentVerifierProviderBuilder().build(certificate);
     96         }
     97 
     98         ContentVerifierProvider createContentVerifierProvider(X509CertificateHolder certHolder)
     99             throws OperatorCreationException, CertificateException
    100         {
    101             return new JcaContentVerifierProviderBuilder().build(certHolder);
    102         }
    103 
    104         DigestCalculatorProvider createDigestCalculatorProvider()
    105             throws OperatorCreationException
    106         {
    107             return new JcaDigestCalculatorProviderBuilder().build();
    108         }
    109     }
    110 
    111     private class NamedHelper
    112         extends Helper
    113     {
    114         private final String providerName;
    115 
    116         public NamedHelper(String providerName)
    117         {
    118             this.providerName = providerName;
    119         }
    120 
    121         ContentVerifierProvider createContentVerifierProvider(PublicKey publicKey)
    122             throws OperatorCreationException
    123         {
    124             return new JcaContentVerifierProviderBuilder().setProvider(providerName).build(publicKey);
    125         }
    126 
    127         ContentVerifierProvider createContentVerifierProvider(X509Certificate certificate)
    128             throws OperatorCreationException
    129         {
    130             return new JcaContentVerifierProviderBuilder().setProvider(providerName).build(certificate);
    131         }
    132 
    133         DigestCalculatorProvider createDigestCalculatorProvider()
    134             throws OperatorCreationException
    135         {
    136             return new JcaDigestCalculatorProviderBuilder().setProvider(providerName).build();
    137         }
    138 
    139         ContentVerifierProvider createContentVerifierProvider(X509CertificateHolder certHolder)
    140             throws OperatorCreationException, CertificateException
    141         {
    142             return new JcaContentVerifierProviderBuilder().setProvider(providerName).build(certHolder);
    143         }
    144     }
    145 
    146     private class ProviderHelper
    147         extends Helper
    148     {
    149         private final Provider provider;
    150 
    151         public ProviderHelper(Provider provider)
    152         {
    153             this.provider = provider;
    154         }
    155 
    156         ContentVerifierProvider createContentVerifierProvider(PublicKey publicKey)
    157             throws OperatorCreationException
    158         {
    159             return new JcaContentVerifierProviderBuilder().setProvider(provider).build(publicKey);
    160         }
    161 
    162         ContentVerifierProvider createContentVerifierProvider(X509Certificate certificate)
    163             throws OperatorCreationException
    164         {
    165             return new JcaContentVerifierProviderBuilder().setProvider(provider).build(certificate);
    166         }
    167 
    168         DigestCalculatorProvider createDigestCalculatorProvider()
    169             throws OperatorCreationException
    170         {
    171             return new JcaDigestCalculatorProviderBuilder().setProvider(provider).build();
    172         }
    173 
    174         ContentVerifierProvider createContentVerifierProvider(X509CertificateHolder certHolder)
    175             throws OperatorCreationException, CertificateException
    176         {
    177             return new JcaContentVerifierProviderBuilder().setProvider(provider).build(certHolder);
    178         }
    179     }
    180 }
    181