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