aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorknowcenter <knowcenter@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2007-05-18 15:42:55 +0000
committerknowcenter <knowcenter@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2007-05-18 15:42:55 +0000
commit8f2a983cb8e9be9e71e3df04edd00a4bc0673862 (patch)
tree141e477bd1086e21f80dba750b6f93036827c280
parentdce5ed9e0a30ed7f03b21a8142029847a1194a2c (diff)
downloadpdf-as-3-8f2a983cb8e9be9e71e3df04edd00a4bc0673862.tar.gz
pdf-as-3-8f2a983cb8e9be9e71e3df04edd00a4bc0673862.tar.bz2
pdf-as-3-8f2a983cb8e9be9e71e3df04edd00a4bc0673862.zip
detached connectors
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@92 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java227
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java32
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java36
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/ConnectorChooser.java297
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java45
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/EnvelopedBase64BKUConnector.java93
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/OldEnvelopingBase64BKUConnector.java112
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java2
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/EnvelopingBase64MOAConnector.java58
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/DetachedIdFormatter.java4
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/DetachedLocRefMOAIdFormatter.java2
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/HotfixIdFormatter.java4
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/sigkz/SigKZIDHelper.java131
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/LocalRequestHelper.java9
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java11
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java3
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java23
-rw-r--r--work/cfg/config.properties27
-rw-r--r--work/cfg/help_text.properties3
-rw-r--r--work/templates/BKUVerifyTemplateBase64old.xml6
20 files changed, 842 insertions, 283 deletions
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 9359c96..98a164d 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/PdfAS.java
@@ -19,6 +19,7 @@ package at.knowcenter.wag.egov.egiz;
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -30,7 +31,6 @@ import org.apache.commons.logging.LogFactory;
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;
import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
@@ -60,11 +60,8 @@ 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.Connector;
-import at.knowcenter.wag.egov.egiz.sig.connectors.bku.DetachedBKUConnector;
-import at.knowcenter.wag.egov.egiz.sig.connectors.bku.EnvelopedBase64BKUConnector;
-import at.knowcenter.wag.egov.egiz.sig.connectors.bku.MultipartDetachedBKUConnector;
+import at.knowcenter.wag.egov.egiz.sig.connectors.ConnectorChooser;
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;
@@ -773,6 +770,21 @@ public abstract class PdfAS
}
return results;
}
+
+ // TODO the choosing algorithm should be extracted into a visitor or factory design pattern.
+ public static List verifySignatureHoldersWeb(List signature_holders,
+ String connector, String loc_ref) throws PDFDocumentException, NormalizeException, SignatureException
+ {
+ List results = new ArrayList();
+ for (int i = 0; i < signature_holders.size(); i++)
+ {
+ SignatureHolder holder = (SignatureHolder) signature_holders.get(i);
+
+ SignatureResponse result = verifyWeb(holder, connector, loc_ref);
+ results.add(result);
+ }
+ return results;
+ }
/**
* Verifies a SignatureHolder using the given connector.
@@ -810,40 +822,95 @@ public abstract class PdfAS
throw new SignatureException(312, "Document can not be verified because no signature object are set.");
}
- try
+ // FIXME this has to be made better
+ SignatureData sd = null;
+ if (so_to_be_verified.isBinary())
+ {
+ byte[] data = CodingHelper.decodeBase64(text_to_be_verified);
+ sd = new SignatureDataImpl(data, "application/pdf");
+ }
+ else
{
- // FIXME this has to be made better
- SignatureData sd = null;
- if (so_to_be_verified.isBinary())
+ try
{
- byte[] data = CodingHelper.decodeBase64(text_to_be_verified);
- sd = new SignatureDataImpl(data, "application/pdf");
+ sd = new SignatureDataImpl(text_to_be_verified.getBytes("UTF-8"), "text/plain", "UTF-8");
}
- else
+ catch (UnsupportedEncodingException e)
{
- sd = new SignatureDataImpl(text_to_be_verified.getBytes("UTF-8"), "text/plain", "UTF-8");
+ throw new RuntimeException("Very Strange: UTF-8 character encoding not supported???");
}
+ }
+
+ 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() == null ? null : so_to_be_verified.getKZ().toString();
+
+ String profile = so_to_be_verified.getSignatureTypeDefinition().getType();
+ Connector c = ConnectorChooser.chooseCommandlineConnectorForVerify(connector, so_to_be_verified.getKZ(), so.id, profile);
- 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();
+ return c.doVerify(sd, so);
- String profile = so_to_be_verified.getSignatureTypeDefinition().getType();
- Connector connector_impl = chooseConnector(profile, so_to_be_verified.getKZ(), so.getSigID(), connector);
+ }
+
+ // TODO make this better using the visitor DP.
+ public static SignatureResponse verifyWeb(SignatureHolder signature_holder,
+ String connector, String loc_ref) throws NormalizeException, PDFDocumentException, SignatureException
+ {
+ String text_to_be_verified = signature_holder.getSignedText();
+ // logger_.debug("verify text_to_be_verified"+text_to_be_verified);
+ SignatureObject so_to_be_verified = signature_holder.getSignatureObject();
- // Connector connector_impl = ConnectorFactory.createConnector(connector);
- return connector_impl.doVerify(sd, so);
+ if (text_to_be_verified == null)
+ {
+ throw new SignatureException(311, "Document can not be verified because the text to be verified is either null.");
}
- catch (Exception e)
+ if (text_to_be_verified.length() <= 0)
{
- throw new SignatureException(310, e);
+ throw new SignatureException(311, "Document can not be verified because the length of the text to be verified is 0. (length = " + text_to_be_verified.length() + ")");
}
- }
+ if (so_to_be_verified == null)
+ {
+ throw new SignatureException(312, "Document can not be verified because no signature object are set.");
+ }
+
+ // FIXME this has to be made better
+ SignatureData sd = null;
+ if (so_to_be_verified.isBinary())
+ {
+ byte[] data = CodingHelper.decodeBase64(text_to_be_verified);
+ sd = new SignatureDataImpl(data, "application/pdf");
+ }
+ else
+ {
+ try
+ {
+ sd = new SignatureDataImpl(text_to_be_verified.getBytes("UTF-8"), "text/plain", "UTF-8");
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new RuntimeException("Very Strange: UTF-8 character encoding not supported???");
+ }
+ }
+
+ 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() == null ? null : so_to_be_verified.getKZ().toString();
+
+ String profile = so_to_be_verified.getSignatureTypeDefinition().getType();
+ Connector c = ConnectorChooser.chooseWebConnectorForVerify(connector, so_to_be_verified.getKZ(), so.id, profile, loc_ref);
+
+ return c.doVerify(sd, so);
+
+ }
/**
* Signs the given text with the provided connector using the given signature
* type.
@@ -861,7 +928,7 @@ public abstract class PdfAS
* F.e.
*/
public static SignSignatureObject sign(final SignatureData data_to_sign,
- final String signature_type, final String connector) throws SignatureException, PDFDocumentException
+ final Connector connector) throws SignatureException, PDFDocumentException
{
if (data_to_sign == null || data_to_sign.getData() == null)
{
@@ -872,17 +939,8 @@ public abstract class PdfAS
throw new SignatureException(301, "Signature can not be produced. Data is empty. (length = " + data_to_sign.getData().length + ")"); //$NON-NLS-1$ //$NON-NLS-2$
}
- try
- {
- Connector connector_impl = chooseDetachedMultipartConnector(signature_type, connector);
-
- SignSignatureObject signed_signature_object = connector_impl.doSign(data_to_sign);
- return signed_signature_object;
- }
- catch (ConnectorFactoryException e)
- {
- throw new SignatureException(300, e);
- }
+ SignSignatureObject signed_signature_object = connector.doSign(data_to_sign);
+ return signed_signature_object;
}
/**
@@ -937,7 +995,9 @@ public abstract class PdfAS
IncrementalUpdateInformation iui = signator.prepareSign(pdf, signature_type, pos, ConnectorFactory.needsSIG_ID(connector));
- iui.signed_signature_object = sign(iui.signature_data, signature_type, connector);
+ Connector c = ConnectorChooser.chooseCommandlineConnectorForSign(connector, signature_type);
+
+ iui.signed_signature_object = sign(iui.signature_data, c);
SignResult sign_result = signator.finishSign(iui);
@@ -1333,91 +1393,4 @@ public abstract class PdfAS
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 MultipartDetachedBKUConnector(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$
-
- }
-
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java b/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java
index 614005e..73ee69a 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/commandline/Main.java
@@ -45,7 +45,9 @@ import at.knowcenter.wag.egov.egiz.exceptions.SignatureTypesException;
import at.knowcenter.wag.egov.egiz.framework.SignResult;
import at.knowcenter.wag.egov.egiz.framework.SignatorFactory;
import at.knowcenter.wag.egov.egiz.framework.VerificationFilter;
+import at.knowcenter.wag.egov.egiz.framework.signators.BinarySignator_1_0_0;
import at.knowcenter.wag.egov.egiz.framework.signators.DetachedSignator_1_0_0;
+import at.knowcenter.wag.egov.egiz.framework.signators.TextualSignator_1_0_0;
import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
import at.knowcenter.wag.egov.egiz.pdf.TablePos;
import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory;
@@ -126,7 +128,7 @@ public abstract class Main
* The application mode verify
*/
public static final String VALUE_SIGNATURE_MODE_DETACHED = "detached";
-
+
/**
* The application mode verify
*/
@@ -470,6 +472,26 @@ public abstract class Main
}
PdfASID algorithm = translateSignatureModeToPdfASID(signature_mode);
+
+ // TODO MOA detached signing is not allowed at the commandline
+ logger_.debug("Suggested sign algorithm = " + algorithm);
+ if (connector.equals("moa"))
+ {
+ String msg = "Hinweis: Der MOA Detached Connector ist für die Kommandozeile nicht geeignet. Die Signatur wird daher im alten Base64 enveloping Format ausgeführt.";
+ System.out.println(msg);
+ logger_.warn(msg);
+
+ if (signature_mode.equals(VALUE_SIGNATURE_MODE_BINARY))
+ {
+ algorithm = BinarySignator_1_0_0.MY_ID;
+ }
+ if (signature_mode.equals(VALUE_SIGNATURE_MODE_TEXTUAL))
+ {
+ algorithm = TextualSignator_1_0_0.MY_ID;
+ }
+ }
+ logger_.debug("Finally used sign algorithm = " + algorithm);
+
SignResult sign_result = PdfAS.sign(algorithm, input_bytes, signature_type, connector, user_name, user_password, pos);
try
@@ -770,12 +792,12 @@ public abstract class Main
writer.println(" y_algo:='auto' ... automatic positioning y");
writer.println(" floatvalue ... absolute y must be >= 0");
writer.println(" w_algo:='auto' ... automatic width");
- writer.println(" floatvalue ... absolute width must be > 0");
+ writer.println(" floatvalue ... absolute width must be > 0");
writer.println(" p_algo:='auto' ... automatic last page");
- writer.println(" 'new' ... new page");
+ writer.println(" 'new' ... new page");
writer.println(" intvalue ... pagenumber must be > 0 if p>number of pages in document p-->handled like p:'new'");
writer.println(" f_algo floatvalue ... consider footerline must be >= 0 (only if y_algo is auto and p_algo is not 'new')");
-
+
writer.println(" OPTIONS for verification:");
writer.println(" " + PARAMETER_VERIFY_WHICH + " <number> ... [optional] zero based number of the signature");
writer.println(" to be verified. If omitted, all signatures are verified.");
@@ -870,7 +892,7 @@ public abstract class Main
if (signature_mode.equals(VALUE_SIGNATURE_MODE_DETACHED_TEXt))
{
return SignatorFactory.MOST_RECENT_DETACHEDTEXT_SIGNATOR_ID;
- }
+ }
return null;
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java
index e510d53..d67bb90 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/SignatureObject.java
@@ -49,6 +49,7 @@ import at.knowcenter.wag.egov.egiz.framework.SignatorFactory;
import at.knowcenter.wag.egov.egiz.ldap.api.LDAPAPIException;
import at.knowcenter.wag.egov.egiz.ldap.api.LDAPAPIFactory;
import at.knowcenter.wag.egov.egiz.ldap.client.LDAPIssuerNameFilter;
+import at.knowcenter.wag.egov.egiz.sig.sigkz.SigKZIDHelper;
import at.knowcenter.wag.egov.egiz.table.Entry;
import at.knowcenter.wag.egov.egiz.table.Style;
import at.knowcenter.wag.egov.egiz.table.Table;
@@ -732,7 +733,10 @@ public class SignatureObject implements Serializable
*/
public void setSignationIDs(String sigIds)
{
- setSigValue(SignatureTypes.SIG_ID, sigIds);
+ if (sigIds != null)
+ {
+ setSigValue(SignatureTypes.SIG_ID, sigIds);
+ }
}
// /**
@@ -838,7 +842,18 @@ public class SignatureObject implements Serializable
*/
public boolean isMOASigned()
{
- return getSignationIds() == null;
+ try
+ {
+ PdfASID sig_kz = getKZ();
+ String sig_id = getSignationIds();
+ return SigKZIDHelper.isMOASigned(sig_kz, sig_id);
+ //return getSignationIds() == null;
+ }
+ catch (InvalidIDException e)
+ {
+ logger_.error(e);
+ return false;
+ }
}
/**
@@ -857,13 +872,7 @@ public class SignatureObject implements Serializable
{
e.printStackTrace();
}
- if (kz == null)
- {
- return true; // must be an old Signature
- }
-
- boolean textual = kz.getType().equals(SignatorFactory.TYPE_TEXTUAL);
- return textual;
+ return SigKZIDHelper.isTextual(kz);
}
/**
@@ -882,13 +891,8 @@ public class SignatureObject implements Serializable
{
e.printStackTrace();
}
- if (kz == null)
- {
- return false; // must be an old Signature
- }
-
- boolean binary = kz.getType().equals(SignatorFactory.TYPE_BINARY);
- return binary;
+
+ return SigKZIDHelper.isBinary(kz);
}
/**
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/ConnectorChooser.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/ConnectorChooser.java
new file mode 100644
index 0000000..af94f94
--- /dev/null
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/ConnectorChooser.java
@@ -0,0 +1,297 @@
+/**
+ *
+ */
+package at.knowcenter.wag.egov.egiz.sig.connectors;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import at.knowcenter.wag.egov.egiz.PdfASID;
+import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException;
+import at.knowcenter.wag.egov.egiz.framework.SignatorFactory;
+import at.knowcenter.wag.egov.egiz.sig.connectors.bku.EnvelopedBase64BKUConnector;
+import at.knowcenter.wag.egov.egiz.sig.connectors.bku.LocRefDetachedBKUConnector;
+import at.knowcenter.wag.egov.egiz.sig.connectors.bku.MultipartDetachedBKUConnector;
+import at.knowcenter.wag.egov.egiz.sig.connectors.bku.OldEnvelopingBase64BKUConnector;
+import at.knowcenter.wag.egov.egiz.sig.connectors.moa.DetachedLocRefMOAConnector;
+import at.knowcenter.wag.egov.egiz.sig.connectors.moa.EnvelopingBase64MOAConnector;
+import at.knowcenter.wag.egov.egiz.sig.sigid.HotfixIdFormatter;
+
+/**
+ * Helper class that provides static methods that help the application to
+ * "choose" the right connector for a given task.
+ *
+ * @author wprinz
+ */
+public final class ConnectorChooser
+{
+ /**
+ * The log.
+ */
+ private static Log log = LogFactory.getLog(ConnectorChooser.class);
+
+ public static LocalConnector chooseLocalConnectorForSign(String connector,
+ String profile, String loc_ref_url) throws ConnectorException
+ {
+ log.debug("Choosing LocalConnector for signation...");
+
+ log.debug("connector type = " + connector);
+
+ if (!connector.equals("bku"))
+ {
+ log.error("Currently only the BKU connector is fully implemented.");
+ }
+
+ log.debug("choosing locref detached BKU connector.");
+ return new LocRefDetachedBKUConnector(profile, loc_ref_url);
+ }
+
+ public static Connector chooseWebConnectorForSign(String connector,
+ String profile, String loc_ref_url) throws ConnectorException
+ {
+ log.debug("Choosing Connector for WEB signation...");
+
+ log.debug("connector type = " + connector);
+
+ if (!connector.equals("moa"))
+ {
+ log.error("Currently only the MOA connector is available for non local WEB signation.");
+ }
+
+ log.debug("choosing locref detached MOA connector.");
+ return new DetachedLocRefMOAConnector(profile, loc_ref_url);
+ }
+
+ public static Connector chooseCommandlineConnectorForSign(String connector,
+ String profile) throws ConnectorException
+ {
+ log.debug("Choosing Connector for commandline signation...");
+
+ log.debug("connector type = " + connector);
+
+ if (connector.equals(BKU))
+ {
+ log.debug("sig_app is BKU ==> MultipartDetachedBKUConnector"); //$NON-NLS-1$
+
+ return new MultipartDetachedBKUConnector(profile);
+ }
+ if (connector.equals(MOA))
+ {
+ // TODO MOA detached signing is not allowed at the commandline
+ log.warn("Detached MOA is not supported on the commandline. -> choosing Base64 temporarily.");
+ return new EnvelopingBase64MOAConnector(profile);
+ }
+
+ throw new ConnectorException(300, "Unknown connector type '" + connector + "' specified.");
+ }
+
+ public static LocalConnector chooseLocalConnectorForVerify(String connector,
+ PdfASID sig_kz, String sig_id, String profile, String loc_ref_url) throws ConnectorException
+ {
+ log.debug("Choosing LocalConnector for verification...");
+
+ log.debug("connector type = " + connector);
+ log.debug("sig_kz = " + sig_kz);
+ log.debug("sig_id = " + sig_id);
+
+ if (!connector.equals("bku"))
+ {
+ log.error("Currently only the BKU connector is fully implemented.");
+ }
+
+ if (sig_kz == null)
+ {
+ log.debug("sig_kz is null -> must be old signature -> choosing old Base64 connector.");
+
+ return new OldEnvelopingBase64BKUConnector(profile);
+ }
+
+ log.debug("sig_kz is not null -> must be one of the newer ... base64, base64 hotfix, or detached");
+
+ if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_0_0))
+ {
+ log.debug("sig_kz version is 1.0.0 -> choosing base64 (old or hotfix)");
+
+ if (sig_id == null)
+ {
+ log.debug("sig_id is null, which means that it is a MOA signature -> choose a hotfix base64 connector (thus it is moa - it doesn't matter).");
+
+ return new EnvelopedBase64BKUConnector(profile);
+ }
+
+ String[] sig_id_parts = sig_id.split("@");
+ if (sig_id_parts.length == 2)
+ {
+ log.debug("sig_id has 2 @-separated parts -> choosing old base64 connector");
+
+ return new OldEnvelopingBase64BKUConnector(profile);
+ }
+ if (sig_id_parts[0].equals(HotfixIdFormatter.SIG_ID_PREFIX))
+ {
+ log.debug("sig_id prefix is hotfix -> choosing hotfix base64 connector");
+
+ return new EnvelopedBase64BKUConnector(profile);
+ }
+
+ throw new ConnectorException(300, "The SIG_KZ version is 1.0.0, but SIG_ID is neither MOA nor Old base64 nor Hotfix base64 ???'");
+ }
+ if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_1_0))
+ {
+ log.debug("sig_kz version is 1.1.0 -> choosing detached (loc ref) connector.");
+
+ return new LocRefDetachedBKUConnector(profile, loc_ref_url);
+ }
+
+ throw new ConnectorException(310, "The SIG_KZ version '" + sig_kz.getVersion() + "' is unknown.");
+ }
+
+ public static Connector chooseWebConnectorForVerify(String connector,
+ PdfASID sig_kz, String sig_id, String profile, String loc_ref_url) throws ConnectorException
+ {
+ log.debug("Choosing Connector for WEB verification...");
+
+ log.debug("connector type = " + connector);
+ log.debug("sig_kz = " + sig_kz);
+ log.debug("sig_id = " + sig_id);
+
+ if (!connector.equals("moa"))
+ {
+ log.error("Currently only the MOA connector is available for non local WEB signation.");
+ }
+
+ if (sig_kz == null || sig_kz.getVersion().equals(SignatorFactory.VERSION_1_0_0))
+ {
+ log.debug("sig_kz is null or sig_kz version is 1.0.0 -> choosing Base64 connector.");
+
+ return new EnvelopingBase64MOAConnector(profile);
+ }
+
+ if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_1_0))
+ {
+ log.debug("sig_kz version is 1.1.0 -> choosing detached (loc ref) connector.");
+
+ throw new ConnectorException(370, "The MOA detached connector is not suitable for verification.");
+ //return new DetachedLocRefMOAConnector(profile, loc_ref_url);
+ }
+
+ throw new ConnectorException(310, "The SIG_KZ version '" + sig_kz.getVersion() + "' is unknown.");
+ }
+
+ public static Connector chooseCommandlineConnectorForVerify(String connector,
+ PdfASID sig_kz, String sig_id, String profile) throws ConnectorException
+ {
+ log.debug("Choosing Connector for Commandline verification...");
+
+ log.debug("connector type = " + connector);
+ log.debug("sig_kz = " + sig_kz); //$NON-NLS-1$
+ log.debug("sig_id = " + sig_id); //$NON-NLS-1$
+
+ if (sig_kz == null)
+ {
+ log.debug("sig_kz is null -> chose an old enveloped base64 connector"); //$NON-NLS-1$
+
+ return chooseEnvelopedBase64ConnectorOld(profile, connector);
+ }
+
+ 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 (old or Hotfix).");
+
+ if (sig_id == null)
+ {
+ log.debug("sig_id is null, which means that it is a MOA signature -> choose a hotfix base64 connector (thus it is moa - it doesn't matter).");
+
+ return chooseEnvelopedBase64ConnectorHotfix(profile, connector);
+ }
+
+ String[] sig_id_parts = sig_id.split("@");
+ if (sig_id_parts.length == 2)
+ {
+ log.debug("sig_id has 2 @-separated parts -> choosing old base64 connector");
+
+ return chooseEnvelopedBase64ConnectorOld(profile, connector);
+ }
+ if (sig_id_parts[0].equals(HotfixIdFormatter.SIG_ID_PREFIX))
+ {
+ log.debug("sig_id prefix is hotfix -> choosing hotfix base64 connector");
+
+ return chooseEnvelopedBase64ConnectorHotfix(profile, connector);
+ }
+
+ throw new ConnectorException(300, "The SIG_KZ version is 1.0.0, but SIG_ID is neither MOA nor Old base64 nor Hotfix base64 ???'");
+ }
+ if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_1_0))
+ {
+ log.debug("Version is 1.1.0 -> chose a detached connector.");
+
+ return chooseDetachedMultipartConnector(profile, connector);
+ }
+
+ throw new ConnectorException(310, "The SIG_KZ version '" + sig_kz.getVersion() + "' is unknown.");
+ }
+
+ protected static final String BKU = "bku"; //$NON-NLS-1$
+
+ protected static final String MOA = "moa"; //$NON-NLS-1$
+
+ protected static Connector chooseEnvelopedBase64ConnectorOld(String profile,
+ String sig_app) throws ConnectorException
+ {
+ if (sig_app.equals(BKU))
+ {
+ log.debug("sig_app is BKU ==> OldEnvelopingBase64BKUConnector"); //$NON-NLS-1$
+
+ return new OldEnvelopingBase64BKUConnector(profile);
+ }
+ if (sig_app.equals(MOA))
+ {
+ log.debug("sig_app is MOA ==> EnvelopingBase64MOAConnector"); //$NON-NLS-1$
+
+ return new EnvelopingBase64MOAConnector(profile);
+ }
+ throw new ConnectorException(310, "Unknown sig_app '" + sig_app + "'."); //$NON-NLS-1$ //$NON-NLS-2$
+
+ }
+
+ protected static Connector chooseEnvelopedBase64ConnectorHotfix(
+ String profile, String sig_app) throws 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 ConnectorException(310, "Unknown sig_app '" + sig_app + "'."); //$NON-NLS-1$ //$NON-NLS-2$
+
+ }
+
+ protected static Connector chooseDetachedMultipartConnector(String profile,
+ String sig_app) throws ConnectorException
+ {
+ if (sig_app.equals(BKU))
+ {
+ log.debug("sig_app is BKU ==> DetachedMultipartBKUConnector"); //$NON-NLS-1$
+
+ return new MultipartDetachedBKUConnector(profile);
+ }
+ if (sig_app.equals(MOA))
+ {
+ log.debug("sig_app is MOA ==> DetachedMOAConnector"); //$NON-NLS-1$
+
+ String msg = "A Detached signature cannot be verified with the MOA connector (yet)."; //$NON-NLS-1$
+ log.error(msg);
+ throw new ConnectorException(370, msg);
+ }
+ throw new ConnectorException(310, "Unknown sig_app '" + sig_app + "'."); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
+}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java
index 44beb40..d018a13 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/DetachedBKUConnector.java
@@ -19,6 +19,7 @@ import at.knowcenter.wag.egov.egiz.sig.connectors.Connector;
import at.knowcenter.wag.egov.egiz.sig.connectors.LocalConnector;
import at.knowcenter.wag.egov.egiz.sig.connectors.TemplateReplaces;
import at.knowcenter.wag.egov.egiz.sig.sigid.DetachedIdFormatter;
+import at.knowcenter.wag.egov.egiz.sig.sigkz.SigKZIDHelper;
import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
import at.knowcenter.wag.egov.egiz.tools.FileHelper;
@@ -120,10 +121,6 @@ public class DetachedBKUConnector implements Connector, LocalConnector
return so;
}
-
-
-
-
public static String[] parseSigIds(String sig_ids)
{
if (sig_ids == null || sig_ids.length() == 0)
@@ -292,29 +289,29 @@ public class DetachedBKUConnector implements Connector, LocalConnector
* @throws ConnectorException
* f.e.
*/
- public String prepareVerifyRequest(SignatureData data,
- SignSignatureObject so) throws ConnectorException
+ public String prepareVerifyRequest(SignatureData data, SignSignatureObject so) throws ConnectorException
{
String verify_request_template = this.environment.getVerifyRequestTemplate();
String xml_content = null;
- // TODO implement MOA
- // if (sigObject.isMOASigned())
- // {
- // MOAConnector moa_conn = new MOAConnector();
- // // get the MOA-template
- // verify_template_str = moa_conn.getVerifyTemplate(normalizedText,
- // sigObject);
- // }
- // else
- // {
- // get the BKU-template
- xml_content = prepareXMLContent(data, so);
- // }
+ if (SigKZIDHelper.isMOASigned(so))
+ {
+ // TODO once the detached moa connector is fully functional - implement this.
+ log.error("Zur Zeit gibt es keinen detached MOA connector fuer die Verifikation.");
+ throw new ConnectorException(300, "Detached MOA is disabled.");
+ // MOAConnector moa_conn = new MOAConnector();
+ // // get the MOA-template
+ // verify_template_str = moa_conn.getVerifyTemplate(normalizedText,
+ // sigObject);
+ }
+ else
+ {
+ xml_content = prepareXMLContent(data, so);
+ }
String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.LOC_REF_CONTENT_REPLACE, this.environment.getLocRefContent());
-
+
return verify_request_xml;
}
@@ -441,7 +438,6 @@ public class DetachedBKUConnector implements Connector, LocalConnector
return signature_response;
}
-
/**
* Holds environment configuration information like templates.
*
@@ -490,7 +486,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
protected static final String RSA_CERT_ALG_KEY = "cert.alg.rsa"; //$NON-NLS-1$
protected String loc_ref_content = null;
-
+
protected String sign_keybox_identifier = null;
protected String sign_request_template = null;
@@ -518,7 +514,7 @@ public class DetachedBKUConnector implements Connector, LocalConnector
public Environment(String profile, String loc_ref_content) throws ConnectorException
{
this.loc_ref_content = loc_ref_content;
-
+
SettingsReader settings = null;
try
{
@@ -566,13 +562,14 @@ public class DetachedBKUConnector implements Connector, LocalConnector
/**
* Returns the LocRef content.
+ *
* @return Returns the LocRef content.
*/
public String getLocRefContent()
{
return this.loc_ref_content;
}
-
+
/**
* Returns the sign keybox identifier.
*
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/EnvelopedBase64BKUConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/EnvelopedBase64BKUConnector.java
index 1c628b1..3d5cf36 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/EnvelopedBase64BKUConnector.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/EnvelopedBase64BKUConnector.java
@@ -3,6 +3,7 @@
*/
package at.knowcenter.wag.egov.egiz.sig.connectors.bku;
+import java.io.UnsupportedEncodingException;
import java.security.cert.X509Certificate;
import java.util.Properties;
@@ -16,8 +17,11 @@ import at.knowcenter.wag.egov.egiz.sig.SignatureData;
import at.knowcenter.wag.egov.egiz.sig.SignatureObject;
import at.knowcenter.wag.egov.egiz.sig.SignatureResponse;
import at.knowcenter.wag.egov.egiz.sig.connectors.Connector;
+import at.knowcenter.wag.egov.egiz.sig.connectors.LocalConnector;
import at.knowcenter.wag.egov.egiz.sig.connectors.TemplateReplaces;
+import at.knowcenter.wag.egov.egiz.sig.connectors.moa.EnvelopingBase64MOAConnector;
import at.knowcenter.wag.egov.egiz.sig.sigid.HotfixIdFormatter;
+import at.knowcenter.wag.egov.egiz.sig.sigkz.SigKZIDHelper;
import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
import at.knowcenter.wag.egov.egiz.tools.DebugHelper;
import at.knowcenter.wag.egov.egiz.tools.FileHelper;
@@ -26,7 +30,7 @@ import at.knowcenter.wag.egov.egiz.tools.FileHelper;
* @author wprinz
*
*/
-public class EnvelopedBase64BKUConnector implements Connector
+public class EnvelopedBase64BKUConnector implements Connector, LocalConnector
{
/**
@@ -49,6 +53,10 @@ public class EnvelopedBase64BKUConnector implements Connector
* parameters defined in the configuration are used.
* </p>
*
+ * <p>
+ * This is the new "hotfix" base64 connector.
+ * </p>
+ *
* @param profile
* The profile from which the Environment should be assembled.
* @throws ConnectorException
@@ -131,7 +139,6 @@ public class EnvelopedBase64BKUConnector implements Connector
}
return id;
}
-
/**
* Prepares the XML content the holds the actual signature data.
@@ -169,7 +176,7 @@ public class EnvelopedBase64BKUConnector implements Connector
String verify_xml = verify_template.replaceFirst(TemplateReplaces.CERT_ALG_REPLACE, cert_alg);
// data digest replace
- byte [] data_value = BKUHelper.prepareEnvelopingData(data);
+ byte[] data_value = BKUHelper.prepareEnvelopingData(data);
{
byte[] data_value_hash = CodingHelper.buildDigest(data_value);
String object_data_hash = CodingHelper.encodeBase64(data_value_hash);
@@ -206,21 +213,7 @@ public class EnvelopedBase64BKUConnector implements Connector
// Signed Properties hash
{
- final String ETSI_SIGNED_PROPERTIES_START_TAG = "<etsi:SignedProperties"; //$NON-NLS-1$
- final String ETSI_SIGNED_PROPERTIES_END_TAG = "</etsi:SignedProperties>"; //$NON-NLS-1$
-
- final int hash_start = verify_xml.indexOf(ETSI_SIGNED_PROPERTIES_START_TAG);
- assert hash_start >= 0;
- final int hash_end = verify_xml.indexOf(ETSI_SIGNED_PROPERTIES_END_TAG, hash_start) + ETSI_SIGNED_PROPERTIES_END_TAG.length();
- assert hash_end - ETSI_SIGNED_PROPERTIES_END_TAG.length() >= 0;
- assert hash_end > hash_start;
-
- final String string_to_be_hashed = verify_xml.substring(hash_start, hash_end);
- log.debug("etsi:SignedProperties string to be hashed: " + string_to_be_hashed); //$NON-NLS-1$
-
- final byte[] bytes_to_be_hashed = string_to_be_hashed.getBytes("UTF-8"); //$NON-NLS-1$
- byte[] sig_prop_code = CodingHelper.buildDigest(bytes_to_be_hashed);
- String sig_prop_hash = CodingHelper.encodeBase64(sig_prop_code);
+ String sig_prop_hash = computeSignedPropertiesReplace(verify_xml);
verify_xml = verify_xml.replaceFirst(TemplateReplaces.DIGEST_VALUE_SIGNED_PROPERTIES_REPLACE, sig_prop_hash);
}
@@ -235,6 +228,34 @@ public class EnvelopedBase64BKUConnector implements Connector
}
}
+ protected String computeSignedPropertiesReplace(String verify_xml)
+ {
+ try
+ {
+ final String ETSI_SIGNED_PROPERTIES_START_TAG = "<etsi:SignedProperties"; //$NON-NLS-1$
+ final String ETSI_SIGNED_PROPERTIES_END_TAG = "</etsi:SignedProperties>"; //$NON-NLS-1$
+
+ final int hash_start = verify_xml.indexOf(ETSI_SIGNED_PROPERTIES_START_TAG);
+ assert hash_start >= 0;
+ final int hash_end = verify_xml.indexOf(ETSI_SIGNED_PROPERTIES_END_TAG, hash_start) + ETSI_SIGNED_PROPERTIES_END_TAG.length();
+ assert hash_end - ETSI_SIGNED_PROPERTIES_END_TAG.length() >= 0;
+ assert hash_end > hash_start;
+
+ final String string_to_be_hashed = verify_xml.substring(hash_start, hash_end);
+ log.debug("etsi:SignedProperties string to be hashed: " + string_to_be_hashed); //$NON-NLS-1$
+
+ final byte[] bytes_to_be_hashed = string_to_be_hashed.getBytes("UTF-8"); //$NON-NLS-1$
+ byte[] sig_prop_code = CodingHelper.buildDigest(bytes_to_be_hashed);
+ String sig_prop_hash = CodingHelper.encodeBase64(sig_prop_code);
+
+ return sig_prop_hash;
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new RuntimeException("Very Strange: UTF-8 character encoding not supported.", e);
+ }
+ }
+
/**
* Prepares the sign request xml to be sent using the sign request template.
*
@@ -272,32 +293,27 @@ public class EnvelopedBase64BKUConnector implements Connector
* @throws ConnectorException
* f.e.
*/
- public String prepareVerifyRequest(SignatureData data,
- SignSignatureObject so) throws ConnectorException
+ public String prepareVerifyRequest(SignatureData data, SignSignatureObject so) throws ConnectorException
{
String verify_request_template = this.environment.getVerifyRequestTemplate();
String xml_content = null;
- // TODO implement MOA
- // if (sigObject.isMOASigned())
- // {
- // MOAConnector moa_conn = new MOAConnector();
- // // get the MOA-template
- // verify_template_str = moa_conn.getVerifyTemplate(normalizedText,
- // sigObject);
- // }
- // else
- // {
- // get the BKU-template
- xml_content = prepareXMLContent(data, so);
- // }
+ if (SigKZIDHelper.isMOASigned(so))
+ {
+ log.debug("The signature is MOA signed -> getting XML content from Base64MOA connector.");
+ EnvelopingBase64MOAConnector moa_conn = new EnvelopingBase64MOAConnector(this.environment.getProfile());
+ xml_content = moa_conn.prepareXMLContent(data, so);
+ }
+ else
+ {
+ xml_content = prepareXMLContent(data, so);
+ }
String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
return verify_request_xml;
}
-
/**
* Sends the request to the given URL.
*
@@ -416,6 +432,8 @@ public class EnvelopedBase64BKUConnector implements Connector
*/
protected static final String RSA_CERT_ALG_KEY = "cert.alg.rsa"; //$NON-NLS-1$
+ protected String profile = null;
+
protected String sign_keybox_identifier = null;
protected String sign_request_template = null;
@@ -442,6 +460,8 @@ public class EnvelopedBase64BKUConnector implements Connector
*/
public Environment(String profile) throws ConnectorException
{
+ this.profile = profile;
+
SettingsReader settings = null;
try
{
@@ -487,6 +507,11 @@ public class EnvelopedBase64BKUConnector implements Connector
}
+ public String getProfile()
+ {
+ return this.profile;
+ }
+
/**
* Returns the sign keybox identifier.
*
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/OldEnvelopingBase64BKUConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/OldEnvelopingBase64BKUConnector.java
new file mode 100644
index 0000000..d1fffb1
--- /dev/null
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/bku/OldEnvelopingBase64BKUConnector.java
@@ -0,0 +1,112 @@
+/**
+ *
+ */
+package at.knowcenter.wag.egov.egiz.sig.connectors.bku;
+
+import java.io.UnsupportedEncodingException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
+import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException;
+import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
+import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
+import at.knowcenter.wag.egov.egiz.tools.FileHelper;
+
+/**
+ *
+ * <p>
+ * This is the old base64 connector. The difference is in the way the sign
+ * response is parsed and the verify content_xml.
+ * </p>
+ *
+ * @author wprinz
+ *
+ */
+public class OldEnvelopingBase64BKUConnector extends EnvelopedBase64BKUConnector
+{
+ /**
+ * The log.
+ */
+ private static Log log = LogFactory.getLog(OldEnvelopingBase64BKUConnector.class);
+
+ // TODO implement signing - with old pre 2.7.2 BKUs... not really necessary
+ // though because this connector is only used for verification
+
+ public OldEnvelopingBase64BKUConnector(String profile) throws ConnectorException
+ {
+ super(profile);
+
+ this.environment = new OverriddenEnvironment(profile);
+ }
+
+
+
+ /**
+ * @see at.knowcenter.wag.egov.egiz.sig.connectors.bku.EnvelopedBase64BKUConnector#computeSignedPropertiesReplace(java.lang.String)
+ */
+ protected String computeSignedPropertiesReplace(String verify_xml)
+ {
+ try
+ {
+ final String ETSI_QUALIFYING_PROPERTIES_START_TAG = "<etsi:QualifyingProperties"; //$NON-NLS-1$
+ final String ETSI_QUALIFYING_PROPERTIES_END_TAG = "</etsi:QualifyingProperties>"; //$NON-NLS-1$
+
+ final int hash_start = verify_xml.indexOf(ETSI_QUALIFYING_PROPERTIES_START_TAG);
+ assert hash_start >= 0;
+ final int hash_end = verify_xml.indexOf(ETSI_QUALIFYING_PROPERTIES_END_TAG, hash_start) + ETSI_QUALIFYING_PROPERTIES_END_TAG.length();
+ assert hash_end - ETSI_QUALIFYING_PROPERTIES_END_TAG.length() >= 0;
+ assert hash_end > hash_start;
+
+ final String string_to_be_hashed = verify_xml.substring(hash_start, hash_end);
+ log.debug("etsi:QualifyingProperties string to be hashed: " + string_to_be_hashed); //$NON-NLS-1$
+
+ final byte[] bytes_to_be_hashed = string_to_be_hashed.getBytes("UTF-8"); //$NON-NLS-1$
+ byte[] sig_prop_code = CodingHelper.buildDigest(bytes_to_be_hashed);
+ String sig_prop_hash = CodingHelper.encodeBase64(sig_prop_code);
+
+ return sig_prop_hash;
+ }
+ catch (UnsupportedEncodingException e)
+ {
+ throw new RuntimeException("Very Strange: UTF-8 character encoding not supported.", e);
+ }
+ }
+
+
+
+ public static class OverriddenEnvironment extends EnvelopedBase64BKUConnector.Environment
+ {
+
+ /**
+ * The configuration key of the verify template.
+ */
+ protected static final String VERIFY_TEMPLATE_KEY = "bku.verify.template.base64old"; //$NON-NLS-1$
+
+ public OverriddenEnvironment(String profile) throws ConnectorException
+ {
+ super(profile);
+
+ SettingsReader settings = null;
+ try
+ {
+ settings = SettingsReader.getInstance();
+ }
+ catch (SettingsException e)
+ {
+ throw new ConnectorException(300, e);
+ }
+
+ String verify_filename = getConnectorValueFromProfile(settings, profile, VERIFY_TEMPLATE_KEY);
+ this.verify_template = FileHelper.readFromFile(SettingsReader.relocateFile(verify_filename));
+ if (this.verify_template == null)
+ {
+ // TODO make this a settings exception
+ throw new ConnectorException(300, "Can not read the verify template"); //$NON-NLS-1$
+ }
+
+ }
+ }
+
+}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java
index 220a3d0..7c326f5 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/DetachedLocRefMOAConnector.java
@@ -62,7 +62,7 @@ public class DetachedLocRefMOAConnector implements Connector
* @throws SignatureException
* f.e.
*/
- public DetachedLocRefMOAConnector(String profile, String signature_data_url) throws SignatureException, SettingsException
+ public DetachedLocRefMOAConnector(String profile, String signature_data_url) throws ConnectorException
{
this.environment = new Environment(profile, signature_data_url);
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/EnvelopingBase64MOAConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/EnvelopingBase64MOAConnector.java
index f6580af..a29df2a 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/EnvelopingBase64MOAConnector.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/moa/EnvelopingBase64MOAConnector.java
@@ -15,11 +15,15 @@ import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
import at.knowcenter.wag.egov.egiz.sig.SignatureData;
import at.knowcenter.wag.egov.egiz.sig.SignatureResponse;
import at.knowcenter.wag.egov.egiz.sig.connectors.Connector;
+import at.knowcenter.wag.egov.egiz.sig.connectors.ConnectorChooser;
import at.knowcenter.wag.egov.egiz.sig.connectors.TemplateReplaces;
import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUHelper;
import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUPostConnection;
+import at.knowcenter.wag.egov.egiz.sig.connectors.bku.EnvelopedBase64BKUConnector;
+import at.knowcenter.wag.egov.egiz.sig.connectors.bku.OldEnvelopingBase64BKUConnector;
import at.knowcenter.wag.egov.egiz.sig.connectors.bku.SignSignatureObject;
import at.knowcenter.wag.egov.egiz.sig.sigid.OldMOAIdFormatter;
+import at.knowcenter.wag.egov.egiz.sig.sigkz.SigKZIDHelper;
import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
import at.knowcenter.wag.egov.egiz.tools.FileHelper;
@@ -140,7 +144,7 @@ public class EnvelopingBase64MOAConnector implements Connector
log.debug("prepareSignRequest finished."); //$NON-NLS-1$
return sign_request_xml;
}
-
+
/**
* Prepares the verify request xml to be sent using the verify request
* template.
@@ -153,25 +157,28 @@ public class EnvelopingBase64MOAConnector implements Connector
* @throws ConnectorException
* f.e.
*/
- public String prepareVerifyRequest(SignatureData data,
- SignSignatureObject so) throws ConnectorException
+ public String prepareVerifyRequest(SignatureData data, SignSignatureObject so) throws ConnectorException
{
String verify_request_template = this.environment.getVerifyRequestTemplate();
String xml_content = null;
- // TODO implement MOA
- // if (sigObject.isMOASigned())
- // {
- // MOAConnector moa_conn = new MOAConnector();
- // // get the MOA-template
- // verify_template_str = moa_conn.getVerifyTemplate(normalizedText,
- // sigObject);
- // }
- // else
- // {
- // get the BKU-template
- xml_content = prepareXMLContent(data, so);
- // }
+ if (!SigKZIDHelper.isMOASigned(so))
+ {
+ if (SigKZIDHelper.isOldBKU(so))
+ {
+ OldEnvelopingBase64BKUConnector bku_connector = new OldEnvelopingBase64BKUConnector(this.environment.getProfile());
+ xml_content = bku_connector.prepareXMLContent(data, so);
+ }
+ else
+ {
+ EnvelopedBase64BKUConnector bku_connector = new EnvelopedBase64BKUConnector(this.environment.getProfile());
+ xml_content = bku_connector.prepareXMLContent(data, so);
+ }
+ }
+ else
+ {
+ xml_content = prepareXMLContent(data, so);
+ }
String verify_request_xml = verify_request_template.replaceFirst(TemplateReplaces.XML_CONTENT_REPLACE, xml_content);
verify_request_xml = verify_request_xml.replaceFirst(TemplateReplaces.TRUST_PROFILE_ID_REPLACE, this.environment.getVerifyTrustProfileId());
@@ -226,7 +233,6 @@ public class EnvelopingBase64MOAConnector implements Connector
return signature_response;
}
-
/**
* Prepares the XML content the holds the actual signature data.
*
@@ -355,12 +361,11 @@ public class EnvelopingBase64MOAConnector implements Connector
* The configuration key of the verify URL.
*/
protected static final String VERIFY_URL_KEY = "moa.verify.url"; //$NON-NLS-1$
-
+
/**
* The configuration key of the trust profile id.
*/
- protected static final String VERIFY_TRUST_PROFILE_ID = "moa.verify.TrustProfileID"; //$NON-NLS-1$
-
+ protected static final String VERIFY_TRUST_PROFILE_ID = "moa.verify.TrustProfileID"; //$NON-NLS-1$
/**
* The configuration key for the ECDSA cert alg property.
@@ -371,6 +376,8 @@ public class EnvelopingBase64MOAConnector implements Connector
* The configuration key for the RSA cert alg property.
*/
protected static final String RSA_CERT_ALG_KEY = "cert.alg.rsa"; //$NON-NLS-1$
+
+ protected String profile = null;
protected String sign_key_identifier = null;
@@ -383,7 +390,7 @@ public class EnvelopingBase64MOAConnector implements Connector
protected String verify_template = null;
protected String verify_url = null;
-
+
protected String verify_trust_profile_id = null;
protected String cert_alg_ecdsa = null;
@@ -395,11 +402,13 @@ public class EnvelopingBase64MOAConnector implements Connector
*
* @param profile
* The configuration profile.
- * @throws ConnectorException
+ * @throws ConnectorException
* f.e.
*/
public Environment(String profile) throws ConnectorException
{
+ this.profile = profile;
+
SettingsReader settings = null;
try
{
@@ -444,6 +453,11 @@ public class EnvelopingBase64MOAConnector implements Connector
this.cert_alg_rsa = settings.getValueFromKey(RSA_CERT_ALG_KEY);
}
+
+ public String getProfile()
+ {
+ return this.profile;
+ }
/**
* Returns the sign key identifier.
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/DetachedIdFormatter.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/DetachedIdFormatter.java
index 273be52..25e4504 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/DetachedIdFormatter.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/DetachedIdFormatter.java
@@ -15,7 +15,7 @@ public class DetachedIdFormatter implements IdFormatter
/**
* The SIG_ID prefix.
*/
- public static final String SIG_ID_PREFIX = "etsi-bku-detached@"; //$NON-NLS-1$
+ public static final String SIG_ID_PREFIX = "etsi-bku-detached"; //$NON-NLS-1$
/**
* The log.
@@ -51,7 +51,7 @@ public class DetachedIdFormatter implements IdFormatter
join += "-" + cur_id; //$NON-NLS-1$
}
String idstr = base + "@" + join.substring(1); //$NON-NLS-1$
- String final_ids = SIG_ID_PREFIX + idstr;
+ String final_ids = SIG_ID_PREFIX + "@" + idstr;
return final_ids;
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/DetachedLocRefMOAIdFormatter.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/DetachedLocRefMOAIdFormatter.java
index d37ead0..f1060fb 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/DetachedLocRefMOAIdFormatter.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/DetachedLocRefMOAIdFormatter.java
@@ -12,7 +12,7 @@ public class DetachedLocRefMOAIdFormatter implements IdFormatter
/**
* The SIG_ID prefix.
*/
- public static final String SIG_ID_PREFIX = "etsi-moa-detached@"; //$NON-NLS-1$
+ public static final String SIG_ID_PREFIX = "etsi-moa-detached"; //$NON-NLS-1$
/**
* @see at.knowcenter.wag.egov.egiz.sig.sigid.IdFormatter#formatIds(java.lang.String[])
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/HotfixIdFormatter.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/HotfixIdFormatter.java
index cb04d03..ac86b4f 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/HotfixIdFormatter.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigid/HotfixIdFormatter.java
@@ -15,7 +15,7 @@ public class HotfixIdFormatter implements IdFormatter
/**
* The SIG_ID prefix.
*/
- public static final String SIG_ID_PREFIX = "etsi-bka-1.0@"; //$NON-NLS-1$
+ public static final String SIG_ID_PREFIX = "etsi-bka-1.0"; //$NON-NLS-1$
/**
* The log.
@@ -47,7 +47,7 @@ public class HotfixIdFormatter implements IdFormatter
}
String idstr = base + "@" + join.substring(1); //$NON-NLS-1$
- String final_ids = SIG_ID_PREFIX + idstr;
+ String final_ids = SIG_ID_PREFIX + "@" + idstr;
return final_ids;
}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigkz/SigKZIDHelper.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigkz/SigKZIDHelper.java
new file mode 100644
index 0000000..d50006a
--- /dev/null
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/sigkz/SigKZIDHelper.java
@@ -0,0 +1,131 @@
+/**
+ *
+ */
+package at.knowcenter.wag.egov.egiz.sig.sigkz;
+
+import at.knowcenter.wag.egov.egiz.PdfASID;
+import at.knowcenter.wag.egov.egiz.exceptions.ConnectorException;
+import at.knowcenter.wag.egov.egiz.exceptions.InvalidIDException;
+import at.knowcenter.wag.egov.egiz.framework.SignatorFactory;
+import at.knowcenter.wag.egov.egiz.sig.connectors.bku.SignSignatureObject;
+import at.knowcenter.wag.egov.egiz.sig.sigid.DetachedLocRefMOAIdFormatter;
+import at.knowcenter.wag.egov.egiz.sig.sigid.HotfixIdFormatter;
+
+/**
+ * @author wprinz
+ *
+ */
+public final class SigKZIDHelper
+{
+
+ public static boolean isTextual(PdfASID sig_kz)
+ {
+ if (sig_kz == null)
+ {
+ // Old signature -> must be textual.
+
+ return true;
+ }
+
+ // new signauture -> sig_kz decides
+ return sig_kz.getType().equals(SignatorFactory.TYPE_TEXTUAL);
+ }
+
+ public static boolean isBinary(PdfASID sig_kz)
+ {
+ return ! isTextual(sig_kz);
+ }
+
+
+ public static boolean isMOASigned(PdfASID sig_kz, String sig_id)
+ {
+ if (sig_kz == null || sig_kz.getVersion().equals(SignatorFactory.VERSION_1_0_0))
+ {
+ // old signature - if sig_id is null this means MOA
+
+ return sig_id == null;
+ }
+
+ // new signature - sig_id decides
+ String [] ids = sig_id.split("@");
+ String prefix = ids[0];
+
+ if (prefix.equals(DetachedLocRefMOAIdFormatter.SIG_ID_PREFIX))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isMOASigned(SignSignatureObject so)
+ {
+ String sig_kz = so.kz;
+ String sig_id = so.id;
+ PdfASID kz = null;
+ if (sig_kz != null)
+ {
+ try
+ {
+ kz = new PdfASID(sig_kz);
+ }
+ catch (InvalidIDException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ return isMOASigned(kz, sig_id);
+ }
+
+ public static boolean isOldBKU(PdfASID sig_kz, String sig_id) throws ConnectorException
+ {
+ if (sig_kz == null)
+ {
+ return true;
+ }
+
+ if (sig_kz.getVersion().equals(SignatorFactory.VERSION_1_0_0))
+ {
+ if (sig_id == null)
+ {
+ throw new ConnectorException(310, "The SIG_ID is null - so this isn't a BKU at all.");
+ }
+
+ String[] sig_id_parts = sig_id.split("@");
+ if (sig_id_parts.length == 2)
+ {
+ return true;
+ }
+ if (sig_id_parts[0].equals(HotfixIdFormatter.SIG_ID_PREFIX))
+ {
+
+ return false;
+ }
+
+ throw new ConnectorException(310, "The SIG_KZ version is 1.0.0, but SIG_ID is neither MOA nor Old base64 nor Hotfix base64 ???'");
+ }
+
+ return false;
+ }
+
+ public static boolean isOldBKU(SignSignatureObject so) throws ConnectorException
+ {
+ String sig_kz = so.kz;
+ String sig_id = so.id;
+ PdfASID kz = null;
+ if (sig_kz != null)
+ {
+ try
+ {
+ kz = new PdfASID(sig_kz);
+ }
+ catch (InvalidIDException e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ return isOldBKU(kz, sig_id);
+ }
+
+}
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/LocalRequestHelper.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/LocalRequestHelper.java
index 723bc90..8fac221 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/LocalRequestHelper.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/LocalRequestHelper.java
@@ -32,6 +32,7 @@ import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory;
+import at.knowcenter.wag.egov.egiz.sig.connectors.ConnectorChooser;
import at.knowcenter.wag.egov.egiz.sig.connectors.LocalConnector;
import at.knowcenter.wag.egov.egiz.sig.SignatureData;
import at.knowcenter.wag.egov.egiz.sig.SignatureDataImpl;
@@ -79,7 +80,7 @@ public abstract class LocalRequestHelper
URL loc_ref_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/RetrieveSignatureData");
String loc_ref_url = response.encodeURL(loc_ref_URL.toString());
- LocalConnector c = new LocRefDetachedBKUConnector(si.type, loc_ref_url);
+ LocalConnector c = ConnectorChooser.chooseLocalConnectorForSign(si.connector, si.type, loc_ref_url);
String sign_request = c.prepareSignRequest(si.iui.signature_data);
// TODO local URL
@@ -169,8 +170,6 @@ public abstract class LocalRequestHelper
URL loc_ref_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/RetrieveSignatureData");
String loc_ref_url = response.encodeURL(loc_ref_URL.toString());
- LocalConnector local_conn = new LocRefDetachedBKUConnector(si.type, loc_ref_url);
-
for (int i = 0; i < si.requests.length; i++)
{
SignatureHolder holder = (SignatureHolder) holders_to_verify.get(i);
@@ -197,8 +196,9 @@ public abstract class LocalRequestHelper
so.issuer = s.getSignationIssuer();
so.x509Certificate = s.getX509Cert().getX509Certificate();
so.id = s.getSignationIds();
- so.kz = s.getKZ().toString();
+ so.kz = s.getKZ() == null ? null : s.getKZ().toString();
+ LocalConnector local_conn = ConnectorChooser.chooseLocalConnectorForVerify(si.connector, s.getKZ(), so.id, si.type, loc_ref_url);
String request_string = local_conn.prepareVerifyRequest(sd, so);
LocalRequest local_request = new LocalRequest("not-needed", request_string);
@@ -206,6 +206,7 @@ public abstract class LocalRequestHelper
si.response_properties[i] = null;
}
+ // TODO read from config
String local_request_url = "http://127.0.0.1:3495/http-security-layer-request";
URL data_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/DataURL");
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java
index 7d7220c..72f7c2d 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/DataURLServlet.java
@@ -25,7 +25,9 @@ import at.knowcenter.wag.egov.egiz.PdfASID;
import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
import at.knowcenter.wag.egov.egiz.framework.Signator;
import at.knowcenter.wag.egov.egiz.framework.SignatorFactory;
+import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
import at.knowcenter.wag.egov.egiz.sig.SignatureResponse;
+import at.knowcenter.wag.egov.egiz.sig.connectors.ConnectorChooser;
import at.knowcenter.wag.egov.egiz.sig.connectors.LocalConnector;
import at.knowcenter.wag.egov.egiz.sig.connectors.bku.BKUPostConnection;
import at.knowcenter.wag.egov.egiz.sig.connectors.bku.EnvelopedBase64BKUConnector;
@@ -152,7 +154,7 @@ public class DataURLServlet extends HttpServlet
if (si.sign_result == null)
{
- LocalConnector c = new LocRefDetachedBKUConnector(si.type, "loc ref content not needed here"); //$NON-NLS-1$
+ LocalConnector c = ConnectorChooser.chooseLocalConnectorForSign(si.connector, si.type, "loc ref content not needed here"); //$NON-NLS-1$
si.iui.signed_signature_object = c.analyzeSignResponse(si.response_properties[0]);
@@ -172,7 +174,12 @@ public class DataURLServlet extends HttpServlet
for (int i = 0; i < si.response_properties.length; i++)
{
- LocalConnector c = new LocRefDetachedBKUConnector(si.type, "loc ref content not needed here"); //$NON-NLS-1$
+ SignatureHolder sh = (SignatureHolder) si.signature_holders.get(i);
+
+ PdfASID sig_kz = sh.getSignatureObject().getKZ();
+ String sig_id = sh.getSignatureObject().getSignationIds();
+
+ LocalConnector c = ConnectorChooser.chooseLocalConnectorForVerify(si.connector, sig_kz, sig_id, si.type, "loc ref content not needed here"); //$NON-NLS-1$
SignatureResponse sig_resp = c.analyzeVerifyResponse(si.response_properties[i]);
results.add(sig_resp);
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java
index f2cbde8..a98fb79 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/SignServlet.java
@@ -58,6 +58,7 @@ import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory;
import at.knowcenter.wag.egov.egiz.sig.SignatureData;
import at.knowcenter.wag.egov.egiz.sig.SignatureDataImpl;
import at.knowcenter.wag.egov.egiz.sig.connectors.Connector;
+import at.knowcenter.wag.egov.egiz.sig.connectors.ConnectorChooser;
import at.knowcenter.wag.egov.egiz.sig.connectors.LocalConnector;
import at.knowcenter.wag.egov.egiz.sig.connectors.bku.DetachedBKUConnector;
import at.knowcenter.wag.egov.egiz.sig.connectors.bku.EnvelopedBase64BKUConnector;
@@ -430,7 +431,7 @@ public class SignServlet extends HttpServlet
URL signature_data_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/RetrieveSignatureData");
String signature_data_url = response.encodeURL(signature_data_URL.toString());
- Connector c = new DetachedLocRefMOAConnector(si.type, signature_data_url);
+ Connector c = ConnectorChooser.chooseWebConnectorForSign(si.connector, si.type, signature_data_url);
si.iui.signed_signature_object = c.doSign(si.iui.signature_data);
si.sign_result = signator.finishSign(si.iui);
diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java
index ee20498..40ec9d9 100644
--- a/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java
+++ b/src/main/java/at/knowcenter/wag/egov/egiz/web/servlets/VerifyServlet.java
@@ -22,7 +22,6 @@ import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
-import java.util.Properties;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
@@ -36,33 +35,17 @@ import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Logger;
import at.knowcenter.wag.egov.egiz.PdfAS;
-import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
-import at.knowcenter.wag.egov.egiz.exceptions.ConnectorFactoryException;
-import at.knowcenter.wag.egov.egiz.exceptions.NormalizeException;
import at.knowcenter.wag.egov.egiz.exceptions.PDFDocumentException;
import at.knowcenter.wag.egov.egiz.exceptions.PresentableException;
-import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
-import at.knowcenter.wag.egov.egiz.exceptions.SignatureTypesException;
import at.knowcenter.wag.egov.egiz.framework.VerificationFilter;
-import at.knowcenter.wag.egov.egiz.pdf.SignatureHolder;
import at.knowcenter.wag.egov.egiz.sig.ConnectorFactory;
-import at.knowcenter.wag.egov.egiz.sig.SignatureData;
-import at.knowcenter.wag.egov.egiz.sig.SignatureDataImpl;
-import at.knowcenter.wag.egov.egiz.sig.SignatureObject;
-import at.knowcenter.wag.egov.egiz.sig.connectors.LocalConnector;
-import at.knowcenter.wag.egov.egiz.sig.connectors.bku.LocRefDetachedBKUConnector;
-import at.knowcenter.wag.egov.egiz.sig.connectors.bku.SignSignatureObject;
-import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
import at.knowcenter.wag.egov.egiz.web.FormFields;
-import at.knowcenter.wag.egov.egiz.web.LocalRequest;
import at.knowcenter.wag.egov.egiz.web.LocalRequestHelper;
import at.knowcenter.wag.egov.egiz.web.SessionAttributes;
import at.knowcenter.wag.egov.egiz.web.SessionInformation;
-import at.knowcenter.wag.egov.egiz.web.servlets.SignServlet.UploadedData;
/**
* This method is the verify servlet for the pdf-as web application. It takes
@@ -144,7 +127,11 @@ public class VerifyServlet extends HttpServlet
return;
}
- List results = PdfAS.verifySignatureHolders(signature_holders, si.connector);
+ String host = request.getServerName();
+ URL loc_ref_URL = new URL(request.getScheme(), host, request.getServerPort(), request.getContextPath() + "/RetrieveSignatureData");
+ String loc_ref_url = response.encodeURL(loc_ref_URL.toString());
+
+ List results = PdfAS.verifySignatureHoldersWeb(signature_holders, si.connector, loc_ref_url);
dispatchToResults(results, request, response);
}
diff --git a/work/cfg/config.properties b/work/cfg/config.properties
index 7aecb70..d1dd6d0 100644
--- a/work/cfg/config.properties
+++ b/work/cfg/config.properties
@@ -25,29 +25,16 @@ bku.available_for_commandline=true
bku.sign.url=http://127.0.0.1:3495/http-security-layer-request
bku.sign.KeyboxIdentifier=SecureSignatureKeypair
-
bku.sign.request.base64=./templates/BKUSignRequestBase64.xml
bku.sign.request.detached=./templates/BKUSignRequestDetached.xml
-bku.sign.request.binaer=./templates/BKUSignRequestBinaryDetached.xml
-bku.sign.request.text=./templates/BKUSignRequestTextualDetached.xml
-
bku.verify.url=http://127.0.0.1:3495/http-security-layer-request
bku.verify.request.base64=./templates/BKUVerifyRequestBase64.xml
bku.verify.request.detached=./templates/BKUVerifyRequestDetached.xml
-
-# TODO
-#bku.verify.template=./templates/BKUVerifyTemplateB64.xml
-#bku.verify.template.SP=./templates/BKUVerifyTemplateSP.xml
-bku.verify.template=./templates/BKUVerifyTemplateDetached.xml
-bku.verify.template.SP=./templates/BKUVerifyTemplateSP.xml
-
+bku.verify.template.base64old=./templates/BKUVerifyTemplateBase64old.xml
bku.verify.template.base64=./templates/BKUVerifyTemplateBase64.xml
bku.verify.template.detached=./templates/BKUVerifyTemplateDetached.xml
-bku.verify.template2=./templates/BKUVerifyTemplateB64_neueBKU.xml
-bku.verify.template2.SP=./templates/BKUVerifyTemplateSP_neueBKU.xml
-
a1.available_for_web=false
a1.available_for_commandline=false
@@ -66,22 +53,14 @@ moa.available_for_web=true
moa.available_for_commandline=true
moa.sign.url=http://127.0.0.1:18080/moa-spss/services/SignatureCreation
-moa.sign.request=./templates/MOASignRequestB64.xml
-
+moa.sign.KeyIdentifier=TestKey2
moa.sign.request.base64=./templates/MOASignRequestBase64.xml
moa.sign.request.detached=./templates/MOASignRequestDetached.xml
-moa.sign.KeyIdentifier=TestKey2
-
moa.verify.url=http://127.0.0.1:18080/moa-spss/services/SignatureVerification
+moa.verify.TrustProfileID=Test-Signaturdienste
moa.verify.request.base64=./templates/old/MOAVerifyRequest.xml
moa.verify.request.detached=./templates/MOAVerifyRequestDetached.xml
-
-
-moa.verify.template=./templates/MOAVerifyTemplateB64.xml
-moa.verify.template.SP=./templates/MOAVerifyTemplateSP.xml
-moa.verify.TrustProfileID=Test-Signaturdienste
-
moa.verify.template.base64=./templates/MOAVerifyTemplateBase64.xml
moa.verify.template.detached=./templates/old/MOAVerifyTemplateB64.xml
diff --git a/work/cfg/help_text.properties b/work/cfg/help_text.properties
index 75e7229..910fd3c 100644
--- a/work/cfg/help_text.properties
+++ b/work/cfg/help_text.properties
@@ -51,6 +51,9 @@ error.code.315=Beim Auffinden der Signaturen ist ein Fehler aufgetreten. Obwohl
error.code.320=Es kann keine Verbindung zur Bürgerkartenumgebung hergestellt werden.
error.code.330=Es kann keine Verbindung zu MOA hergestellt werden oder MOA hat den Request zurückgewiesen.
+# TODO remove this when MOA detached is ready
+error.code.370=Eine detached Signature kann zur Zeit mit MOA nicht überprüft werden.
+
#NormalizeException
error.code.400=Das Normalisierungsmodul kann nicht initialisiert werden.
diff --git a/work/templates/BKUVerifyTemplateBase64old.xml b/work/templates/BKUVerifyTemplateBase64old.xml
new file mode 100644
index 0000000..f1d04db
--- /dev/null
+++ b/work/templates/BKUVerifyTemplateBase64old.xml
@@ -0,0 +1,6 @@
+<dsig:Signature xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Id="signature-SigIdReplace"><dsig:SignedInfo><dsig:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><dsig:SignatureMethod Algorithm="CertAlgReplace"/><dsig:Reference Id="signed-data-reference-SigDataRefReplace" URI="#signed-data-object-SigDataObjURIReplace"><dsig:Transforms><dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2"><xpf:XPath xmlns:xpf="http://www.w3.org/2002/06/xmldsig-filter2" Filter="intersect">id('signed-data-object-SigDataObjURIReplace')/node()</xpf:XPath></dsig:Transform><dsig:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#base64"/></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><dsig:DigestValue>DigestValueSignedDataReplace</dsig:DigestValue></dsig:Reference><dsig:Reference Id="etsi-data-reference-EtsiDataRefReplace" Type="http://uri.etsi.org/01903/v1.1.1#SignedProperties" URI="#etsi-data-object-EtsiDataObjURIReplace"><dsig:Transforms><dsig:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2"><xpf:XPath xmlns:xpf="http://www.w3.org/2002/06/xmldsig-filter2" Filter="intersect">id('etsi-data-object-EtsiDataObjURIReplace')/node()</xpf:XPath></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><dsig:DigestValue>DigestValueSignedPropertiesReplace</dsig:DigestValue></dsig:Reference></dsig:SignedInfo>
+<dsig:SignatureValue>SignatureValueReplace</dsig:SignatureValue>
+<dsig:KeyInfo><dsig:X509Data><dsig:X509Certificate>X509CertificateReplace</dsig:X509Certificate></dsig:X509Data></dsig:KeyInfo>
+<dsig:Object Id="signed-data-object-SigDataObjURIReplace"><sl:Base64Content>Base64ContentReplace</sl:Base64Content></dsig:Object>
+<dsig:Object Id="etsi-data-object-EtsiDataObjURIReplace"><etsi:QualifyingProperties xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:etsi="http://uri.etsi.org/01903/v1.1.1#" Target="#signature-SigIdReplace"><etsi:SignedProperties><etsi:SignedSignatureProperties><etsi:SigningTime>SigningTimeReplace</etsi:SigningTime><etsi:SigningCertificate><etsi:Cert><etsi:CertDigest><etsi:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></etsi:DigestMethod><etsi:DigestValue>DigestValueX509CertificateReplace</etsi:DigestValue></etsi:CertDigest><etsi:IssuerSerial><dsig:X509IssuerName>X509IssuerNameReplace</dsig:X509IssuerName><dsig:X509SerialNumber>X509SerialNumberReplace</dsig:X509SerialNumber></etsi:IssuerSerial></etsi:Cert></etsi:SigningCertificate><etsi:SignaturePolicyIdentifier><etsi:SignaturePolicyImplied></etsi:SignaturePolicyImplied></etsi:SignaturePolicyIdentifier></etsi:SignedSignatureProperties><etsi:SignedDataObjectProperties><etsi:DataObjectFormat ObjectReference="#signed-data-reference-SigDataRefReplace"><etsi:MimeType>text/plain</etsi:MimeType></etsi:DataObjectFormat></etsi:SignedDataObjectProperties></etsi:SignedProperties></etsi:QualifyingProperties></dsig:Object>
+</dsig:Signature> \ No newline at end of file