|
2 | 2 |
|
3 | 3 | import java.io.ByteArrayInputStream;
|
4 | 4 | import java.io.IOException;
|
| 5 | +import java.io.OutputStream; |
5 | 6 | import java.security.KeyFactory;
|
6 | 7 | import java.security.KeyPair;
|
7 | 8 | import java.security.MessageDigest;
|
|
48 | 49 | import org.bouncycastle.asn1.cms.SignedData;
|
49 | 50 | import org.bouncycastle.asn1.cms.SignerInfo;
|
50 | 51 | import org.bouncycastle.asn1.edec.EdECObjectIdentifiers;
|
| 52 | +import org.bouncycastle.asn1.ess.ESSCertIDv2; |
| 53 | +import org.bouncycastle.asn1.ess.SigningCertificateV2; |
51 | 54 | import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
|
52 | 55 | import org.bouncycastle.asn1.ocsp.OCSPResponse;
|
53 | 56 | import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
|
54 | 57 | import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
|
55 | 58 | import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
|
| 59 | +import org.bouncycastle.asn1.x500.X500Name; |
56 | 60 | import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
|
| 61 | +import org.bouncycastle.asn1.x509.IssuerSerial; |
57 | 62 | import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
|
58 | 63 | import org.bouncycastle.cert.X509AttributeCertificateHolder;
|
59 | 64 | import org.bouncycastle.cert.X509CertificateHolder;
|
|
76 | 81 | import org.bouncycastle.cms.DefaultCMSSignatureAlgorithmNameGenerator;
|
77 | 82 | import org.bouncycastle.cms.DefaultSignedAttributeTableGenerator;
|
78 | 83 | import org.bouncycastle.cms.SignerId;
|
| 84 | +import org.bouncycastle.cms.SignerInfoGenerator; |
79 | 85 | import org.bouncycastle.cms.SignerInfoGeneratorBuilder;
|
80 | 86 | import org.bouncycastle.cms.SignerInformation;
|
81 | 87 | import org.bouncycastle.cms.SignerInformationStore;
|
|
92 | 98 | import org.bouncycastle.operator.ContentSigner;
|
93 | 99 | import org.bouncycastle.operator.DefaultDigestAlgorithmIdentifierFinder;
|
94 | 100 | import org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder;
|
| 101 | +import org.bouncycastle.operator.DigestCalculator; |
95 | 102 | import org.bouncycastle.operator.DigestCalculatorProvider;
|
96 | 103 | import org.bouncycastle.operator.OperatorCreationException;
|
97 | 104 | import org.bouncycastle.operator.bc.BcContentSignerBuilder;
|
@@ -3203,6 +3210,47 @@ public void testMixed()
|
3203 | 3210 | }
|
3204 | 3211 | }
|
3205 | 3212 |
|
| 3213 | + public void testSignerInfoGenCopyConstructor() |
| 3214 | + throws Exception |
| 3215 | + { |
| 3216 | + ContentSigner sha256Signer = new JcaContentSignerBuilder("SHA256withRSA").setProvider(BC).build(_origKP.getPrivate()); |
| 3217 | + SignerInfoGenerator signerInfoGen = new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().setProvider(BC).build()).build(sha256Signer, _origCert); |
| 3218 | + |
| 3219 | + DigestCalculator digCalc = new SHA256DigestCalculator(); |
| 3220 | + |
| 3221 | + OutputStream dOut = digCalc.getOutputStream(); |
| 3222 | + |
| 3223 | + dOut.write(_origCert.getEncoded()); |
| 3224 | + |
| 3225 | + dOut.close(); |
| 3226 | + |
| 3227 | + byte[] certHash256 = digCalc.getDigest(); |
| 3228 | + final ESSCertIDv2 essCertIDv2 = new ESSCertIDv2(certHash256, new IssuerSerial(X500Name.getInstance(_origCert.getIssuerX500Principal().getEncoded()), _origCert.getSerialNumber())); |
| 3229 | + |
| 3230 | + CMSAttributeTableGenerator signedAttrGen = new CMSAttributeTableGenerator() |
| 3231 | + { |
| 3232 | + public AttributeTable getAttributes(Map parameters) |
| 3233 | + throws CMSAttributeTableGenerationException |
| 3234 | + { |
| 3235 | + AttributeTable table = signerInfoGen.getSignedAttributeTableGenerator().getAttributes(parameters); |
| 3236 | + |
| 3237 | + if (table.get(PKCSObjectIdentifiers.id_aa_signingCertificateV2) == null) |
| 3238 | + { |
| 3239 | + return table.add(PKCSObjectIdentifiers.id_aa_signingCertificateV2, |
| 3240 | + new SigningCertificateV2(essCertIDv2)); |
| 3241 | + } |
| 3242 | + |
| 3243 | + return table; |
| 3244 | + } |
| 3245 | + }; |
| 3246 | + SignerInfoGenerator newSignerInfoGen = new SignerInfoGenerator(signerInfoGen, signedAttrGen, signerInfoGen.getUnsignedAttributeTableGenerator()); |
| 3247 | + |
| 3248 | + assertTrue(signerInfoGen.hasAssociatedCertificate()); |
| 3249 | + assertTrue(newSignerInfoGen.hasAssociatedCertificate()); |
| 3250 | + assertTrue(signerInfoGen.getUnsignedAttributeTableGenerator() == newSignerInfoGen.getUnsignedAttributeTableGenerator()); |
| 3251 | + assertTrue(newSignerInfoGen.getSignedAttributeTableGenerator() == signedAttrGen); |
| 3252 | + } |
| 3253 | + |
3206 | 3254 | public void testMSPKCS7()
|
3207 | 3255 | throws Exception
|
3208 | 3256 | {
|
|
0 commit comments