[
https://issues.apache.org/jira/browse/PDFBOX-3011?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14949462#comment-14949462
]
Tilman Hausherr edited comment on PDFBOX-3011 at 10/8/15 9:56 PM:
------------------------------------------------------------------
The difference to make it work again is to use the sign code from the non
visual method
{code}
List<Certificate> certList = new ArrayList<Certificate>();
certList.add(cert[0]);
Store certs = new JcaCertStore(certList);
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
org.bouncycastle.asn1.x509.Certificate certificate =
org.bouncycastle.asn1.x509.Certificate.getInstance(ASN1Primitive.fromByteArray(cert[0].getEncoded()));
ContentSigner sha1Signer = new
JcaContentSignerBuilder("SHA256WithRSA").build(privKey);
gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
new
JcaDigestCalculatorProviderBuilder().build()).build(sha1Signer, new
X509CertificateHolder(certificate)));
gen.addCertificates(certs);
CMSProcessableInputStream msg = new
CMSProcessableInputStream(content);
CMSSignedData signedData = gen.generate(msg, false);
return signedData.getEncoded();
{code}
The code from the non visual method was changed in PDFBOX-1822 in [
https://svn.apache.org/r1659342 ]. However CreateVisibleSignature was not
changed at that time.
was (Author: tilman):
The difference is using the sign code from the non visual method
{code}
List<Certificate> certList = new ArrayList<Certificate>();
certList.add(cert[0]);
Store certs = new JcaCertStore(certList);
CMSSignedDataGenerator gen = new CMSSignedDataGenerator();
org.bouncycastle.asn1.x509.Certificate certificate =
org.bouncycastle.asn1.x509.Certificate.getInstance(ASN1Primitive.fromByteArray(cert[0].getEncoded()));
ContentSigner sha1Signer = new
JcaContentSignerBuilder("SHA256WithRSA").build(privKey);
gen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
new
JcaDigestCalculatorProviderBuilder().build()).build(sha1Signer, new
X509CertificateHolder(certificate)));
gen.addCertificates(certs);
CMSProcessableInputStream msg = new
CMSProcessableInputStream(content);
CMSSignedData signedData = gen.generate(msg, false);
return signedData.getEncoded();
{code}
The code from the non visual method was changed in PDFBOX-1822 in [
https://svn.apache.org/r1659342 ]. However CreateVisibleSignature was not
changed at that time.
> Find out why trunk CreateVisibleSignature example produces incorrect output
> pdf
> -------------------------------------------------------------------------------
>
> Key: PDFBOX-3011
> URL: https://issues.apache.org/jira/browse/PDFBOX-3011
> Project: PDFBox
> Issue Type: Task
> Components: Signing
> Affects Versions: 2.0.0
> Environment: OS X Yosemite on MBP 2,6 GHz Intel Core i7, 16 GB 1600
> Mhz DDR3
> java version "1.7.0_45"
> Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
> Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
> Reporter: Rafael Gomez
> Fix For: 2.0.0
>
> Attachments: mix_example_correct_signed_pdf,
> trunk_createvisiblesignature_example_incorrect_signed_pdf
>
>
> To evaluate Apache's PDFBox library, I created a simple sample based on trunk
> CreateVisibleSignature and CreateSignature. The reason for combining those 2
> samples was that each provided features that I wanted to test. The created
> "mix" example is in SignPDFPoC.java.
> The initial problem I faced is related to the sentence closing the
> SignatureOptions right before calling saveIncremental on the relevant
> document object. Once I moved the 'options.close()' sentence to a better
> position (see PDFBOX-3010), SignPDFPoC started to produce correct output,
> signed, pdf files. And once I added my test certificate chain to the trusted
> identities, the signature validates correctly.
> After examining the produced, signed, pdf, both via Signature Panel on Adobe
> Reader and via the file itself (binary), I got stuck on "Field: Signature1".
> I initially supposed that PDVisibleSignDesigner.signatureFieldName was used
> for that purpose. But it does not seem to be the case. Moreover, for
> invisible signatures, no PDVisibleSignDesigner is used, so there must be a
> different way.
> So I decided to build and execute the original CreateVisibleSignature from
> trunk to check whether it did something different regarding "Field:
> Signature1" that I could have missed in my "mix" example. This is how I found
> out that the trunk CreateVisibleSignature example produces incorrect pdf
> files. Or I must be doing something terribly wrong that, in advanced, I
> apologize for.
> I attach complete zip files for reproducing the observation:
> - mix_example_correct_signed_pdf
> - trunk_createvisiblesignature_example_incorrect_signed_pdf
> Simply add the .zip suffix, unpack and run the corresponding _execute.sh
> script. There are already .class files available. The needed dependencies are
> also present. As test p12 containing a certificate chain, test pdf file and
> test image.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]