1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.cms.jcajce;
2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.security.Provider;
4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.security.PublicKey;
5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.security.cert.CertificateException;
6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport java.security.cert.X509Certificate;
7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.cert.X509CertificateHolder;
9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.cms.DefaultCMSSignatureAlgorithmNameGenerator;
10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.cms.SignerInformationVerifier;
11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.ContentVerifierProvider;
12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder;
13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.DigestCalculatorProvider;
14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.OperatorCreationException;
15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.jcajce.JcaContentVerifierProviderBuilder;
16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder;
17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class JcaSimpleSignerInfoVerifierBuilder
19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{
20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private Helper helper = new Helper();
21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public JcaSimpleSignerInfoVerifierBuilder setProvider(Provider provider)
23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.helper = new ProviderHelper(provider);
25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
26e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return this;
27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public JcaSimpleSignerInfoVerifierBuilder setProvider(String providerName)
30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.helper = new NamedHelper(providerName);
32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return this;
34e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
35e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
36e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public SignerInformationVerifier build(X509CertificateHolder certHolder)
37e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        throws OperatorCreationException, CertificateException
38e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
39e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return new SignerInformationVerifier(new DefaultCMSSignatureAlgorithmNameGenerator(), new DefaultSignatureAlgorithmIdentifierFinder(), helper.createContentVerifierProvider(certHolder), helper.createDigestCalculatorProvider());
40e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
41e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
42e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public SignerInformationVerifier build(X509Certificate certificate)
43e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        throws OperatorCreationException
44e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
45e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return new SignerInformationVerifier(new DefaultCMSSignatureAlgorithmNameGenerator(), new DefaultSignatureAlgorithmIdentifierFinder(), helper.createContentVerifierProvider(certificate), helper.createDigestCalculatorProvider());
46e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public SignerInformationVerifier build(PublicKey pubKey)
49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        throws OperatorCreationException
50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
51e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return new SignerInformationVerifier(new DefaultCMSSignatureAlgorithmNameGenerator(), new DefaultSignatureAlgorithmIdentifierFinder(), helper.createContentVerifierProvider(pubKey), helper.createDigestCalculatorProvider());
52e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
53e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
54e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private class Helper
55e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
56e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ContentVerifierProvider createContentVerifierProvider(PublicKey publicKey)
57e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException
58e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
59e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaContentVerifierProviderBuilder().build(publicKey);
60e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
61e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
62e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ContentVerifierProvider createContentVerifierProvider(X509Certificate certificate)
63e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException
64e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
65e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaContentVerifierProviderBuilder().build(certificate);
66e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
67e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
68e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ContentVerifierProvider createContentVerifierProvider(X509CertificateHolder certHolder)
69e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException, CertificateException
70e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
71e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaContentVerifierProviderBuilder().build(certHolder);
72e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
73e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
74e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        DigestCalculatorProvider createDigestCalculatorProvider()
75e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException
76e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
77e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaDigestCalculatorProviderBuilder().build();
78e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
79e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
80e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
81e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private class NamedHelper
82e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        extends Helper
83e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
84e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        private final String providerName;
85e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
86e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        public NamedHelper(String providerName)
87e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
88e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            this.providerName = providerName;
89e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
90e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
91e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ContentVerifierProvider createContentVerifierProvider(PublicKey publicKey)
92e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException
93e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
94e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaContentVerifierProviderBuilder().setProvider(providerName).build(publicKey);
95e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
96e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
97e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ContentVerifierProvider createContentVerifierProvider(X509Certificate certificate)
98e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException
99e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
100e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaContentVerifierProviderBuilder().setProvider(providerName).build(certificate);
101e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
102e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
103e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        DigestCalculatorProvider createDigestCalculatorProvider()
104e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException
105e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
106e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaDigestCalculatorProviderBuilder().setProvider(providerName).build();
107e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
108e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
109e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ContentVerifierProvider createContentVerifierProvider(X509CertificateHolder certHolder)
110e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException, CertificateException
111e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
112e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaContentVerifierProviderBuilder().setProvider(providerName).build(certHolder);
113e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
114e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
115e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
116e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private class ProviderHelper
117e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        extends Helper
118e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
119e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        private final Provider provider;
120e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
121e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        public ProviderHelper(Provider provider)
122e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
123e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            this.provider = provider;
124e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
125e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
126e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ContentVerifierProvider createContentVerifierProvider(PublicKey publicKey)
127e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException
128e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
129e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaContentVerifierProviderBuilder().setProvider(provider).build(publicKey);
130e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
131e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
132e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ContentVerifierProvider createContentVerifierProvider(X509Certificate certificate)
133e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException
134e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
135e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaContentVerifierProviderBuilder().setProvider(provider).build(certificate);
136e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
137e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
138e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        DigestCalculatorProvider createDigestCalculatorProvider()
139e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException
140e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
141e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaDigestCalculatorProviderBuilder().setProvider(provider).build();
142e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
143e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
144e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        ContentVerifierProvider createContentVerifierProvider(X509CertificateHolder certHolder)
145e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            throws OperatorCreationException, CertificateException
146e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        {
147e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom            return new JcaContentVerifierProviderBuilder().setProvider(provider).build(certHolder);
148e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        }
149e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
150e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom}
151