1e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompackage org.bouncycastle.cms;
2e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
3e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.asn1.x509.AlgorithmIdentifier;
4e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.cert.X509CertificateHolder;
5e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.ContentVerifier;
6e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.ContentVerifierProvider;
7e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.DigestCalculator;
8e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.DigestCalculatorProvider;
9e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.OperatorCreationException;
10e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstromimport org.bouncycastle.operator.SignatureAlgorithmIdentifierFinder;
11e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
12e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrompublic class SignerInformationVerifier
13e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom{
14e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private ContentVerifierProvider verifierProvider;
15e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private DigestCalculatorProvider digestProvider;
16e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private SignatureAlgorithmIdentifierFinder sigAlgorithmFinder;
17e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    private CMSSignatureAlgorithmNameGenerator sigNameGenerator;
18e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
19e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public SignerInformationVerifier(CMSSignatureAlgorithmNameGenerator sigNameGenerator, SignatureAlgorithmIdentifierFinder sigAlgorithmFinder, ContentVerifierProvider verifierProvider, DigestCalculatorProvider digestProvider)
20e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
21e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.sigNameGenerator = sigNameGenerator;
22e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.sigAlgorithmFinder = sigAlgorithmFinder;
23e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.verifierProvider = verifierProvider;
24e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        this.digestProvider = digestProvider;
25e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
26e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
27e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public boolean hasAssociatedCertificate()
28e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
29e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return verifierProvider.hasAssociatedCertificate();
30e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
31e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
32e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public X509CertificateHolder getAssociatedCertificate()
33e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
34e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return verifierProvider.getAssociatedCertificate();
35e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
36e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
37e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public ContentVerifier getContentVerifier(AlgorithmIdentifier signingAlgorithm, AlgorithmIdentifier digestAlgorithm)
38e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        throws OperatorCreationException
39e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
40e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        String          signatureName = sigNameGenerator.getSignatureName(digestAlgorithm, signingAlgorithm);
41e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
42e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return verifierProvider.get(sigAlgorithmFinder.find(signatureName));
43e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
44e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom
45e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    public DigestCalculator getDigestCalculator(AlgorithmIdentifier algorithmIdentifier)
46e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        throws OperatorCreationException
47e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    {
48e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom        return digestProvider.get(algorithmIdentifier);
49e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom    }
50e6bf3e8dfa2804891a82075cb469b736321b4827Brian Carlstrom}
51