aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
diff options
context:
space:
mode:
authortknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2008-01-18 15:13:13 +0000
committertknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2008-01-18 15:13:13 +0000
commit877758d9ec4deb53aad8a6c1d8669cc7186b1a48 (patch)
tree97cbeef0ef915511f94782d2501b283b8a077e2e /src/main/java/at/gv/egiz/pdfas/impl/vfilter/VerificationFilterImpl.java
parent9770635e1bdcc3338468e9687545d5326a394630 (diff)
downloadpdf-as-3-877758d9ec4deb53aad8a6c1d8669cc7186b1a48.tar.gz
pdf-as-3-877758d9ec4deb53aad8a6c1d8669cc7186b1a48.tar.bz2
pdf-as-3-877758d9ec4deb53aad8a6c1d8669cc7186b1a48.zip
update dealing with incremental updates
(NoSignatureHolder introduced that indicates incremental updates. NoSignatureHolders are transported as SignatureHolder withing analysis but are finally removed to maintain compatibility. This allowes to show which signatures are followed by incremental updates containing no signature. If the last signature is followed by an incremental update, an exception is thrown to indicate an illegal modification. git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@248 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
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;
}