From a00b76722287305331aa2a22fb434d2cb165ccbb Mon Sep 17 00:00:00 2001 From: knowcenter Date: Wed, 16 May 2007 20:00:28 +0000 Subject: enveloping connectors git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@83 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../java/at/knowcenter/wag/egov/egiz/PdfAS.java | 143 +++++++++++++++++---- 1 file changed, 115 insertions(+), 28 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java b/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java index 8de93c0..4f31d14 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java @@ -25,10 +25,11 @@ import java.util.Comparator; import java.util.List; import java.util.Vector; -import org.apache.log4j.Logger; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; -import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger; import at.knowcenter.wag.egov.egiz.cfg.SettingsReader; +import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException; import at.knowcenter.wag.egov.egiz.exceptions.ConnectorFactoryException; import at.knowcenter.wag.egov.egiz.exceptions.NormalizeException; import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException; @@ -48,10 +49,9 @@ import at.knowcenter.wag.egov.egiz.pdf.PDFSignatureObject; import at.knowcenter.wag.egov.egiz.pdf.PDFUtilities; import at.knowcenter.wag.egov.egiz.pdf.PositioningInstruction; import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder; -import at.knowcenter.wag.egov.egiz.pdf.TextualSignatureHolder; import at.knowcenter.wag.egov.egiz.pdf.TablePos; import at.knowcenter.wag.egov.egiz.pdf.TextualSignature; -import at.knowcenter.wag.egov.egiz.sig.Connector; +import at.knowcenter.wag.egov.egiz.pdf.TextualSignatureHolder; import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory; import at.knowcenter.wag.egov.egiz.sig.SignatureData; import at.knowcenter.wag.egov.egiz.sig.SignatureDataImpl; @@ -59,9 +59,11 @@ import at.knowcenter.wag.egov.egiz.sig.SignatureObject; import at.knowcenter.wag.egov.egiz.sig.SignatureResponse; import at.knowcenter.wag.egov.egiz.sig.SignatureTypeDefinition; import at.knowcenter.wag.egov.egiz.sig.SignatureTypes; -import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUPostConnection; +import at.knowcenter.wag.egov.egiz.sig.connectors.Connector; import at.knowcenter.wag.egov.egiz.sig.connectors.bku.DetachedMultipartBKUConnector; +import at.knowcenter.wag.egov.egiz.sig.connectors.bku.EnvelopedBase64BKUConnector; import at.knowcenter.wag.egov.egiz.sig.connectors.bku.SignSignatureObject; +import at.knowcenter.wag.egov.egiz.sig.connectors.moa.EnvelopingBase64MOAConnector; import at.knowcenter.wag.egov.egiz.tools.CodingHelper; import at.knowcenter.wag.egov.egiz.tools.Normalizer; import at.knowcenter.wag.exactparser.ParseDocument; @@ -104,7 +106,7 @@ public abstract class PdfAS /** * The logger definition. */ - private static final Logger logger_ = ConfigLogger.getLogger(PdfAS.class); + private static final Log log = LogFactory.getLog(PdfAS.class); /** * Tells, if strict PDF checking the PDF version is enabled. @@ -184,7 +186,7 @@ public abstract class PdfAS } catch (Exception e) { - logger_.debug("Error while parsing Document.", e); + log.debug("Error while parsing Document.", e); throw new PDFDocumentException(201, e); } } @@ -267,7 +269,7 @@ public abstract class PdfAS break; } { - logger_.debug("Found holder: " + holder.getSignatureObject().getSignationType()); + log.debug("Found holder: " + holder.getSignatureObject().getSignationType()); } signature_holders.add(0, holder); @@ -316,22 +318,22 @@ public abstract class PdfAS if (minimum_blocks.size() > 1) { - logger_.debug("There are still " + minimum_blocks.size() + " candidates:"); + log.debug("There are still " + minimum_blocks.size() + " candidates:"); for (int i = 0; i < minimum_blocks.size(); i++) { FoundBlock fb = (FoundBlock) minimum_blocks.get(i); - logger_.debug(" fb: " + fb.std.getType()); + log.debug(" fb: " + fb.std.getType()); } - logger_.debug("... checking for Semantic Equality."); + log.debug("... checking for Semantic Equality."); } boolean semantic_equality = checkForSemanticEquality(minimum_blocks); if (minimum_blocks.size() > 1) { - logger_.debug("... Semantic Equality = " + semantic_equality); + log.debug("... Semantic Equality = " + semantic_equality); } if (!semantic_equality) @@ -409,10 +411,10 @@ public abstract class PdfAS // int found_index = text.lastIndexOf(caption); // we're searching for captions that start at the beginning of the line. int found_index = text.lastIndexOf("\n" + caption) + 1;// text.lastIndexOf("\n" - // + caption) + 1; - // // the +1 - // text.lastIndexOf(caption) - // + 1; // + // + caption) + 1; + // // the +1 + // text.lastIndexOf(caption) + // + 1; // // compensates the // \n if (found_index == 0) @@ -420,7 +422,7 @@ public abstract class PdfAS // try without /n found_index = text.lastIndexOf(caption); } - logger_.debug("found key:" + caption + " at index:" + found_index); + log.debug("found key:" + caption + " at index:" + found_index); if (key.equals(SignatureTypes.SIG_ID)) { if (found_index < 0 || found_index >= last_index) @@ -809,8 +811,6 @@ public abstract class PdfAS try { - DetachedMultipartBKUConnector connector_impl = new DetachedMultipartBKUConnector("xxxprofile"); - // FIXME this has to be made better SignatureData sd = null; if (so_to_be_verified.isBinary()) @@ -822,13 +822,17 @@ public abstract class PdfAS { sd = new SignatureDataImpl(text_to_be_verified.getBytes("UTF-8"), "text/plain", "UTF-8"); } - + SignSignatureObject so = new SignSignatureObject(); so.date = so_to_be_verified.getSignationDate(); so.signatureValue = so_to_be_verified.getSignationValue(); so.issuer = so_to_be_verified.getSignationIssuer(); so.x509Certificate = so_to_be_verified.getX509Cert().getX509Certificate(); so.id = so_to_be_verified.getSignationIds(); + so.kz = so_to_be_verified.getKZ().toString(); + + String profile = so_to_be_verified.getSignatureTypeDefinition().getType(); + Connector connector_impl = chooseConnector(profile, so_to_be_verified.getKZ(), so.getSigID(), connector); // Connector connector_impl = ConnectorFactory.createConnector(connector); return connector_impl.doVerify(sd, so); @@ -869,20 +873,15 @@ public abstract class PdfAS try { - // TODO temporary workaround: - DetachedMultipartBKUConnector connector_impl = new DetachedMultipartBKUConnector(signature_type); - // Connector connector_impl = ConnectorFactory.createConnector(connector); + Connector connector_impl = chooseDetachedMultipartConnector(signature_type, connector); + SignSignatureObject signed_signature_object = connector_impl.doSign(data_to_sign); return signed_signature_object; } - catch (SettingsException e) + catch (ConnectorFactoryException e) { throw new SignatureException(300, e); } - // catch (ConnectorFactoryException e) - // { - // throw new SignatureException(300, e); - // } } /** @@ -1332,4 +1331,92 @@ public abstract class PdfAS TablePos pos = new TablePos(pos_string); return pos; } + + /** + * + * @param sig_kz + * @param sig_id + * @return Returns the chosen Connector. + * @throws ConnectorFactoryException + */ + public static at.knowcenter.wag.egov.egiz.sig.connectors.Connector chooseConnector( + String profile, + PdfASID sig_kz, String sig_id, String sig_app) throws ConnectorFactoryException, ConnectorException + { + log.debug("chooseConnector:"); //$NON-NLS-1$ + + log.debug("sig_kz = " + sig_kz); //$NON-NLS-1$ + log.debug("sig_id = " + sig_id); //$NON-NLS-1$ + log.debug("sig_app = " + sig_app); //$NON-NLS-1$ + + if (sig_kz == null) + { + log.debug("sig_kz is null ==> alte Signatur"); //$NON-NLS-1$ + + return chooseEnvelopedBase64Connector(profile, sig_app); + } + + { + log.debug("sig_kz is not null ==> one of the newer signatures"); + + if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_0_0)) + { + log.debug("Version is 1.0.0 ==> Base64 Signatur eventuell Hotfix."); + + return chooseEnvelopedBase64Connector(profile, sig_app); + } + if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_1_0)) + { + log.debug("Version is 1.1.0 ==> Detached Multipart Signatur."); + + return chooseDetachedMultipartConnector(profile, sig_app); + } + } + + log.debug("chooseConnector."); //$NON-NLS-1$ + return null; + } + + protected static final String BKU = "bku"; //$NON-NLS-1$ + + protected static final String MOA = "moa"; //$NON-NLS-1$ + + protected static at.knowcenter.wag.egov.egiz.sig.connectors.Connector chooseEnvelopedBase64Connector( + String profile, String sig_app) throws ConnectorFactoryException, ConnectorException + { + if (sig_app.equals(BKU)) + { + log.debug("sig_app is BKU ==> EnvelopedBase64BKUConnector"); //$NON-NLS-1$ + + return new EnvelopedBase64BKUConnector(profile); + } + if (sig_app.equals(MOA)) + { + log.debug("sig_app is MOA ==> EnvelopedBase64MOAConnector"); //$NON-NLS-1$ + + return new EnvelopingBase64MOAConnector(profile); + } + throw new ConnectorFactoryException("Unknown sig_app '" + sig_app + "'."); //$NON-NLS-1$ //$NON-NLS-2$ + + } + + protected static at.knowcenter.wag.egov.egiz.sig.connectors.Connector chooseDetachedMultipartConnector( + String profile, String sig_app) throws ConnectorException, ConnectorFactoryException + { + if (sig_app.equals(BKU)) + { + log.debug("sig_app is BKU ==> DetachedMultipartBKUConnector"); //$NON-NLS-1$ + + return new DetachedMultipartBKUConnector(profile); + } + if (sig_app.equals(MOA)) + { + log.debug("sig_app is MOA ==> EnvelopedBase64MOAConnector"); //$NON-NLS-1$ + + return null; + } + throw new ConnectorFactoryException("Unknown sig_app '" + sig_app + "'."); //$NON-NLS-1$ //$NON-NLS-2$ + + } + } -- cgit v1.2.3