From 896fbe4a5643bf8c29968f8514a1c14fd51c4d9e Mon Sep 17 00:00:00 2001 From: Tobias Kellner Date: Thu, 27 Nov 2014 20:48:16 +0100 Subject: Add PDF-AS4 signer --- .../signer/pdfas/ByteArrayPDFASDataSource.java | 67 --- .../at/asit/pdfover/signer/pdfas/PDFASHelper.java | 102 ---- .../asit/pdfover/signer/pdfas/PDFASSLRequest.java | 54 -- .../at/asit/pdfover/signer/pdfas/PDFASSigner.java | 190 ------- .../pdfover/signer/pdfas/PDFASSignerFactory.java | 31 -- .../pdfover/signer/pdfas/PDFASSigningState.java | 164 ------ .../signer/pdfas/PdfAsSignatureParameter.java | 603 --------------------- .../pdfas/exceptions/PDFASSLRequestException.java | 34 -- 8 files changed, 1245 deletions(-) delete mode 100644 pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/ByteArrayPDFASDataSource.java delete mode 100644 pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASHelper.java delete mode 100644 pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSLRequest.java delete mode 100644 pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSigner.java delete mode 100644 pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSignerFactory.java delete mode 100644 pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSigningState.java delete mode 100644 pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PdfAsSignatureParameter.java delete mode 100644 pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/exceptions/PDFASSLRequestException.java (limited to 'pdf-over-signer/pdf-over-sigpdfas/src/main/java') diff --git a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/ByteArrayPDFASDataSource.java b/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/ByteArrayPDFASDataSource.java deleted file mode 100644 index b2f95f50..00000000 --- a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/ByteArrayPDFASDataSource.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2012 by A-SIT, Secure Information Technology Center Austria - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by - * the European Commission - subsequent versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the Licence. - * You may obtain a copy of the Licence at: - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the Licence is distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and - * limitations under the Licence. - */ -package at.asit.pdfover.signer.pdfas; - -//Imports -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -import at.gv.egiz.pdfas.api.io.DataSource; - -/** - * PDF - AS Specific Data Source with byte array representation - */ -public class ByteArrayPDFASDataSource implements DataSource { - - /** - * Internal data byte array - */ - private byte[] data; - - /** - * Default constructor - * @param data The byte[] to be used - */ - public ByteArrayPDFASDataSource(byte[] data) { - this.data = data; - } - - @Override - public InputStream createInputStream() { - return new ByteArrayInputStream(this.data); - } - - @Override - public int getLength() { - return this.data.length; - } - - @Override - public byte[] getAsByteArray() { - return this.data; - } - - @Override - public String getMimeType() { - return "application/pdf"; - } - - @Override - public String getCharacterEncoding() { - return "UTF8"; - } - -} \ No newline at end of file diff --git a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASHelper.java b/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASHelper.java deleted file mode 100644 index 473bbf42..00000000 --- a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASHelper.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 2012 by A-SIT, Secure Information Technology Center Austria - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by - * the European Commission - subsequent versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the Licence. - * You may obtain a copy of the Licence at: - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the Licence is distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and - * limitations under the Licence. - */ -package at.asit.pdfover.signer.pdfas; - -//Imports -import java.io.File; - -import at.asit.pdfover.signator.SignatureException; -import at.gv.egiz.pdfas.api.PdfAs; -import at.gv.egiz.pdfas.api.exceptions.PdfAsException; -import at.gv.egiz.pdfas.api.internal.PdfAsInternal; - -/** - * Encapsulates PDF AS API Object to need just one initialization - */ -public class PDFASHelper { - - /** - * PDF AS Object - */ - private static PdfAs pdfAs = null; - - /** - * Internal Pdf AS Object - */ - private static PdfAsInternal pdfAsInternal = null; - - /** - * Creates PDF AS Object - * @return - * @throws PdfAsException - */ - private static PdfAs createPdfAs() throws PdfAsException { - File directory = new File ("."); - System.setProperty("log4j.configuration", directory.getAbsolutePath() + - "/log4j.properties"); - System.setProperty("pdf-as.work-dir", getWorkDir()); - return new at.gv.egiz.pdfas.impl.api.PdfAsObject(); - } - - /** - * Provides the working directory - * @return the working directory - */ - public static String getWorkDir() { - return System.getProperty("user.home") + "/.pdf-over"; - } - - /** - * Creates a PDF-AS Internal object - * @return the PDF-AS Internal object - * @throws PdfAsException - */ - private static PdfAsInternal createPdfAsInternal() throws PdfAsException { - return new at.gv.egiz.pdfas.impl.api.internal.PdfAsInternalObject(); - } - - /** - * Gets PDF-AS Object - * @return the PDF-AS Object - * @throws SignatureException - */ - public static synchronized PdfAs getPdfAs() throws SignatureException { - if (pdfAs == null) { - try { - pdfAs = createPdfAs(); - } catch(PdfAsException e) { - throw new SignatureException(e); - } - } - return pdfAs; - } - - /** - * Gets PDF-AS Internal object - * @return the PDF-AS Internal object - * @throws SignatureException - */ - public static synchronized PdfAsInternal getPdfAsInternal() throws SignatureException { - if(pdfAsInternal == null) { - try { - pdfAsInternal = createPdfAsInternal(); - } catch(PdfAsException e) { - throw new SignatureException(e); - } - } - return pdfAsInternal; - } -} diff --git a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSLRequest.java b/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSLRequest.java deleted file mode 100644 index f274068a..00000000 --- a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSLRequest.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2012 by A-SIT, Secure Information Technology Center Austria - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by - * the European Commission - subsequent versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the Licence. - * You may obtain a copy of the Licence at: - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the Licence is distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and - * limitations under the Licence. - */ -package at.asit.pdfover.signer.pdfas; - -// Imports -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import at.asit.pdfover.signator.ByteArrayDocumentSource; -import at.asit.pdfover.signator.SLRequest; -import at.asit.pdfover.signer.pdfas.exceptions.PDFASSLRequestException; - -/** - * PDF - AS Security Layer Request implementation - */ -public class PDFASSLRequest extends SLRequest { - - /** - * SLF4J Logger instance - **/ - private static final Logger log = LoggerFactory.getLogger(PDFASSLRequest.class); - - /** - * Default constructor - * @param slRequest - * @param signData - * @throws PDFASSLRequestException - */ - public PDFASSLRequest(String slRequest, byte[] signData) throws PDFASSLRequestException { - if(!slRequest.contains(PDFASSigner.LOC_REF)) { - log.error("PDF-AS SL request doesn't contain " + PDFASSigner.LOC_REF); - log.debug("Request: " + slRequest); - throw new PDFASSLRequestException("PDF-AS SL request doesn't contain " + PDFASSigner.LOC_REF); - } - - // Modifing SL Request ... - setRequest(slRequest.replace(PDFASSigner.LOC_REF, SLRequest.DATAOBJECT_STRING)); - - setSignatureData(new ByteArrayDocumentSource(signData)); - } -} diff --git a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSigner.java b/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSigner.java deleted file mode 100644 index 6fa1c094..00000000 --- a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSigner.java +++ /dev/null @@ -1,190 +0,0 @@ -package at.asit.pdfover.signer.pdfas; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import at.asit.pdfover.signator.BKUs; -import at.asit.pdfover.signator.ByteArrayDocumentSource; -import at.asit.pdfover.signator.SLResponse; -import at.asit.pdfover.signator.SignResult; -import at.asit.pdfover.signator.SignResultImpl; -import at.asit.pdfover.signator.SignatureException; -import at.asit.pdfover.signator.SignatureParameter; -import at.asit.pdfover.signator.SignaturePosition; -import at.asit.pdfover.signator.Signer; -import at.asit.pdfover.signator.SigningState; -import at.asit.pdfover.signer.pdfas.exceptions.PDFASSLRequestException; -import at.gv.egiz.pdfas.api.PdfAs; -import at.gv.egiz.pdfas.api.commons.Constants; -import at.gv.egiz.pdfas.api.exceptions.PdfAsException; -import at.gv.egiz.pdfas.api.internal.LocalBKUParams; -import at.gv.egiz.pdfas.api.internal.PdfAsInternal; -import at.gv.egiz.pdfas.api.sign.SignParameters; -import at.gv.egiz.pdfas.api.sign.SignatureDetailInformation; -import at.gv.egiz.pdfas.io.ByteArrayDataSink; - -/** - * PDF AS Signer Implementation - */ -public class PDFASSigner implements Signer { - - /** - * SLF4J Logger instance - **/ - static final Logger log = LoggerFactory.getLogger(PDFASSigner.class); - - /** - * The template URL - */ - protected static final String URL_TEMPLATE = "http://pdfover.4.gv.at/template"; - - /** - * Location reference string - */ - protected static final String LOC_REF = "" + URL_TEMPLATE - + ""; - - @Override - public SigningState prepare(SignatureParameter parameter) - throws SignatureException { - try { - PdfAsSignatureParameter sign_para = null; - - if (PdfAsSignatureParameter.class.isInstance(parameter)) { - sign_para = PdfAsSignatureParameter.class.cast(parameter); - } - - if (sign_para == null) { - throw new SignatureException("Incorrect SignatureParameter!"); - } - - PdfAs pdfas = PDFASHelper.getPdfAs(); - - PDFASSigningState state = new PDFASSigningState(); - - SignParameters params = new SignParameters(); - params.setSignaturePositioning(sign_para.getPDFASPositioning()); - - if (parameter.getSignatureDevice() == BKUs.LOCAL) { - params.setSignatureDevice(Constants.SIGNATURE_DEVICE_BKU); - } else if (parameter.getSignatureDevice() == BKUs.MOBILE) { - params.setSignatureDevice(Constants.SIGNATURE_DEVICE_MOBILE); - // params.setSignatureDevice(Constants.SIGNATURE_DEVICE_MOBILETEST); - } - params.setSignatureType(Constants.SIGNATURE_TYPE_BINARY); - - params.setSignatureProfileId(sign_para.getSignatureProfileID()); - - params.setOutput(new ByteArrayDataSink()); - if (parameter.getEmblem() != null) { - params.setProfileOverrideValue("SIG_LABEL", parameter - .getEmblem().getFileName()); - } - - if(parameter.getProperty("SIG_NOTE") != null) { - params.setProfileOverrideValue("SIG_NOTE", parameter.getProperty("SIG_NOTE")); - } - - // Prepare Output sink - state.setOutput(new ByteArrayDataSink()); - params.setOutput(state.getOutput()); - - params.setDocument(sign_para.getPDFASDataSource()); - - state.setSignParameters(params); - - PdfAsInternal pdfasInternal = PDFASHelper.getPdfAsInternal(); - - // Prepares the document - SignatureDetailInformation sdi = pdfas.prepareSign(params); - - state.setSignatureDetailInformation(sdi); - - // Retrieve the SL Request - String slRequest = pdfasInternal.prepareLocalSignRequest(params, - false, URL_TEMPLATE, sdi); - - at.gv.egiz.pdfas.api.io.DataSource sig_data = sdi - .getSignatureData(); - - PDFASSLRequest request = new PDFASSLRequest(slRequest, - sig_data.getAsByteArray()); - - state.setSignatureRequest(request); - - return state; - } catch (PDFASSLRequestException e) { - throw new SignatureException(e); - } catch (PdfAsException e) { - throw new SignatureException(e); - } catch (Throwable t) { - throw new SignatureException(t); - } - } - - @Override - public SignResult sign(SigningState state) throws SignatureException { - try { - PDFASSigningState sstate = null; - - if (PDFASSigningState.class.isInstance(state)) { - sstate = PDFASSigningState.class.cast(state); - } - - if (sstate == null) { - throw new SignatureException("Incorrect SigningState!"); - } - - // Retrieve objects - PdfAs pdfas = PDFASHelper.getPdfAs(); - - PdfAsInternal pdfasInternal = PDFASHelper.getPdfAsInternal(); - - SignParameters params = sstate.getSignParameters(); - - SignatureDetailInformation sdi = sstate - .getSignatureDetailInformation(); - - SLResponse slResponse = sstate.getSignatureResponse(); - - LocalBKUParams bkuParams = new LocalBKUParams( - slResponse.getServer(), slResponse.getUserAgent(), - slResponse.getSignaturLayout()); - - // Perform signature - at.gv.egiz.pdfas.api.sign.SignResult signResult = pdfasInternal - .finishLocalSign(pdfas, params, sdi, bkuParams, false, - slResponse.getSLRespone()); - - // Preparing Result Response - SignResultImpl result = new SignResultImpl(); - - // Set Signer Certificate - result.setSignerCertificate(signResult.getSignerCertificate()); - at.gv.egiz.pdfas.api.sign.pos.SignaturePosition pdfasPos = signResult - .getSignaturePosition(); - - // Set Signature position - SignaturePosition pos = new SignaturePosition(pdfasPos.getX(), - pdfasPos.getY(), pdfasPos.getPage()); - /* - * pos.SetAuto(sstate.getPDFAsSignatureParameter() - * .getSignaturePosition().useAutoPositioning()); - */ - result.setSignaturePosition(pos); - - // Set signed Document - result.setSignedDocument(new ByteArrayDocumentSource( - ((ByteArrayDataSink) sstate.getOutput()).getData())); - - return result; - } catch (PdfAsException e) { - throw new SignatureException(e); - } - } - - @Override - public SignatureParameter newParameter() { - return new PdfAsSignatureParameter(); - } -} diff --git a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSignerFactory.java b/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSignerFactory.java deleted file mode 100644 index 68a29341..00000000 --- a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSignerFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2012 by A-SIT, Secure Information Technology Center Austria - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by - * the European Commission - subsequent versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the Licence. - * You may obtain a copy of the Licence at: - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the Licence is distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and - * limitations under the Licence. - */ -package at.asit.pdfover.signer.pdfas; - -//Imports -import at.asit.pdfover.signator.Signer; -import at.asit.pdfover.signator.SignerFactory; - -/** - * Factory class for PDF-AS Signer - */ -public class PDFASSignerFactory extends SignerFactory { - - @Override - public Signer createSigner() { - return new PDFASSigner(); - } -} diff --git a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSigningState.java b/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSigningState.java deleted file mode 100644 index 4849d26e..00000000 --- a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PDFASSigningState.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2012 by A-SIT, Secure Information Technology Center Austria - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by - * the European Commission - subsequent versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the Licence. - * You may obtain a copy of the Licence at: - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the Licence is distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and - * limitations under the Licence. - */ -package at.asit.pdfover.signer.pdfas; - -//Imports -import at.asit.pdfover.signator.SLRequest; -import at.asit.pdfover.signator.SLResponse; -import at.asit.pdfover.signator.SigningState; -import at.gv.egiz.pdfas.api.io.DataSink; -import at.gv.egiz.pdfas.api.sign.SignatureDetailInformation; - -/** - * Signing State for PDFAS Wrapper - */ -public class PDFASSigningState implements SigningState { - - /** - * The Signature Layer request - */ - protected SLRequest slrequest; - - /** - * The PDF AS DataSink - */ - protected DataSink output; - - /** - * Gets the DataSink - * @return the datasink - */ - public DataSink getOutput() { - return this.output; - } - - /** - * Sets the datasing - * @param output the pdf as datasink - */ - public void setOutput(DataSink output) { - this.output = output; - } - - /** - * The Signature Layer response - */ - protected SLResponse slresponse; - - @Override - public SLRequest getSignatureRequest() { - return this.slrequest; - } - - @Override - public void setSignatureResponse(SLResponse response) { - this.slresponse = response; - } - - /** - * Sets the SL Request - * @param request The SL Request - */ - public void setSignatureRequest(SLRequest request) { - this.slrequest = request; - } - - /** - * Gets the SL Response - * @return The SL Repsonse object - */ - public SLResponse getSignatureResponse() { - return this.slresponse; - } - - /* (non-Javadoc) - * @see at.asit.pdfover.signator.SigningState#hasSignatureResponse() - */ - @Override - public boolean hasSignatureResponse() { - return this.getSignatureResponse() != null; - } - - // ---------------------------------------- - // PDF AS Specific stuff - // ---------------------------------------- - - /** - * signature detail information - */ - protected SignatureDetailInformation signatureDetailInformation; - - /** - * PDF - AS sign parameters - */ - protected at.gv.egiz.pdfas.api.sign.SignParameters signParameters; - - /** - * Signature parameters - */ - protected PdfAsSignatureParameter pdfAsSignatureParameter; - - /** - * Gets PDF - AS Signature Parameters - * @return PdfAsSignatureParameter - */ - public PdfAsSignatureParameter getPdfAsSignatureParameter() { - return this.pdfAsSignatureParameter; - } - - /** - * Sets PDF - AS Signature Parameters - * @param pdfAsSignatureParameter - */ - public void setPdfAsSignatureParameter( - PdfAsSignatureParameter pdfAsSignatureParameter) { - this.pdfAsSignatureParameter = pdfAsSignatureParameter; - } - - /** - * Get Sign Parameters - * @return SignParameters - */ - public at.gv.egiz.pdfas.api.sign.SignParameters getSignParameters() { - return this.signParameters; - } - - /** - * Sets sign Parameter - * @param signParameters - */ - public void setSignParameters( - at.gv.egiz.pdfas.api.sign.SignParameters signParameters) { - this.signParameters = signParameters; - } - - /** - * Gets the signature detail information - * @return SignatureDetailInformation - */ - public SignatureDetailInformation getSignatureDetailInformation() { - return this.signatureDetailInformation; - } - - /** - * Sets the SignatureDetailInformation - * @param signatureDetailInformation - */ - public void setSignatureDetailInformation( - SignatureDetailInformation signatureDetailInformation) { - this.signatureDetailInformation = signatureDetailInformation; - } -} diff --git a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PdfAsSignatureParameter.java b/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PdfAsSignatureParameter.java deleted file mode 100644 index 3b4c6244..00000000 --- a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/PdfAsSignatureParameter.java +++ /dev/null @@ -1,603 +0,0 @@ -/* - * Copyright 2012 by A-SIT, Secure Information Technology Center Austria - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by - * the European Commission - subsequent versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the Licence. - * You may obtain a copy of the Licence at: - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the Licence is distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and - * limitations under the Licence. - */ -package at.asit.pdfover.signer.pdfas; - -//Imports -import java.awt.Image; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.Locale; - -import javax.imageio.ImageIO; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import at.asit.pdfover.signator.SignatureDimension; -import at.asit.pdfover.signator.SignatureParameter; -import at.asit.pdfover.signator.SignaturePosition; -import at.gv.egiz.pdfas.api.io.DataSource; -import at.gv.egiz.pdfas.api.sign.pos.SignaturePositioning; -import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException; - -/** - * Implementation of SignatureParameter specific for PDF - AS Library - */ -public class PdfAsSignatureParameter extends SignatureParameter { - - /** - * SLF4J Logger instance - **/ - static final Logger log = LoggerFactory - .getLogger(PdfAsSignatureParameter.class); - - /** The profile ID for the german signature block */ - private static final String PROFILE_ID_DE = "SIGNATURBLOCK_SMALL_DE"; - /** The profile ID for the german signature block if a signature note is set */ - private static final String PROFILE_ID_DE_NOTE = "SIGNATURBLOCK_SMALL_DE_NOTE"; - /** The profile ID for the english signature block */ - private static final String PROFILE_ID_EN = "SIGNATURBLOCK_SMALL_EN"; - /** The profile ID for the english signature block if a signature note is set */ - private static final String PROFILE_ID_EN_NOTE = "SIGNATURBLOCK_SMALL_EN_NOTE"; - - private HashMap genericProperties = new HashMap(); - -// private static final int PLACEHOLDER_SCALE = 4; -// -// private int height = -1; -// -// private float perUnitHeight = 0; - - /** - * Gets the PDFAS Positioning - * - * @return SignaturePositioning - * @throws PDFDocumentException - */ - public SignaturePositioning getPDFASPositioning() - throws PDFDocumentException { - SignaturePosition position = this.getSignaturePosition(); - position.useAutoPositioning(); - - SignaturePositioning positioning = null; - if (!position.useAutoPositioning()) { - if (position.getPage() < 1) { - positioning = new SignaturePositioning(String.format( - (Locale) null, - "p:new;x:%f;y:%f;w:276", position.getX(), - position.getY())); - } else { - positioning = new SignaturePositioning(String.format( - (Locale) null, - "p:%d;x:%f;y:%f;w:276", position.getPage(), position.getX(), - position.getY())); - } - } else { - positioning = new SignaturePositioning("p:auto;x:auto;y:auto;w:276"); - } - - return positioning; - } - - /** - * Gets PDF - AS specific data source - * - * @return ByteArrayPDFASDataSource - */ - public DataSource getPDFASDataSource() { - return new ByteArrayPDFASDataSource(this.getInputDocument() - .getByteArray()); - } - - @Override - public void setProperty(String key, String value) { - this.genericProperties.put(key, value); -// this.height = -1; - } - - @Override - public String getProperty(String key) { - return this.genericProperties.get(key); - } - - /* (non-Javadoc) - * @see at.asit.pdfover.signator.SignatureParameter#setSignatureLanguage(java.lang.String) - */ - @Override - public void setSignatureLanguage(String signatureLanguage) { - super.setSignatureLanguage(signatureLanguage); -// this.height = -1; - } - - @Override - public SignatureDimension getPlaceholderDimension() { - // return new SignatureDimension(487, 206); - return new SignatureDimension(276, 126); - //return new SignatureDimension(getWidth(), getHeight()); - } - -// private static int getWidth() { -// return 276; -// } -// -// private int getHeight() { -// if (this.height < 0) -// { -// BufferedImage timage = new BufferedImage(1, 1, -// BufferedImage.TYPE_INT_RGB); -// try { -// this.height = (int) (getTableHeight(getSignatureTable(), null, getWidth() * PLACEHOLDER_SCALE, timage.getGraphics()) / PLACEHOLDER_SCALE); -// } catch (SignatureException e) { -// log.error("getTableHeight failed ...", e); -// } catch (SignatureTypesException e) { -// log.error("getTableHeight failed ...", e); -// } -// timage.flush(); -// } -// if (this.height < 0) -// return 95; -// -// return this.height; -// } - - /** - * Get the Signature Profile ID for this set of parameters - * @return the Signature Profile ID - */ - public String getSignatureProfileID() { - String lang = getSignatureLanguage(); - boolean useNote = (getProperty("SIG_NOTE") != null); - - if (lang != null && lang.equals("en")) - return useNote ? PROFILE_ID_EN_NOTE : PROFILE_ID_EN; - - return useNote ? PROFILE_ID_DE_NOTE : PROFILE_ID_DE; - } - - /* - * (non-Javadoc) - * - * @see at.asit.pdfover.signator.SignatureParameter#getPlaceholder() - */ - @Override - public Image getPlaceholder() { - - try { - Image logo = null; - try { - if (this.getEmblem() != null - && this.getEmblem().getFileName() != null - && new File(this.getEmblem().getFileName()) - .exists()) { - logo = ImageIO.read(new File(this.getEmblem() - .getFileName())); - - } - } - catch(Exception e) { - log.error("Failed to get emblem ...", e); - } - - Image img = null; - String lang = getSignatureLanguage(); - if (lang != null && lang.equals("en")) { - img = ImageIO.read(PdfAsSignatureParameter.class - .getResourceAsStream("/img/sign_prev_en.png")); - - if(logo != null) { - logo = logo.getScaledInstance(141, 140, - Image.SCALE_SMOOTH); - img.getGraphics().drawImage(logo, 6, 115, null); - } - - } else { - img = ImageIO.read(PdfAsSignatureParameter.class - .getResourceAsStream("/img/sign_prev_de.png")); - - if(logo != null) { - logo = logo.getScaledInstance(141, 140, - Image.SCALE_SMOOTH); - img.getGraphics().drawImage(logo, 6, 115, null); - } - } - return img; - } catch (IOException e) { - return new BufferedImage(getPlaceholderDimension().getWidth(), - getPlaceholderDimension().getHeight(), - BufferedImage.TYPE_INT_RGB); - } - -// Try to render signature block - disabled for now (just use images) -// -// try { -// PDFASHelper.getPdfAs(); -// -// -// float width = getPlaceholderDimension().getWidth() * PLACEHOLDER_SCALE; -// float height = getPlaceholderDimension().getHeight() * PLACEHOLDER_SCALE; -// -// Table table = this.getSignatureTable(); -// -// //log.info(table.toString()); -// -// BufferedImage timage = new BufferedImage(1, 1, -// BufferedImage.TYPE_INT_RGB); -// float[] heights = this.getTableHeights(table, table.getStyle(), -// height, (int)width, timage.getGraphics()); -// timage.flush(); -// float mheight = 0; -// -// for(int i = 0; i < heights.length; i++) { -// mheight += heights[i]; -// } -// -// this.height = (int) (mheight / PLACEHOLDER_SCALE); -// -// log.info("Width: " + width + " Height: " + height + " HShould: " + mheight); -// BufferedImage image = new BufferedImage((int) width, (int) mheight, -// BufferedImage.TYPE_INT_RGB); -// Graphics g = image.getGraphics(); -// -// g.setColor(table.getStyle().getBgColor()); -// g.fillRect(0, 0, (int) width, (int) mheight); -// -// g.setColor(Color.black); -// g.drawRect(0, 0, (int) width, (int) mheight); -// -// this.drawTable(0, 0, (int) width, (int) mheight, table, -// table.getStyle(), g, heights); -// -// g.dispose(); -// -// //save(image, "png"); -// -// return image; -// } catch (Exception ex) { -// try { -// return ImageIO.read(PdfAsSignatureParameter.class -// .getResourceAsStream("/img/fallbackPlaceholder.png")); -// } catch (IOException e) { -// return new BufferedImage(getPlaceholderDimension().getWidth(), -// getPlaceholderDimension().getHeight(), -// BufferedImage.TYPE_INT_RGB); -// } -// } - } - -// private Table getSignatureTable() throws SignatureException, SignatureTypesException { -// SignatureObject sign_obj = at.knowcenter.wag.egov.egiz.PdfAS -// .createSignatureObjectFromType(getSignatureProfileID()); -// -// sign_obj.fillValues(' ', true, false); -// sign_obj.setKZ(BinarySignator_1_1_0.MY_ID); -// return sign_obj.getAbstractTable(); -// } -// -// /** -// * used for debugging .. -// * -// * @param image -// * @param ext -// */ -// @SuppressWarnings("unused") -// @Deprecated -// private static void save(BufferedImage image, String ext) { -// String fileName = "savingAnImage"; -// File file = new File(fileName + "." + ext); -// try { -// ImageIO.write(image, ext, file); // ignore returned boolean -// log.debug("Saved as: " + file.getAbsolutePath()); -// } catch (IOException e) { -// System.out.println("Write error for " + file.getPath() + ": " -// + e.getMessage()); -// } -// } -// -// @SuppressWarnings("rawtypes") -// private int drawTable(int xoff, int yoff, int width, int height, -// Table table, Style parentstyle, Graphics g, float[] heights) { -// Style style = parentstyle; -// if (table.getStyle() != null) { -// style = table.getStyle(); -// } -// -// log.debug(String.format((Locale) null, "Table@ %dx%d", xoff, yoff)); -// -// Font oldFont = g.getFont(); -// Font font = PdfAsSignatureParameter.getFont(style); -// g.setFont(font); -// // draw background -// // graphic.setColor(style.getBgColor()); -// // graphic.fillRect(xoff, yoff, width, height); -// -// g.setColor(Color.black); -// -// // draw border -// if (style.getBorder() > 0) { -// g.setColor(Color.black); -// g.drawRect(xoff, yoff, width, height); -// } -// float[] colWidths = table.getColsRelativeWith(); -// float sum = 0; -// -// for (int i = 0; i < colWidths.length; i++) { -// sum += colWidths[i]; -// } -// -// float perUnit = width / sum; -// -// int padding = (int) (style.getPadding() * this.perUnitHeight * PLACEHOLDER_SCALE); -// -// ArrayList rows = table.getRows(); -// float roffset = 0; -// for (int rowidx = 0; rowidx < rows.size(); rowidx++) { -// ArrayList cols = (ArrayList) rows.get(rowidx); -// int rsize = (int) heights[rowidx]; -// for (int j = 0; j < cols.size(); j++) { -// Entry entry = (Entry) cols.get(j); -// float offset = 0; -// for (int k = 0; k < j; k++) { -// offset += colWidths[k] * perUnit; -// } -// if (entry.getType() == 0 || entry.getType() == 1) { -// // Text -// g.drawRect((int) (xoff + offset), -// (int) (yoff + roffset), -// (int) (colWidths[j] * perUnit), rsize); -// -// String[] lines = getLines(entry.getValue().toString(), (int)(colWidths[j] * perUnit), g.getFontMetrics(), (int) style.getPadding() * PLACEHOLDER_SCALE); -// -// for(int i = 0; i < lines.length; i++) { -// g.drawString(lines[i].toString(), (int) (xoff -// + offset + padding / PLACEHOLDER_SCALE), (int) (yoff + padding -// + roffset + (i + 1) * g.getFontMetrics().getHeight() * this.perUnitHeight)); -// } -// //g.drawString(entry.getValue().toString(), (int) (xoff -// // + offset + padding / PLACEHOLDER_SCALE), (int) (yoff + padding -// // + roffset + font.getSize() * this.perUnitHeight)); -// } else if (entry.getType() == 2) { -// // Image ... -// BufferedImage image; -// try { -// if (this.getEmblem() != null -// && this.getEmblem().getFileName() != null -// && new File(this.getEmblem().getFileName()) -// .exists()) { -// image = ImageIO.read(new File(this.getEmblem() -// .getFileName())); -// } else { -// image = ImageIO.read(new File(PDFASHelper -// .getWorkDir() -// + File.separator -// + entry.getValue().toString())); -// } -// int imgWidth = 30 * PLACEHOLDER_SCALE; -// int imgHeight = 30 * PLACEHOLDER_SCALE; -// Image img = image.getScaledInstance(imgWidth, imgHeight, -// Image.SCALE_SMOOTH); -// -// g.drawImage( -// img, -// (int) (xoff + offset + padding + (((colWidths[j] * perUnit) - imgWidth - 2* padding)) / 2), -// (int) (yoff + roffset + padding + ((rsize - imgHeight - 2* padding) / 2)), -// null); -// } catch (IOException e) { -// log.warn("Failed to paint emblem to placeholder image"); -// } -// } else { -// // Table -// -// int colWidth = (int) (colWidths[j] * perUnit); -// -// float[] cheights = this.getTableHeights( -// (Table) entry.getValue(), style, rsize, colWidth, g); -// -// this.drawTable( -// (int) (xoff + offset), -// (int) (yoff + roffset), -// (int) (colWidths[j] * perUnit), -// // (int)this.getTableHeight((Table) -// // entry.getValue(), style), -// rsize, (Table) entry.getValue(), style, g, -// cheights); -// /* -// * if (rsize < tsize) { rsize = tsize; } -// */ -// } -// } -// roffset += rsize; -// } -// -// g.setFont(oldFont); -// -// return (int) roffset; -// } -// -// private static Font getFont(Style style) { -// String def = "COURIER-NORMAL-8"; -// String fontString = style.getFont(); -// String[] font_arr = fontString.split(","); -// if (font_arr.length != 3) { -// return Font.decode(def); -// } -// Font font = Font.decode(String.format("%s-%s-%s", font_arr[0], font_arr[2], -// font_arr[1])); -// return font.deriveFont((float) font.getSize() * PLACEHOLDER_SCALE); -// } -// -// /** -// * extracts the value font -// * -// * @param style -// * the table style -// * @return the value font -// */ -// @SuppressWarnings("unused") -// private static Font getValueFont(Style style) { -// String def = "COURIER-NORMAL-8"; -// String fontString = style.getValueFont(); -// String[] font_arr = fontString.split(","); -// if (font_arr.length != 3) { -// return Font.decode(def); -// } -// Font font = Font.decode(String.format("%s-%s-%s", font_arr[0], font_arr[2], -// font_arr[1])); -// return font.deriveFont((float) font.getSize() * PLACEHOLDER_SCALE); -// } -// -// private static String[] getLines(String text, int width, FontMetrics fmetric, int padding) { -// String currentline = text; -// int averageCharWi = fmetric.charWidth('c'); -// -// int max_line_chars = (width - padding) / (averageCharWi); -// ArrayList lines = new ArrayList(); -// -// while(currentline.length() > max_line_chars) { -// int cutidx = currentline.substring(0, max_line_chars).lastIndexOf(' '); -// if(cutidx < 1) { -// cutidx = max_line_chars - 1; -// } else { -// cutidx++; -// } -// String tmpLine = currentline.substring(0, cutidx); -// lines.add(tmpLine); -// currentline = currentline.substring(cutidx); -// } -// lines.add(currentline); -// -// -// String[] arrline = new String[lines.size()]; -// for(int i = 0; i < lines.size(); i++) { -// arrline[i] = lines.get(i); -// } -// -// //log.debug(text + " needs " + lines.size() + " lines"); -// -// return arrline; -// } -// -// @SuppressWarnings("rawtypes") -// private float[] getTableHeights(Table table, Style parentstyle, float height, int width, Graphics g) { -// ArrayList rows = table.getRows(); -// float[] sizes = new float[rows.size()]; -// Style style = parentstyle; -// if (table.getStyle() != null) { -// style = table.getStyle(); -// } -// Font font = PdfAsSignatureParameter.getFont(style); -// g.setFont(font); -// -// float total_height = this.getTableHeight(table, parentstyle, width, g); -// -// float perUnit = height / total_height; -// -// this.perUnitHeight = perUnit; -// -// float[] colWidths = table.getColsRelativeWith(); -// float sum = 0; -// -// for (int i = 0; i < colWidths.length; i++) { -// sum += colWidths[i]; -// } -// -// float perUnitWidth = width / sum; -// -// for (int i = 0; i < rows.size(); i++) { -// Object robj = rows.get(i); -// ArrayList cols = (ArrayList) robj; -// float tsize = 0; -// float rsize = 0; -// for (int j = 0; j < cols.size(); j++) { -// Entry entry = (Entry) cols.get(j); -// if (entry.getType() == 0 || entry.getType() == 1) { -// int colWidth = (int) (colWidths[j] * perUnitWidth); -// -// float trsize = getLines(entry.getValue().toString(), colWidth, g.getFontMetrics(), (int) style.getPadding() * PLACEHOLDER_SCALE).length * g.getFontMetrics().getHeight() + (style.getPadding() * PLACEHOLDER_SCALE * 2); -// -// if (rsize < trsize) { -// rsize = trsize; -// } -// } else if (entry.getType() == 3) { -// -// int colWidth = (int) (colWidths[j] * perUnitWidth); -// -// tsize = this -// .getTableHeight((Table) entry.getValue(), style, colWidth, g); -// if (rsize < tsize) { -// rsize = tsize; -// } -// } -// } -// sizes[i] = perUnit * rsize; -// } -// -// return sizes; -// } -// -// @SuppressWarnings("rawtypes") -// private float getTableHeight(Table table, Style parentstyle, int width, Graphics g) { -// ArrayList rows = table.getRows(); -// Style style = parentstyle; -// if (table.getStyle() != null) { -// style = table.getStyle(); -// } -// float size = 0; -// -// float[] colWidths = table.getColsRelativeWith(); -// float sum = 0; -// -// for (int i = 0; i < colWidths.length; i++) { -// sum += colWidths[i]; -// } -// -// float perUnitWidth = width / sum; -// -// for (int i = 0; i < rows.size(); i++) { -// Object robj = rows.get(i); -// ArrayList cols = (ArrayList) robj; -// float tsize = 0; -// float rsize = 0; -// for (int j = 0; j < cols.size(); j++) { -// Entry entry = (Entry) cols.get(j); -// if (entry.getType() == 0 || entry.getType() == 1) { -// int colWidth = (int) (colWidths[j] * perUnitWidth); -// -// float trsize = getLines(entry.getValue().toString(), colWidth, g.getFontMetrics(), (int) style.getPadding() * PLACEHOLDER_SCALE).length * g.getFontMetrics().getHeight() + (style.getPadding() * PLACEHOLDER_SCALE * 2); -// -// if (rsize < trsize) { -// rsize = trsize; -// } -// -// /*if (rsize < ((style.getPadding() * PLACEHOLDER_SCALE * 2) + fontSize)) { -// rsize = ((style.getPadding() * PLACEHOLDER_SCALE * 2) + fontSize); -// }*/ -// } else if (entry.getType() == 3) { -// int colWidth = (int) (colWidths[j] * perUnitWidth); -// tsize = this -// .getTableHeight((Table) entry.getValue(), style, colWidth, g); -// if (rsize < tsize) { -// rsize = tsize; -// } -// } -// } -// size += rsize; -// } -// -// return size; -// } -} diff --git a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/exceptions/PDFASSLRequestException.java b/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/exceptions/PDFASSLRequestException.java deleted file mode 100644 index ceb25779..00000000 --- a/pdf-over-signer/pdf-over-sigpdfas/src/main/java/at/asit/pdfover/signer/pdfas/exceptions/PDFASSLRequestException.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2012 by A-SIT, Secure Information Technology Center Austria - * - * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by - * the European Commission - subsequent versions of the EUPL (the "Licence"); - * You may not use this work except in compliance with the Licence. - * You may obtain a copy of the Licence at: - * http://joinup.ec.europa.eu/software/page/eupl - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the Licence is distributed on an "AS IS" basis, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the Licence for the specific language governing permissions and - * limitations under the Licence. - */ -package at.asit.pdfover.signer.pdfas.exceptions; - -/** - * - */ -public class PDFASSLRequestException extends Exception { - /** - * - */ - private static final long serialVersionUID = -7515747014505057787L; - - /** - * Constructor - * @param msg - */ - public PDFASSLRequestException(String msg) { - super(msg); - } -} -- cgit v1.2.3