public void testSHA1WithRSAStream() throws Exception { List certList = new ArrayList(); ByteArrayOutputStream bOut = new ByteArrayOutputStream(); certList.add(new X509CertificateHolder(keyCert.getEncoded())); DigestCalculatorProvider digCalcProv = new JcaDigestCalculatorProviderBuilder().build(); CMSSignedDataStreamGenerator gen = new CMSSignedDataStreamGenerator(); gen.addSignerInfoGenerator( new JcaSignerInfoGeneratorBuilder(digCalcProv) .build( new JcaContentSignerBuilder("SHA1withRSA").build(keyPair.getPrivate()), keyCert)); gen.addCertificates(new CollectionStore(certList)); OutputStream sigOut = gen.open(bOut); sigOut.write(TEST_MESSAGE.getBytes()); sigOut.close(); CMSSignedDataParser sp = new CMSSignedDataParser( digCalcProv, new CMSTypedStream(new ByteArrayInputStream(TEST_MESSAGE.getBytes())), bOut.toByteArray()); sp.getSignedContent().drain(); // // compute expected content digest // MessageDigest md = MessageDigest.getInstance("SHA1"); byte[] contentDigest = md.digest(TEST_MESSAGE.getBytes()); Store certStore = sp.getCertificates(); SignerInformationStore signers = sp.getSignerInfos(); Collection c = signers.getSigners(); Iterator it = c.iterator(); while (it.hasNext()) { SignerInformation signer = (SignerInformation) it.next(); Collection certCollection = certStore.getMatches(signer.getSID()); Iterator certIt = certCollection.iterator(); X509CertificateHolder cert = (X509CertificateHolder) certIt.next(); assertEquals(true, signer.verify(new JcaSimpleSignerInfoVerifierBuilder().build(cert))); if (contentDigest != null) { assertTrue(MessageDigest.isEqual(contentDigest, signer.getContentDigest())); } } }
public void testSHA1WithRSAEncapsulated() throws Exception { List certList = new ArrayList(); CMSTypedData msg = new CMSProcessableByteArray(TEST_MESSAGE.getBytes()); certList.add(new X509CertificateHolder(keyCert.getEncoded())); DigestCalculatorProvider digCalcProv = new JcaDigestCalculatorProviderBuilder().build(); CMSSignedDataGenerator gen = new CMSSignedDataGenerator(); gen.addSignerInfoGenerator( new JcaSignerInfoGeneratorBuilder(digCalcProv) .build( new JcaContentSignerBuilder("SHA1withRSA").build(keyPair.getPrivate()), keyCert)); gen.addCertificates(new CollectionStore(certList)); CMSSignedData s = gen.generate(msg, true); ByteArrayInputStream bIn = new ByteArrayInputStream(s.getEncoded()); ASN1InputStream aIn = new ASN1InputStream(bIn); s = new CMSSignedData(ContentInfo.getInstance(aIn.readObject())); Store certsAndCrls = s.getCertificates(); SignerInformationStore signers = s.getSignerInfos(); Collection c = signers.getSigners(); Iterator it = c.iterator(); while (it.hasNext()) { SignerInformation signer = (SignerInformation) it.next(); Collection certCollection = certsAndCrls.getMatches(signer.getSID()); Iterator certIt = certCollection.iterator(); X509CertificateHolder cert = (X509CertificateHolder) certIt.next(); assertEquals(true, signer.verify(new JcaSimpleSignerInfoVerifierBuilder().build(cert))); } }