From 7b2e2b640b0f392183f7927f692936950d3fabfc Mon Sep 17 00:00:00 2001 From: Andreas Fitzek Date: Tue, 12 Nov 2013 12:26:10 +0100 Subject: SecurityLayer commands included --- .../java/at/gv/egiz/sl/util/BaseSLConnector.java | 120 +++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 pdf-as-lib/src/main/java/at/gv/egiz/sl/util/BaseSLConnector.java (limited to 'pdf-as-lib/src/main/java/at/gv/egiz/sl/util/BaseSLConnector.java') diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/sl/util/BaseSLConnector.java b/pdf-as-lib/src/main/java/at/gv/egiz/sl/util/BaseSLConnector.java new file mode 100644 index 00000000..51b63f51 --- /dev/null +++ b/pdf-as-lib/src/main/java/at/gv/egiz/sl/util/BaseSLConnector.java @@ -0,0 +1,120 @@ +package at.gv.egiz.sl.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.Buffer; +import java.util.Arrays; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.JAXBException; + +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntity; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.entity.mime.content.StringBody; +import org.apache.http.impl.client.DefaultHttpClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.gv.egiz.pdfas.common.exceptions.PDFIOException; +import at.gv.egiz.pdfas.common.exceptions.PdfAsException; +import at.gv.egiz.pdfas.common.exceptions.SLPdfAsException; +import at.gv.egiz.pdfas.lib.impl.signing.pdfbox.PADESPDFBOXSigner; +import at.gv.egiz.sl.Base64OptRefContentType; +import at.gv.egiz.sl.CMSDataObjectRequiredMetaType; +import at.gv.egiz.sl.CreateCMSSignatureRequestType; +import at.gv.egiz.sl.CreateCMSSignatureResponseType; +import at.gv.egiz.sl.ErrorResponseType; +import at.gv.egiz.sl.InfoboxReadParamsAssocArrayType; +import at.gv.egiz.sl.InfoboxReadRequestType; +import at.gv.egiz.sl.InfoboxReadResponseType; +import at.gv.egiz.sl.MetaInfoType; +import at.gv.egiz.sl.InfoboxReadParamsAssocArrayType.ReadValue; +import at.gv.egiz.sl.ObjectFactory; + +public abstract class BaseSLConnector implements ISLConnector { + + private static final Logger logger = LoggerFactory.getLogger(BaseSLConnector.class); + + public static final String SecureSignatureKeypair = "SecureSignatureKeypair"; + + public static final String PDF_MIME_TYPE = "application/pdf"; + public static final String PDF_MIME_TYPE_DESC = "Adobe PDF-Dateien"; + + public static final String DETACHED = "detached"; + + public static final String XMLREQUEST = "XMLRequest"; + + protected ObjectFactory of = new ObjectFactory(); + + public InfoboxReadRequestType createInfoboxReadRequest() { + InfoboxReadRequestType request = new InfoboxReadRequestType(); + request.setInfoboxIdentifier("Certificates"); + InfoboxReadParamsAssocArrayType readData = new InfoboxReadParamsAssocArrayType(); + + ReadValue readValue = new ReadValue(); + readValue.setKey(SecureSignatureKeypair); + + readData.setReadValue(readValue); + request.setAssocArrayParameters(readData); + return request; + } + + public CreateCMSSignatureRequestType createCMSRequest(byte[] signatureData, int[] byteRange) { + // TODO build byte[] from signatureData and fill 0 bytes in byteRanged + if(byteRange.length % 2 != 0) { + // TODO: error + } + + 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)0); + + 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++; + } + + } + + // == MetaInfoType + MetaInfoType metaInfoType = new MetaInfoType(); + metaInfoType.setMimeType(PDF_MIME_TYPE); + metaInfoType.setDescription(PDF_MIME_TYPE_DESC); + + // == Base64OptRefContentType + Base64OptRefContentType base64OptRefContentType = new Base64OptRefContentType(); + base64OptRefContentType.setBase64Content(data); + + // == CMSDataObjectRequiredMetaType + CMSDataObjectRequiredMetaType cmsDataObjectRequiredMetaType = new CMSDataObjectRequiredMetaType(); + cmsDataObjectRequiredMetaType.setMetaInfo(metaInfoType); + cmsDataObjectRequiredMetaType.setContent(base64OptRefContentType); + // cmsDataObjectRequiredMetaType.setExcludedByteRange() + + // == CreateCMSSignatureRequestType + CreateCMSSignatureRequestType request = new CreateCMSSignatureRequestType(); + request.setKeyboxIdentifier(SecureSignatureKeypair); + request.setDataObject(cmsDataObjectRequiredMetaType); + request.setStructure(DETACHED); + + return request; + } + +} -- cgit v1.2.3