From edd5756535f4a3cf9897837510dc12168715bdd5 Mon Sep 17 00:00:00 2001 From: tknall Date: Wed, 2 Dec 2009 18:11:11 +0000 Subject: Non-textual objects may be extracted during the analysis phase of the signature verification process git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@485 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../egiz/pdfas/api/analyze/AnalyzeParameters.java | 16 ++++++++++ .../gv/egiz/pdfas/api/analyze/AnalyzeResult.java | 14 ++++++++ .../gv/egiz/pdfas/api/verify/VerifyParameters.java | 12 +++---- .../at/gv/egiz/pdfas/api/verify/VerifyResults.java | 10 ++++-- .../at/gv/egiz/pdfas/impl/api/PdfAsObject.java | 19 +++++++---- .../pdfas/impl/api/analyze/AnalyzeResultImpl.java | 37 ++++++++++++++++++++++ .../pdfas/impl/api/verify/VerifyResultsImpl.java | 9 ++++++ 7 files changed, 102 insertions(+), 15 deletions(-) (limited to 'src/main') diff --git a/src/main/java/at/gv/egiz/pdfas/api/analyze/AnalyzeParameters.java b/src/main/java/at/gv/egiz/pdfas/api/analyze/AnalyzeParameters.java index 0ab854c..b0ad28b 100644 --- a/src/main/java/at/gv/egiz/pdfas/api/analyze/AnalyzeParameters.java +++ b/src/main/java/at/gv/egiz/pdfas/api/analyze/AnalyzeParameters.java @@ -33,6 +33,8 @@ public class AnalyzeParameters */ protected String verifyMode = Constants.VERIFY_MODE_FULL_CONSERVATIVE; + protected boolean returnNonTextualObjects = false; + /** * @return the document */ @@ -65,5 +67,19 @@ public class AnalyzeParameters this.verifyMode = verifyMode; } + public boolean isReturnNonTextualObjects() { + return this.returnNonTextualObjects; + } + + /** + * Tells if non text object of the signed pdf should be extracted and returned. + * One should show this to the user, especially in case of textual signature. + * Defaults to false + * + * @param returnNonTextualObjects + */ + public void setReturnNonTextualObjects(boolean returnNonTextualObjects) { + this.returnNonTextualObjects = returnNonTextualObjects; + } } diff --git a/src/main/java/at/gv/egiz/pdfas/api/analyze/AnalyzeResult.java b/src/main/java/at/gv/egiz/pdfas/api/analyze/AnalyzeResult.java index d063b76..c9dde9e 100644 --- a/src/main/java/at/gv/egiz/pdfas/api/analyze/AnalyzeResult.java +++ b/src/main/java/at/gv/egiz/pdfas/api/analyze/AnalyzeResult.java @@ -29,4 +29,18 @@ public interface AnalyzeResult public List getSignatures() throws PdfAsException; public List getNoSignatures(); + + /** + * Returns non textual data from pdf provided that {@link AnalyzeParameters#setReturnNonTextualObjects(boolean)} + * has been set {@code true}. + * @return List of {@link NonTextObjectInfo} + */ + public List getNonTextualObjects(); + + /** + * Returns true if non textual objects have been found, false if not. + * @return true if non textual objects have been found, false if not. + */ + public boolean hasNonTextualObjects(); + } diff --git a/src/main/java/at/gv/egiz/pdfas/api/verify/VerifyParameters.java b/src/main/java/at/gv/egiz/pdfas/api/verify/VerifyParameters.java index 4f60bea..793764b 100644 --- a/src/main/java/at/gv/egiz/pdfas/api/verify/VerifyParameters.java +++ b/src/main/java/at/gv/egiz/pdfas/api/verify/VerifyParameters.java @@ -78,7 +78,7 @@ public class VerifyParameters */ protected boolean returnHashInputData = false; - protected boolean returnNonTextObjects = false; + protected boolean returnNonTextualObjects = false; /** * @return the document @@ -182,8 +182,8 @@ public class VerifyParameters this.returnHashInputData = returnHashInputData; } - public boolean isReturnNonTextObjects() { - return this.returnNonTextObjects; + public boolean isReturnNonTextualObjects() { + return this.returnNonTextualObjects; } /** @@ -191,10 +191,10 @@ public class VerifyParameters * One should show this to the user, especially in case of textual signature. * Defaults to false * - * @param returnNonTextObjects + * @param returnNonTextualObjects */ - public void setReturnNonTextObjects(boolean returnNonTextObjects) { - this.returnNonTextObjects = returnNonTextObjects; + public void setReturnNonTextualObjects(boolean returnNonTextualObjects) { + this.returnNonTextualObjects = returnNonTextualObjects; } diff --git a/src/main/java/at/gv/egiz/pdfas/api/verify/VerifyResults.java b/src/main/java/at/gv/egiz/pdfas/api/verify/VerifyResults.java index b30c451..ef06880 100644 --- a/src/main/java/at/gv/egiz/pdfas/api/verify/VerifyResults.java +++ b/src/main/java/at/gv/egiz/pdfas/api/verify/VerifyResults.java @@ -28,11 +28,17 @@ public interface VerifyResults public List getResults(); /** - * Returns a list<{@link NonTextObjectInfo} of non textual objects in the pdf document. + * Returns a list<{@link NonTextObjectInfo}> of non textual objects in the pdf document. * Only available for textual signatures. Show this to the user who signed the textual content only! * @return List<{@link NonTextObjectInfo} or null of not available (binary signature) */ public List getNonTextualObjects(); - public void setNonTextualObjects(List nonTextObjects); + + /** + * Returns true if non textual objects have been found, false if not. + * @return true if non textual objects have been found, false if not. + */ + public boolean hasNonTextualObjects(); + } diff --git a/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java b/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java index df72a65..f98b0f0 100644 --- a/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java +++ b/src/main/java/at/gv/egiz/pdfas/impl/api/PdfAsObject.java @@ -53,8 +53,10 @@ import at.knowcenter.wag.egov.egiz.exceptions.PresentableException; import at.knowcenter.wag.egov.egiz.exceptions.SignatureException; import at.knowcenter.wag.egov.egiz.framework.SignatorFactory; import at.knowcenter.wag.egov.egiz.pdf.NoSignatureHolder; +import at.knowcenter.wag.egov.egiz.pdf.ObjectExtractor; import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder; import at.knowcenter.wag.egov.egiz.pdf.TablePos; +import at.knowcenter.wag.egov.egiz.pdf.TextualSignature; import at.knowcenter.wag.egov.egiz.sig.SignatureResponse; import at.knowcenter.wag.egov.egiz.sig.SignatureTypeDefinition; import at.knowcenter.wag.egov.egiz.sig.SignatureTypes; @@ -280,10 +282,6 @@ public class PdfAsObject implements PdfAs fillVerifyAfterAnalysisParametersWithVerifyParameters(vaap, verifyParameters); VerifyResults res = verify(vaap); - if (verifyParameters.isReturnNonTextObjects()) { - res.setNonTextualObjects(PdfAS.extractNonTextualObjects(new PdfDataSourceAdapter(verifyParameters.getDocument()))); - } - return res; } @@ -302,6 +300,7 @@ public class PdfAsObject implements PdfAs { ap.setDocument(vp.getDocument()); ap.setVerifyMode(vp.getVerifyMode()); + ap.setReturnNonTextualObjects(vp.isReturnNonTextualObjects()); } /** @@ -381,8 +380,12 @@ public class PdfAsObject implements PdfAs sigInfs.add(si); } } + List nonTextInfos = null; + if (analyzeParameters.isReturnNonTextualObjects()) { + nonTextInfos = ObjectExtractor.extractNonTextInfo(new PdfDataSourceAdapter(analyzeParameters.getDocument())); + } - return new AnalyzeResultImpl(sigInfs, noSigs); + return new AnalyzeResultImpl(sigInfs, noSigs, nonTextInfos); } /** @@ -423,8 +426,10 @@ public class PdfAsObject implements PdfAs VerifyResult vr = new VerifyResultAdapter(response, holder, verifyAfterAnalysisParameters.getVerificationTime()); vrs.add(vr); } - - return new VerifyResultsImpl(vrs); + + VerifyResultsImpl verifyResults = new VerifyResultsImpl(vrs); + verifyResults.setNonTextualObjects(verifyAfterAnalysisParameters.getAnalyzeResult().getNonTextualObjects()); + return verifyResults; } } diff --git a/src/main/java/at/gv/egiz/pdfas/impl/api/analyze/AnalyzeResultImpl.java b/src/main/java/at/gv/egiz/pdfas/impl/api/analyze/AnalyzeResultImpl.java index 7b1dffa..a50b7a1 100644 --- a/src/main/java/at/gv/egiz/pdfas/impl/api/analyze/AnalyzeResultImpl.java +++ b/src/main/java/at/gv/egiz/pdfas/impl/api/analyze/AnalyzeResultImpl.java @@ -5,7 +5,9 @@ package at.gv.egiz.pdfas.impl.api.analyze; import java.util.List; +import at.gv.egiz.pdfas.api.analyze.AnalyzeParameters; import at.gv.egiz.pdfas.api.analyze.AnalyzeResult; +import at.gv.egiz.pdfas.api.analyze.NonTextObjectInfo; import at.gv.egiz.pdfas.api.exceptions.PdfAsException; /** @@ -25,6 +27,8 @@ public class AnalyzeResultImpl implements AnalyzeResult */ protected List noSignatures = null; + protected List nonTextualObjects = null; + /** * Constructor. @@ -35,6 +39,20 @@ public class AnalyzeResultImpl implements AnalyzeResult * The found non-signature update blocks. */ public AnalyzeResultImpl(List signatures, List noSignatures) + { + this(signatures, noSignatures, null); + } + + /** + * Constructor. + * + * @param signatures + * The found signatures. + * @param noSignatures + * The found non-signature update blocks. + * @param nonTextInfos Non textual data from pdf provided that {@link AnalyzeParameters#setReturnNonTextualObjects(boolean)} was set. + */ + public AnalyzeResultImpl(List signatures, List noSignatures, List nonTextInfos) { if (signatures == null) { @@ -43,6 +61,7 @@ public class AnalyzeResultImpl implements AnalyzeResult this.signatures = signatures; this.noSignatures = noSignatures; + this.nonTextualObjects = nonTextInfos; } @@ -74,5 +93,23 @@ public class AnalyzeResultImpl implements AnalyzeResult return this.noSignatures; } + + + /** + * Returns non textual data from pdf provided that {@link AnalyzeParameters#setReturnNonTextualObjects(boolean)} + * has been set {@code true}. + * @return List of {@link NonTextObjectInfo} + */ + public List getNonTextualObjects() { + return this.nonTextualObjects; + } + + /** + * Returns true if non textual objects have been found, false if not. + * @return true if non textual objects have been found, false if not. + */ + public boolean hasNonTextualObjects() { + return this.nonTextualObjects != null && !this.nonTextualObjects.isEmpty(); + } } diff --git a/src/main/java/at/gv/egiz/pdfas/impl/api/verify/VerifyResultsImpl.java b/src/main/java/at/gv/egiz/pdfas/impl/api/verify/VerifyResultsImpl.java index c5e6713..22d446a 100644 --- a/src/main/java/at/gv/egiz/pdfas/impl/api/verify/VerifyResultsImpl.java +++ b/src/main/java/at/gv/egiz/pdfas/impl/api/verify/VerifyResultsImpl.java @@ -46,4 +46,13 @@ public class VerifyResultsImpl implements VerifyResults this.nonTextualObjects = nonTextObjects; } + + /** + * Returns true if non textual objects have been found, false if not. + * @return true if non textual objects have been found, false if not. + */ + public boolean hasNonTextualObjects() { + return this.nonTextualObjects != null && !this.nonTextualObjects.isEmpty(); + } + } -- cgit v1.2.3