aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java')
-rw-r--r--src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java38
1 files changed, 27 insertions, 11 deletions
diff --git a/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java b/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
index 2aa5c28..81b0364 100644
--- a/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
+++ b/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
@@ -37,6 +37,7 @@ import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
import at.knowcenter.wag.egov.egiz.exceptions.SignatureTypesException;
import at.knowcenter.wag.egov.egiz.pdf.AbsoluteTextSignature;
import at.knowcenter.wag.egov.egiz.pdf.EGIZDate;
+import at.knowcenter.wag.egov.egiz.pdf.NoSignatureHolder;
import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
import at.knowcenter.wag.egov.egiz.pdf.TextualSignatureHolder;
import at.knowcenter.wag.exactparser.parsing.results.FooterParseResult;
@@ -280,10 +281,13 @@ public class VerificationFilterImpl implements VerificationFilter
String check_doc = settings.getSetting(CHECK_DOCUMENT, "false");
// flags for determination of illegal incremental update
- int sigs_found = 0;
- int sigs_found_prev = 0;
+ int sigsFound = 0;
+ int sigsFoundPrev = 0;
+ boolean lastBlockWasModified = false;
List partitionResults = new ArrayList(partitions.size());
+ List nshList = new ArrayList();
+
for (int i = 0; i < partitions.size(); i++)
{
Partition p = (Partition) partitions.get(i);
@@ -307,8 +311,8 @@ public class VerificationFilterImpl implements VerificationFilter
partitionResult = extractSignaturesFromPartition(pdf, tp);
}
- sigs_found_prev = sigs_found;
- sigs_found = partitionResult.size();
+ sigsFoundPrev = sigsFound;
+ sigsFound = partitionResult.size();
partitionResults.add(partitionResult);
} else {
// should be binary partition
@@ -316,19 +320,28 @@ public class VerificationFilterImpl implements VerificationFilter
BinaryPartition binpart = (BinaryPartition)p;
// add number (n) of found binary signatures - if there is a subsequent textual partition,
// at least n+1 sigs have to be found (note: sig-blocks of binary signatures are also extracted and detected)
- sigs_found = sigs_found + binpart.blocks.size();
+ sigsFound = sigsFound + binpart.blocks.size();
}
}
- // throw an Exception if there were already signatures, but current block does not contain any signatures
- if((check_doc.equalsIgnoreCase("true"))&& ((sigs_found_prev > 0) && !(sigs_found > sigs_found_prev)) ) {
- log.error("Illegal document modification!");
- throw new VerificationFilterException(ErrorCode.MODIFIED_AFTER_SIGNATION, "The document has been modified after being signed.");
+ // add NoSignatureHolder object if there were already signatures, but current block does not contain any signatures
+ if((check_doc.equalsIgnoreCase("true"))&& ((sigsFoundPrev > 0) && !(sigsFound > sigsFoundPrev)) ) {
+
+ nshList.add(new NoSignatureHolder(sigsFound));
+
+ lastBlockWasModified = true;
+ } else {
+ lastBlockWasModified = false;
}
}
+ // throw an exception if the last update block does not contain a signature and signatures have been found in this document
+ if(lastBlockWasModified) {
+ throw new VerificationFilterException(ErrorCode.MODIFIED_AFTER_SIGNATION, "The document has been modified after being signed.");
+ }
+
List extractedSignatures = new ArrayList();
Iterator it = partitionResults.iterator();
List prevPartitionResult = null;
@@ -355,12 +368,15 @@ public class VerificationFilterImpl implements VerificationFilter
}
List signatureHolderChain = intermingleSignatures(binarySignatures, extractedSignatures);
-
+
if (oldSignature != null)
{
signatureHolderChain.add(0, oldSignature);
}
-
+
+ // add the created NoSignatureHolders
+ signatureHolderChain.addAll(nshList);
+
return signatureHolderChain;
}