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