in jsign-core/src/main/java/net/jsign/timestamp/Timestamper.java [177:196]
protected CMSSignedData modifySignedData(CMSSignedData sigData, AttributeTable unsignedAttributes, Collection<X509CertificateHolder> extraCertificates) throws IOException, CMSException {
SignerInformation signerInformation = sigData.getSignerInfos().getSigners().iterator().next();
signerInformation = SignerInformation.replaceUnsignedAttributes(signerInformation, unsignedAttributes);
Collection<X509CertificateHolder> certificates = new ArrayList<>();
certificates.addAll(sigData.getCertificates().getMatches(null));
if (extraCertificates != null) {
certificates.addAll(extraCertificates);
}
Store<X509CertificateHolder> certificateStore = new CollectionStore<>(certificates);
AuthenticodeSignedDataGenerator generator = new AuthenticodeSignedDataGenerator();
generator.addCertificates(certificateStore);
generator.addSigners(new SignerInformationStore(signerInformation));
ASN1ObjectIdentifier contentType = new ASN1ObjectIdentifier(sigData.getSignedContentTypeOID());
ASN1Encodable content = ASN1Sequence.getInstance(sigData.getSignedContent().getContent());
return generator.generate(contentType, content);
}