package org.bouncycastle.cms; import org.bouncycastle.asn1.x509.AlgorithmIdentifier; import org.bouncycastle.cert.X509CertificateHolder; import org.bouncycastle.operator.ContentVerifier; import org.bouncycastle.operator.ContentVerifierProvider; import org.bouncycastle.operator.DigestCalculator; import org.bouncycastle.operator.DigestCalculatorProvider; import org.bouncycastle.operator.OperatorCreationException; import org.bouncycastle.operator.SignatureAlgorithmIdentifierFinder; public class SignerInformationVerifier { private ContentVerifierProvider verifierProvider; private DigestCalculatorProvider digestProvider; private SignatureAlgorithmIdentifierFinder sigAlgorithmFinder; private CMSSignatureAlgorithmNameGenerator sigNameGenerator; public SignerInformationVerifier(CMSSignatureAlgorithmNameGenerator sigNameGenerator, SignatureAlgorithmIdentifierFinder sigAlgorithmFinder, ContentVerifierProvider verifierProvider, DigestCalculatorProvider digestProvider) { this.sigNameGenerator = sigNameGenerator; this.sigAlgorithmFinder = sigAlgorithmFinder; this.verifierProvider = verifierProvider; this.digestProvider = digestProvider; } public boolean hasAssociatedCertificate() { return verifierProvider.hasAssociatedCertificate(); } public X509CertificateHolder getAssociatedCertificate() { return verifierProvider.getAssociatedCertificate(); } public ContentVerifier getContentVerifier(AlgorithmIdentifier signingAlgorithm, AlgorithmIdentifier digestAlgorithm) throws OperatorCreationException { String signatureName = sigNameGenerator.getSignatureName(digestAlgorithm, signingAlgorithm); return verifierProvider.get(sigAlgorithmFinder.find(signatureName)); } public DigestCalculator getDigestCalculator(AlgorithmIdentifier algorithmIdentifier) throws OperatorCreationException { return digestProvider.get(algorithmIdentifier); } }