diff options
| author | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2014-02-18 11:00:11 +0100 | 
|---|---|---|
| committer | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2014-02-18 11:07:36 +0100 | 
| commit | 9496bb87c0789d819689a8750385079e44f515ee (patch) | |
| tree | a45f663f47fb01aa4ab17624509874579037b7b8 /pdf-as-common/src/main | |
| parent | c2accdef2e43307954718ad5683c881155588365 (diff) | |
| download | pdf-as-4-9496bb87c0789d819689a8750385079e44f515ee.tar.gz pdf-as-4-9496bb87c0789d819689a8750385079e44f515ee.tar.bz2 pdf-as-4-9496bb87c0789d819689a8750385079e44f515ee.zip | |
Moved signature data creation to PDFUtils
Diffstat (limited to 'pdf-as-common/src/main')
| -rw-r--r-- | pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/PDFUtils.java | 48 | ||||
| -rw-r--r-- | pdf-as-common/src/main/resources/resources/messages/common.properties | 1 | 
2 files changed, 49 insertions, 0 deletions
| diff --git a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/PDFUtils.java b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/PDFUtils.java index 8b649034..2161c05a 100644 --- a/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/PDFUtils.java +++ b/pdf-as-common/src/main/java/at/gv/egiz/pdfas/common/utils/PDFUtils.java @@ -1,6 +1,7 @@  package at.gv.egiz.pdfas.common.utils;  import java.util.ArrayList; +import java.util.Arrays;  import java.util.List;  import org.apache.pdfbox.pdmodel.PDDocument; @@ -8,6 +9,7 @@ import org.apache.pdfbox.pdmodel.encryption.AccessPermission;  import org.slf4j.Logger;  import org.slf4j.LoggerFactory; +import at.gv.egiz.pdfas.common.exceptions.PDFIOException;  import at.gv.egiz.pdfas.common.exceptions.PdfAsValidationException;  public class PDFUtils { @@ -28,6 +30,52 @@ public class PDFUtils {  	private static final byte range_seperation = (byte) 0x20;  	private static final byte range_end = (byte) 0x5D; +	public static int[] buildExcludeRange(int[] byteRange) throws PDFIOException { +		 +		if(byteRange.length % 2 != 0) { +			throw new PDFIOException("error.pdf.io.09"); +		} +	 +		int[] exclude_range = new int[byteRange.length-2]; +		 +		for(int i = 0; i < byteRange.length; i = i + 2) { +			int offset = byteRange[i]; +			int size = byteRange[i+1]; +			if(i + 2 < byteRange.length) { +				exclude_range[i] = offset + size; // exclude start +				exclude_range[i+1] = byteRange[i+2] - 1; // exclude end +			} +		} +		return exclude_range; +	} +	 +	public static byte[] blackOutSignature(byte[] signatureData, int[] byteRange) throws PDFIOException { +		if(byteRange.length % 2 != 0) { +			throw new PDFIOException("error.pdf.io.09"); +		} +		 +		int lastOffset = byteRange[byteRange.length - 2]; +		int lastSize = byteRange[byteRange.length - 1]; +		 +		int dataSize = lastOffset + lastSize; +		 +		byte[] data = new byte[dataSize]; +		int currentdataOff = 0; +		 +		Arrays.fill(data, (byte)0x0); +		 +		for(int i = 0; i < byteRange.length; i = i + 2) { +			int offset = byteRange[i]; +			int size = byteRange[i+1]; +			 +			for(int j = 0; j < size; j++) { +				data[offset + j] = signatureData[currentdataOff]; +				currentdataOff++; +			} +		} +		return data; +	} +	  	private static int extractASCIIInteger(byte[] data, int offset) {  		int nextsepp = nextSeperator(data, offset); diff --git a/pdf-as-common/src/main/resources/resources/messages/common.properties b/pdf-as-common/src/main/resources/resources/messages/common.properties index bdae59ca..3e7f3d55 100644 --- a/pdf-as-common/src/main/resources/resources/messages/common.properties +++ b/pdf-as-common/src/main/resources/resources/messages/common.properties @@ -10,6 +10,7 @@ error.pdf.io.05=Security Layer element not available  error.pdf.io.06=MOA-SS Error %s [%s] [%s [%s]]  error.pdf.io.07=No CMS Signature in MOA SS Response  error.pdf.io.08=MOA-SS Error communication error +error.pdf.io.09=Invalid PDF byteRange  #PDF Stamper Errors  error.pdf.stamp.01=Failed to load true type font | 
