From 62434d4f7d4bf80b4c236c4153bffab703916ee3 Mon Sep 17 00:00:00 2001 From: Andreas Fitzek Date: Thu, 3 Oct 2013 13:38:33 +0200 Subject: no callback API implemted --- .../lib/impl/signing/pdfbox/PADESPDFBOXSigner.java | 11 +++++-- .../impl/signing/pdfbox/PdfboxSignerWrapper.java | 36 ++++++++++++++++++---- 2 files changed, 38 insertions(+), 9 deletions(-) (limited to 'pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox') diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java index 7f16a87a..3f566f06 100644 --- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PADESPDFBOXSigner.java @@ -24,6 +24,7 @@ import at.gv.egiz.pdfas.common.utils.StreamUtils; import at.gv.egiz.pdfas.common.utils.TempFileHelper; import at.gv.egiz.pdfas.lib.api.sign.IPlainSigner; import at.gv.egiz.pdfas.lib.impl.signing.IPdfSigner; +import at.gv.egiz.pdfas.lib.impl.signing.sig_interface.PDFASSignatureInterface; import at.gv.egiz.pdfas.lib.impl.stamping.TableFactory; import at.gv.egiz.pdfas.lib.impl.stamping.ValueResolver; import at.gv.egiz.pdfas.lib.impl.status.PDFObject; @@ -33,7 +34,8 @@ public class PADESPDFBOXSigner implements IPdfSigner { private static final Logger logger = LoggerFactory.getLogger(PADESPDFBOXSigner.class); - public void signPDF(PDFObject pdfObject, RequestedSignature requestedSignature, IPlainSigner signer) + public void signPDF(PDFObject pdfObject, RequestedSignature requestedSignature, + PDFASSignatureInterface signer) throws PdfAsException { String fisTmpFile = null; @@ -70,10 +72,13 @@ public class PADESPDFBOXSigner implements IPdfSigner { signature.setReason("PDF-AS Signatur"); + logger.debug("Signing @ " + signer.getSigningDate().getTime().toString()); // the signing date, needed for valid signature - signature.setSignDate(Calendar.getInstance()); + signature.setSignDate(signer.getSigningDate()); - doc.addSignature(signature, new PdfboxSignerWrapper(signer, signature)); + signer.setPDSignature(signature); + + doc.addSignature(signature, signer); // pdfbox patched (FIS -> IS) doc.saveIncremental(fis, fos); diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PdfboxSignerWrapper.java b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PdfboxSignerWrapper.java index fb629dd6..91734312 100644 --- a/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PdfboxSignerWrapper.java +++ b/pdf-as-lib/src/main/java/at/gv/egiz/pdfas/lib/impl/signing/pdfbox/PdfboxSignerWrapper.java @@ -3,35 +3,59 @@ package at.gv.egiz.pdfas.lib.impl.signing.pdfbox; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.util.Calendar; import org.apache.pdfbox.exceptions.SignatureException; import org.apache.pdfbox.pdmodel.interactive.digitalsignature.PDSignature; -import org.apache.pdfbox.pdmodel.interactive.digitalsignature.SignatureInterface; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import at.gv.egiz.pdfas.common.utils.StreamUtils; import at.gv.egiz.pdfas.common.utils.StringUtils; import at.gv.egiz.pdfas.lib.api.sign.IPlainSigner; +import at.gv.egiz.pdfas.lib.impl.signing.sig_interface.PDFASSignatureInterface; -public class PdfboxSignerWrapper implements SignatureInterface { +public class PdfboxSignerWrapper implements PDFASSignatureInterface { private static final Logger logger = LoggerFactory.getLogger(PdfboxSignerWrapper.class); private IPlainSigner signer; private PDSignature signature; - - public PdfboxSignerWrapper(IPlainSigner signer, PDSignature signature) { + private int[] byteRange; + private Calendar date; + + public PdfboxSignerWrapper(IPlainSigner signer) { this.signer = signer; - this.signature = signature; + this.date = Calendar.getInstance(); } public byte[] sign(InputStream inputStream) throws SignatureException, IOException { - byte[] signature = signer.sign(StreamUtils.inputStreamToByteArray(inputStream)); + byteRange = this.signature.getByteRange(); + byte[] signature = signer.sign(StreamUtils.inputStreamToByteArray(inputStream)); logger.debug("Signature Data: " + StringUtils.bytesToHexString(signature)); FileOutputStream fos = new FileOutputStream("/tmp/fos.bin"); fos.write(signature); fos.close(); return signature; } + + public int[] getByteRange() { + return byteRange; + } + + public String getPDFSubFilter() { + return this.signer.getPDFSubFilter(); + } + + public String getPDFFilter() { + return this.signer.getPDFFilter(); + } + + public void setPDSignature(PDSignature signature) { + this.signature = signature; + } + + public Calendar getSigningDate() { + return this.date; + } } -- cgit v1.2.3