aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/test/at/knowcenter/wag/egov/egiz/detached/BKUConnector.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/test/at/knowcenter/wag/egov/egiz/detached/BKUConnector.java')
-rw-r--r--src/test/java/test/at/knowcenter/wag/egov/egiz/detached/BKUConnector.java1885
1 files changed, 929 insertions, 956 deletions
diff --git a/src/test/java/test/at/knowcenter/wag/egov/egiz/detached/BKUConnector.java b/src/test/java/test/at/knowcenter/wag/egov/egiz/detached/BKUConnector.java
index d395de5..072c277 100644
--- a/src/test/java/test/at/knowcenter/wag/egov/egiz/detached/BKUConnector.java
+++ b/src/test/java/test/at/knowcenter/wag/egov/egiz/detached/BKUConnector.java
@@ -17,33 +17,6 @@
*/
package test.at.knowcenter.wag.egov.egiz.detached;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
-import java.util.Properties;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-
-import java.io.File;
-import at.knowcenter.wag.egov.egiz.PdfASID;
-import at.knowcenter.wag.egov.egiz.cfg.ConfigLogger;
-import at.knowcenter.wag.egov.egiz.cfg.SettingsReader;
-import at.knowcenter.wag.egov.egiz.exceptions.SettingsException;
-import at.knowcenter.wag.egov.egiz.exceptions.SignatureException;
-import at.knowcenter.wag.egov.egiz.exceptions.SignatureTypesException;
-import at.knowcenter.wag.egov.egiz.sig.ConnectorInformation;
-import at.knowcenter.wag.egov.egiz.sig.LocalConnector;
-import at.knowcenter.wag.egov.egiz.sig.SignatureObject;
-import at.knowcenter.wag.egov.egiz.sig.SignatureResponse;
-import at.knowcenter.wag.egov.egiz.framework.SignatorFactory;
-import at.knowcenter.wag.egov.egiz.sig.X509Cert;
-import at.knowcenter.wag.egov.egiz.sig.connectors.ConnectorConfigurationKeys;
-import at.knowcenter.wag.egov.egiz.sig.connectors.MOAConnector;
-import at.knowcenter.wag.egov.egiz.tools.CodingHelper;
-import at.knowcenter.wag.egov.egiz.tools.FileHelper;
/**
* Connector for communicating with BKU.
@@ -53,935 +26,935 @@ import at.knowcenter.wag.egov.egiz.tools.FileHelper;
*/
public class BKUConnector
{
- /**
- * ConnectorInformation that identifies this Connector to the system.
- *
- * @see at.knowcenter.wag.egov.egiz.sig.ConnectorFactory
- * @see ConnectorInformation
- */
- public static final ConnectorInformation CONNECTOR_INFORMATION = new ConnectorInformation("bku", "BKU");
-
- /**
- * The SettingsReader instance
- */
- private SettingsReader settings_ = null;
-
- /**
- * The logger definition.
- */
- private static final Logger logger_ = ConfigLogger.getLogger(BKUConnector.class);
-
- /**
- * The empty constructor
- */
- public BKUConnector() throws SignatureException
- {
- loadSettings();
- }
-
- /**
- * load the inital signature settings
- *
- * @see SettingsReader
- */
- private void loadSettings() throws SignatureException
- {
- if (settings_ == null)
- {
- try
- {
- settings_ = SettingsReader.getInstance();
- }
- catch (SettingsException e)
- {
- String log_message = "Can not load signature settings. Cause:\n" + e.getMessage();
- logger_.error(log_message);
- throw new SignatureException(101, log_message, e);
- }
- }
- }
-
- public SignatureObject doSign(String sigType, byte[] data, PdfASID algorithm) throws SignatureException
- {
- String sigmode = algorithm.getType();
-
- String request_string = prepareSignRequestDetached(sigType, sigmode);
-
- String sign_url = getSignURL(sigType);
-
- String versionstring = algorithm.getVersion();
- logger_.info("versionstring=" + versionstring);
-
- String mimetype = "";
- if (sigmode.equalsIgnoreCase(SignatorFactory.TYPE_TEXTUAL))
- {
- mimetype = "text/plain";
- }
- if (sigmode.equalsIgnoreCase(SignatorFactory.TYPE_BINARY))
- {
- mimetype = "application/pdf";
- }
-
- Properties response_properties = sendRequest(sign_url, request_string, data, mimetype);
-
- return analyzeSignResponse(response_properties, sigType);
- }
-
- public SignatureResponse doVerify(byte[] data, SignatureObject sigObject) throws SignatureException
- {
- String sigmode = sigObject.getKZ().getType();
- String sigversion = sigObject.getKZ().getVersion();
-
- // decide which template should be used to verify
- // use versionstring to decide if detached Signature
- String request_string = prepareVerifyRequestDetached(data, sigObject);
- // if (sigversion.equals(SignatorFactory.VERSION_1_1_0))
- // {
- // TODO support Sign v1.1.0 Remove base64 and write tempfile
- // String sigversion=SignatorFactory.TYPE_TEXTUAL;
-
- String mimetype = "";
- if (sigmode.equalsIgnoreCase(SignatorFactory.TYPE_TEXTUAL))
- {
- mimetype = "text/plain";
- }
- if (sigmode.equalsIgnoreCase(SignatorFactory.TYPE_BINARY))
- {
- mimetype = "application/pdf";
- }
-
- String verify_url = getVerifyURL(sigObject.getSignationType());
- Properties response_properties = sendRequest(verify_url, request_string, data, mimetype);
-
- return analyzeVerifyResponse(response_properties);
- }
-
- /**
- * This method parses the BKU-Response string. It separates the
- * SignatureValue, X509IssuerName, SigningTime, X509SerialNumber,
- * X509Certificate, CertDigest, DigestValue and the signation id-s. If the
- * X509Certificate is extracted it would be stored in the certificates
- * directory.
- *
- * @param xmlResponse
- * the response string from the BKU sign-request
- * @param sigObj
- * the SignatureObject that should be filled
- * @throws SignatureException
- * ErrorCode (303, 304)
- * @see SignatureObject
- * @see CodingHelper
- * @see X509Cert
- */
- private void parseCreateXMLResponse(Properties response_properties,
- SignatureObject sigObj) throws SignatureException
- {
- String xmlResponse = response_properties.getProperty("response_string");
-
- Pattern sig_val_p_s = Pattern.compile("<[\\w]*:?SignatureValue>");
- Pattern sig_val_p_e = Pattern.compile("</[\\w]*:?SignatureValue>");
- Pattern iss_nam_p_s = Pattern.compile("<[\\w]*:?X509IssuerName>");
- Pattern iss_nam_p_e = Pattern.compile("</[\\w]*:?X509IssuerName>");
- Pattern sig_tim_p_s = Pattern.compile("<[\\w]*:?SigningTime>");
- Pattern sig_tim_p_e = Pattern.compile("</[\\w]*:?SigningTime>");
- Pattern ser_num_p_s = Pattern.compile("<[\\w]*:?X509SerialNumber>");
- Pattern ser_num_p_e = Pattern.compile("</[\\w]*:?X509SerialNumber>");
- Pattern sig_cer_p_s = Pattern.compile("<[\\w]*:?X509Certificate>");
- Pattern sig_cer_p_e = Pattern.compile("</[\\w]*:?X509Certificate>");
-
- Pattern sig_cer_d_p_s = Pattern.compile("<[\\w]*:?CertDigest>");
- Pattern sig_cer_d_p_e = Pattern.compile("</[\\w]*:?CertDigest>");
- Pattern dig_val_p_s = Pattern.compile("<[\\w]*:?DigestValue>");
- Pattern dig_val_p_e = Pattern.compile("</[\\w]*:?DigestValue>");
-
- Matcher sig_val_m_s = sig_val_p_s.matcher(xmlResponse);
- Matcher sig_val_m_e = sig_val_p_e.matcher(xmlResponse);
- Matcher iss_nam_m_s = iss_nam_p_s.matcher(xmlResponse);
- Matcher iss_nam_m_e = iss_nam_p_e.matcher(xmlResponse);
- Matcher sig_tim_m_s = sig_tim_p_s.matcher(xmlResponse);
- Matcher sig_tim_m_e = sig_tim_p_e.matcher(xmlResponse);
- Matcher ser_num_m_s = ser_num_p_s.matcher(xmlResponse);
- Matcher ser_num_m_e = ser_num_p_e.matcher(xmlResponse);
- Matcher sig_cer_m_s = sig_cer_p_s.matcher(xmlResponse);
- Matcher sig_cer_m_e = sig_cer_p_e.matcher(xmlResponse);
-
- Matcher sig_cer_d_m_s = sig_cer_d_p_s.matcher(xmlResponse);
- Matcher sig_cer_d_m_e = sig_cer_d_p_e.matcher(xmlResponse);
-
- String sig_val = "";
- String iss_nam = "";
- String ser_num = "";
- String sig_tim = "";
- String sig_cer = "";
- String sig_dig = "";
-
- // SignatureValue
- if (sig_val_m_s.find() && sig_val_m_e.find())
- {
- sig_val = xmlResponse.substring(sig_val_m_s.end(), sig_val_m_e.start());
- sig_val = sig_val.replaceAll("\\s", "");
- sigObj.setSignationValue(sig_val);
- }
- // X509IssuerName
- if (iss_nam_m_s.find() && iss_nam_m_e.find())
- {
- iss_nam = xmlResponse.substring(iss_nam_m_s.end(), iss_nam_m_e.start());
- sigObj.setSignationIssuer(iss_nam);
- }
- // X509SerialNumber
- if (ser_num_m_s.find() && ser_num_m_e.find())
- {
- ser_num = xmlResponse.substring(ser_num_m_s.end(), ser_num_m_e.start());
- sigObj.setSignationSerialNumber(ser_num);
- }
- // SigningTime
- if (sig_tim_m_s.find() && sig_tim_m_e.find())
- {
- sig_tim = xmlResponse.substring(sig_tim_m_s.end(), sig_tim_m_e.start());
- sigObj.setSignationDate(sig_tim);
- }
- // CertDigest
- if (sig_cer_d_m_s.find() && sig_cer_d_m_e.find())
- {
- String cert_digest = xmlResponse.substring(sig_cer_d_m_s.end(), sig_cer_d_m_e.start());
- Matcher dig_val_m_s = dig_val_p_s.matcher(cert_digest);
- Matcher dig_val_m_e = dig_val_p_e.matcher(cert_digest);
- if (dig_val_m_s.find() && dig_val_m_e.find())
- {
- sig_dig = cert_digest.substring(dig_val_m_s.end(), dig_val_m_e.start());
- sigObj.setX509CertificateDigest(sig_dig);
- }
- }
- // extract Subject Name from X509Certificate
- if (sig_cer_m_s.find() && sig_cer_m_e.find())
- {
- sig_cer = xmlResponse.substring(sig_cer_m_s.end(), sig_cer_m_e.start());
- sig_cer = sig_cer.replaceAll("\\s", "");
- sigObj.setX509Certificate(sig_cer);
- X509Cert cert = X509Cert.initByString(sig_cer);
- if (cert.isX509Cert())
- {
- sigObj.setX509Certificate(cert.getCertString());
- String serial_num = cert.getSerialNumber();
- String subject_name = cert.getSubjectName();
- if (!ser_num.equals(serial_num))
- {
- SignatureException se = new SignatureException(303, "Serialnumber of certificate and tag X509SerialNumber differs!");
- throw se;
- }
- sigObj.setSignationName(subject_name);
- }
- }
- // extract Signature Id's
- String[] ids = new String[5];
- ids[0] = extractId(xmlResponse, "signature-");
- ids[1] = extractId(xmlResponse, "signed-data-reference-");
- ids[2] = extractId(xmlResponse, "signed-data-object-");
- ids[3] = extractId(xmlResponse, "etsi-data-reference-");
- ids[4] = extractId(xmlResponse, "etsi-data-object-");
- String final_ids = formatSigIds(ids);
- sigObj.setSignationIDs(final_ids);
- }
-
- protected String formatSigIds(String[] sigIds) throws SignatureException
- {
- // ids algorithm:
- String join = "";
- String base = null;
- for (int arr_idx = 0; arr_idx < sigIds.length; arr_idx++)
- {
- String id = sigIds[arr_idx];
- if (logger_.isDebugEnabled())
- {
- logger_.debug("Set BKU id:" + id);
- }
- int id_idx = id.lastIndexOf("-");
- if (arr_idx == 0)
- {
- base = id.substring(0, id_idx);
- }
- String cur_id = id.substring(id_idx + 1);
- if (cur_id.equalsIgnoreCase(""))
- {
- cur_id = "0";
- }
-
- join += "-" + cur_id;
- }
- String ids = base + "@" + join.substring(1);
- String final_ids = getSigIDprefixValueFromProfile() + ids;
- return final_ids;
- }
-
- protected String getSigIDprefixValueFromProfile()
- {
- String key = getType() + ".sign.SIG_IDprefix";
- String value = settings_.getValueFromKey(key);
- if (value == null)
- {
- value = "";
- }
- return value;
- }
-
- /**
- * This emthod extracts id-values from a text. The id is given by the name.
- *
- * @param text
- * the id-value that should extract from
- * @param name
- * the id-key
- * @return the value of the given key in the text
- */
- private String extractId(String text, String name)
- {
- String id = null;
- int start_idx = text.indexOf(name) + name.length();
- int end_idx = text.indexOf("\"", start_idx);
-
- final int quot_end_idx = end_idx;
- final int squot_end_idx = text.indexOf("'", start_idx);
- end_idx = Math.min(quot_end_idx, squot_end_idx);
- id = text.substring(start_idx, end_idx);
- logger_.info("extract id:" + name + id);
- if (logger_.isDebugEnabled())
- {
- logger_.debug("extract id:" + name + id);
- }
- return id;
- }
-
- public String getVerifyTemplate(byte [] data,
- SignatureObject sigObject) throws SignatureException
- {
- // TODO Template selection depending on Sigid
- try
- {
- if (data == null)
- {
- SignatureException se = new SignatureException(311, "Document can not be verified because data is empty.");
- throw se;
- }
- if (sigObject == null)
- {
- SignatureException se = new SignatureException(312, "Document can not be verified because no signature object are set.");
- throw se;
- }
-
- String verify_template = "./templates/BKUVerifyTemplateDetached.xml";//getVerifyTemplateFileName(sigObject.getSignationType());
- String sigmode = sigObject.getKZ().getType();
-
- String sig_prop_filename = "./templates/BKUVerifyTemplateSP_neueBKU_text.xml"; //getSigPropFileName(sigObject.getSignationType(), sigmode);
-
- if (sigObject.getKZ().getType().equals("binaer"))
- {
- sig_prop_filename = "./templates/BKUVerifyTemplateSP_neueBKU_bin.xml";
- }
-
-
- logger_.info(" verify_template= " + verify_template);
- logger_.info("sig_prop_filename = " + sig_prop_filename);
- String ids_string = sigObject.getSignationIds();
- logger_.info("ids_string = " + ids_string);
- String[] ids = SignatureObject.parseSigIds(ids_string);
-
- // TODO hotfix
- boolean neue_bku = true;
- if (ids[5] != null)
- {
- // Hash has to be made over an other part than in previous versions.
- // i dont know how this is in newer versions than 2.7.1
- // id[5] of Signature of 2.7.1 signed Pdfs is "etsi-bka-1.0@"
- if (ids[5].equals("etsi-bka-1.0@"))
- {
- neue_bku = true;
- }
- }
- logger_.info("verify ids[5] = " + ids[5]);
- logger_.info("verify neue_bku = " + neue_bku);
- if (neue_bku)
- {
- // verify_template =
- // getConnectorValueFromProfile(sigObject.getSignationType(),
- // "bku.verify.template2");
- // //"./templates/BKUVerifyTemplateB64_neueBKU.xml";
- // sig_prop_filename =
- // getConnectorValueFromProfile(sigObject.getSignationType(),
- // "bku.verify.template2.SP");
- // //"./templates/BKUVerifyTemplateSP_neueBKU.xml";
- }
-
- String ver_temp_str = FileHelper.readFromFile(SettingsReader.relocateFile(verify_template));
- String sig_prop_str = FileHelper.readFromFile(SettingsReader.relocateFile(sig_prop_filename));
- if (logger_.isDebugEnabled())
- {
- // logger_.debug(verify_template);
- logger_.debug(sig_prop_filename);
- }
-
- String x509_cert_string = sigObject.getX509CertificateString();
- if (x509_cert_string == null)
- {
- SignatureException se = new SignatureException(313, "Document certificate is not defined.");
- throw se;
- }
- String cert_alg = settings_.getValueFromKey("cert.alg.ecdsa");
- X509Cert x509_cert = sigObject.getX509Cert();
- if (x509_cert.isRSA())
- {
- cert_alg = settings_.getValueFromKey("cert.alg.rsa");
- }
-
- sig_prop_str = sig_prop_str.replaceFirst("SigningTimeReplace", sigObject.getSignationDate());
-
- String issuer_name = sigObject.getSignationIssuer();
- // The issuer is already unicode, so it mustn't be encoded again.
- // byte[] issuer_name =
- // CodingHelper.encodeUTF8(sigObject.getSignationIssuer());
- // new String(issuer_name); // this would double encode the String, not to
- // mention the missing encoding
- sig_prop_str = sig_prop_str.replaceFirst("X509IssuerNameReplace", issuer_name);
-
- sig_prop_str = sig_prop_str.replaceFirst("X509SerialNumberReplace", sigObject.getSignationSerialNumber());
- sig_prop_str = sig_prop_str.replaceFirst("DigestValueX509CertificateReplace", sigObject.getX509CertificateDigest());
- sig_prop_str = sig_prop_str.replaceFirst("SigIdReplace", ids[0]);
- sig_prop_str = sig_prop_str.replaceFirst("SigDataRefReplace", ids[1]);
-
- ver_temp_str = ver_temp_str.replaceFirst("CertAlgReplace", cert_alg);
- ver_temp_str = ver_temp_str.replaceFirst("TemplateQualifyingPropertiesReplace", sig_prop_str);
- byte[] sig_prop_code = CodingHelper.buildDigest(sig_prop_str.getBytes("UTF-8"));
-
- String sig_prop_hash = CodingHelper.encodeBase64(sig_prop_code);
- logger_.info("XXXXXSignedPropertiesoldbase64bku sig_prop_hash=" + sig_prop_hash);
- // TODO hotfix
- // if (neue_bku)
- // {
- // BKU Version 2.7.1 builds hash over other than previous
- final String ETSI_SIGNED_PROPERTIES_START_TAG = "<etsi:SignedProperties"; // xml
- // name
- // spaces
- // follow,
- // so
- // this
- // is
- // not
- // a
- // complete
- // tag...
- final String ETSI_SIGNED_PROPERTIES_END_TAG = "</etsi:SignedProperties>";
-
- final int hash_start = sig_prop_str.indexOf(ETSI_SIGNED_PROPERTIES_START_TAG);
- assert hash_start >= 0;
- final int hash_end = sig_prop_str.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 = sig_prop_str.substring(hash_start, hash_end);
- logger_.info("etsi:SignedProperties string to be hashed: " + string_to_be_hashed);
-
- final byte[] bytes_to_be_hashed = string_to_be_hashed.getBytes("UTF-8");
- sig_prop_code = CodingHelper.buildDigest(bytes_to_be_hashed);
- sig_prop_hash = CodingHelper.encodeBase64(sig_prop_code);
- logger_.info("XXXXXSignedPropertiesnewbase64bku sig_prop_hash=" + sig_prop_hash);
- // }
-
- ver_temp_str = ver_temp_str.replaceFirst("DigestValueSignedPropertiesReplace", sig_prop_hash);
- // logger_.info("DIGEST:" + sig_prop_hash);
- if (logger_.isDebugEnabled())
- {
- logger_.debug("build digest from QualifyingProperties:start");
- // logger_.debug("DATA :" + sig_prop_str);
- logger_.debug("DIGEST:" + sig_prop_hash);
- logger_.debug("build digest from QualifyingProperties:end");
- }
-
- ver_temp_str = ver_temp_str.replaceFirst("SignatureValueReplace", sigObject.getSignationValue());
- ver_temp_str = ver_temp_str.replaceFirst("X509CertificateReplace", x509_cert_string);
- byte[] data_value = data; // normalizedText.getBytes("UTF-8");
- byte[] data_value_hash = CodingHelper.buildDigest(data_value);
- String object_data_hash = CodingHelper.encodeBase64(data_value_hash);
- // logger_.info("XXXXXXxbase64 object_data_hash="+object_data_hash);
- // String object_data = new String(data_value);
- if (logger_.isDebugEnabled())
- {
- logger_.debug("build digest from data object:start");
- // logger_.debug("DATA :" + normalizedText);
- logger_.debug("DIGEST:" + object_data_hash);
- logger_.debug("build digest from data object:end");
- }
-
- // String raw_b64 = CodingHelper.encodeUTF8AsBase64(normalizedText);
- String raw_b64 = CodingHelper.encodeBase64(data_value);
-
- ver_temp_str = ver_temp_str.replaceFirst("Base64ContentReplace", raw_b64);
- ver_temp_str = ver_temp_str.replaceFirst("DigestValueSignedDataReplace", object_data_hash);
-
- ver_temp_str = ver_temp_str.replaceAll("SigIdReplace", ids[0]);
- ver_temp_str = ver_temp_str.replaceAll("SigDataRefReplace", ids[1]);
- ver_temp_str = ver_temp_str.replaceAll("SigDataObjURIReplace", ids[2]);
- ver_temp_str = ver_temp_str.replaceAll("EtsiDataRefReplace", ids[3]);
- ver_temp_str = ver_temp_str.replaceAll("EtsiDataObjURIReplace", ids[4]);
- if (logger_.isDebugEnabled())
- {
- // logger_.debug("VERIFY REQUEST:" + ver_temp_str);
- }
-
- return ver_temp_str;
- }
- catch (UnsupportedEncodingException e)
- {
- throw new SignatureException(310, e);
- }
- }
-
- /**
- * This method parses the verify response string and return a
- * SignatureResponse object. The SignatureResponse object is filled out by the
- * response values from the BKU-response.
- *
- * @param xmlResponse
- * the response values from the BKU-verify request
- * @return SignatureResponse object
- * @see SignatureResponse
- */
- private SignatureResponse parseVerifyXMLResponse(String xmlResponse)
- {
- if (logger_.isInfoEnabled())
- {
- logger_.info("Try parsing the verify response");
- }
-
- Pattern sub_nam_p_s = Pattern.compile("<dsig:X509SubjectName>");
- Pattern sub_nam_p_e = Pattern.compile("</dsig:X509SubjectName>");
- Pattern iss_nam_p_s = Pattern.compile("<dsig:X509IssuerName>");
- Pattern iss_nam_p_e = Pattern.compile("</dsig:X509IssuerName>");
- Pattern ser_num_p_s = Pattern.compile("<dsig:X509SerialNumber>");
- Pattern ser_num_p_e = Pattern.compile("</dsig:X509SerialNumber>");
-
- Pattern sig_chk_p_s = Pattern.compile("<sl:SignatureCheck>");
- Pattern sig_chk_p_e = Pattern.compile("</sl:SignatureCheck>");
- Pattern man_chk_p_s = Pattern.compile("<sl:SignatureManifestCheck>");
- Pattern man_chk_p_e = Pattern.compile("</sl:SignatureManifestCheck>");
- Pattern cer_chk_p_s = Pattern.compile("<sl:CertificateCheck>");
- Pattern cer_chk_p_e = Pattern.compile("</sl:CertificateCheck>");
-
- // [tknall] start qualified certificate
- Pattern cert_qualified_p = Pattern.compile("<sl:QualifiedCertificate/>");
- Matcher cert_qualified_m = cert_qualified_p.matcher(xmlResponse);
- // [tknall] stop qualified certificate
-
- Pattern code_p_s = Pattern.compile("<sl:Code>");
- Pattern code_p_e = Pattern.compile("</sl:Code>");
- Pattern info_p_s = Pattern.compile("<sl:Info>");
- Pattern info_p_e = Pattern.compile("</sl:Info>");
-
- Pattern cert_p_s = Pattern.compile("<dsig:X509Certificate>");
- Pattern cert_p_e = Pattern.compile("</dsig:X509Certificate>");
-
- Matcher sub_nam_m_s = sub_nam_p_s.matcher(xmlResponse);
- Matcher sub_nam_m_e = sub_nam_p_e.matcher(xmlResponse);
- Matcher iss_nam_m_s = iss_nam_p_s.matcher(xmlResponse);
- Matcher iss_nam_m_e = iss_nam_p_e.matcher(xmlResponse);
- Matcher ser_num_m_s = ser_num_p_s.matcher(xmlResponse);
- Matcher ser_num_m_e = ser_num_p_e.matcher(xmlResponse);
-
- Matcher sig_chk_m_s = sig_chk_p_s.matcher(xmlResponse);
- Matcher sig_chk_m_e = sig_chk_p_e.matcher(xmlResponse);
- Matcher man_chk_m_s = man_chk_p_s.matcher(xmlResponse);
- Matcher man_chk_m_e = man_chk_p_e.matcher(xmlResponse);
- Matcher cer_chk_m_s = cer_chk_p_s.matcher(xmlResponse);
- Matcher cer_chk_m_e = cer_chk_p_e.matcher(xmlResponse);
-
- Matcher cert_m_s = cert_p_s.matcher(xmlResponse);
- Matcher cert_m_e = cert_p_e.matcher(xmlResponse);
-
- SignatureResponse sig_res = new SignatureResponse();
-
- // [tknall] start qualified certificate
- sig_res.setQualifiedCertificate(cert_qualified_m.find());
- // [tknall] stop qualified certificate
-
- if (sub_nam_m_s.find() && sub_nam_m_e.find())
- {
- String sub_nam = xmlResponse.substring(sub_nam_m_s.end(), sub_nam_m_e.start());
- sig_res.setX509SubjectName(sub_nam);
- }
- if (iss_nam_m_s.find() && iss_nam_m_e.find())
- {
- String iss_nam = xmlResponse.substring(iss_nam_m_s.end(), iss_nam_m_e.start());
- sig_res.setX509IssuerName(iss_nam);
- }
- if (ser_num_m_s.find() && ser_num_m_e.find())
- {
- String ser_num = xmlResponse.substring(ser_num_m_s.end(), ser_num_m_e.start());
- sig_res.setX509SerialNumber(ser_num);
- }
- if (sig_chk_m_s.find() && sig_chk_m_e.find())
- {
- String sig_chk = xmlResponse.substring(sig_chk_m_s.end(), sig_chk_m_e.start());
- Matcher code_m_s = code_p_s.matcher(sig_chk);
- Matcher code_m_e = code_p_e.matcher(sig_chk);
- Matcher info_m_s = info_p_s.matcher(sig_chk);
- Matcher info_m_e = info_p_e.matcher(sig_chk);
- if (code_m_s.find() && code_m_e.find())
- {
- String code = sig_chk.substring(code_m_s.end(), code_m_e.start());
- sig_res.setSignatureCheckCode(code);
- }
- if (info_m_s.find() && info_m_e.find())
- {
- String info = sig_chk.substring(info_m_s.end(), info_m_e.start());
- sig_res.setSignatureCheckInfo(info);
- }
- }
- if (man_chk_m_s.find() && man_chk_m_e.find())
- {
- String man_chk = xmlResponse.substring(man_chk_m_s.end(), man_chk_m_e.start());
- Matcher code_m_s = code_p_s.matcher(man_chk);
- Matcher code_m_e = code_p_e.matcher(man_chk);
- Matcher info_m_s = info_p_s.matcher(man_chk);
- Matcher info_m_e = info_p_e.matcher(man_chk);
- if (code_m_s.find() && code_m_e.find())
- {
- String code = man_chk.substring(code_m_s.end(), code_m_e.start());
- sig_res.setSignatureManifestCheckCode(code);
- }
- if (info_m_s.find() && info_m_e.find())
- {
- String info = man_chk.substring(info_m_s.end(), info_m_e.start());
- sig_res.setSignatureManifestCheckInfo(info);
- }
- }
- if (cer_chk_m_s.find() && cer_chk_m_e.find())
- {
- String cer_chk = xmlResponse.substring(cer_chk_m_s.end(), cer_chk_m_e.start());
- Matcher code_m_s = code_p_s.matcher(cer_chk);
- Matcher code_m_e = code_p_e.matcher(cer_chk);
- Matcher info_m_s = info_p_s.matcher(cer_chk);
- Matcher info_m_e = info_p_e.matcher(cer_chk);
- if (code_m_s.find() && code_m_e.find())
- {
- String code = cer_chk.substring(code_m_s.end(), code_m_e.start());
- sig_res.setCertificateCheckCode(code);
- }
- if (info_m_s.find() && info_m_e.find())
- {
- String info = cer_chk.substring(info_m_s.end(), info_m_e.start());
- sig_res.setCertificateCheckInfo(info);
- }
- }
- if (cert_m_s.find() && cert_m_e.find())
- {
- String cert_string = xmlResponse.substring(cert_m_s.end(), cert_m_e.start());
-
- X509Cert resp_cert = X509Cert.initByString(cert_string);
- sig_res.setCertificate(resp_cert);
- }
-
- return sig_res;
- }
-
- public String prepareSignRequestDetached(String signType, String sigmode) throws SignatureException
- {
- logger_.info("Call " + getType() + " connector sigmode=" + sigmode);
-
- String keybox_identifier = getSignKeyboxIdentifier(signType);
- String sign_request_filename = getSignRequestTemplateFileName(signType, sigmode);
- String sign_req_str = FileHelper.readFromFile(SettingsReader.relocateFile(sign_request_filename));
-
- if (sign_req_str == null)
- {
- throw new SignatureException(300, "Can not read the create xml request template");
- }
- sign_req_str = sign_req_str.replaceFirst("KeyboxIdentifierReplace", keybox_identifier);
- return sign_req_str;
- }
-
- // decides if moasigned or BKU
- public String prepareVerifyRequestDetached(byte[] data,
- SignatureObject sigObject) throws SignatureException
- {
- // get templates
- String verify_request = "./templates/BKUVerifyRequestDetached.xml"; //getVerifyRequestTemplateFileName(sigObject.getSignationType());
- String verify_req_str = FileHelper.readFromFile(SettingsReader.relocateFile(verify_request));
- logger_.info("prepareVerifyRequest TemplateFile=" + verify_request);
-
- String verify_template_str = 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
- verify_template_str = getVerifyTemplate(data, sigObject);
+// /**
+// * ConnectorInformation that identifies this Connector to the system.
+// *
+// * @see at.knowcenter.wag.egov.egiz.sig.ConnectorFactory
+// * @see ConnectorInformation
+// */
+// public static final ConnectorInformation CONNECTOR_INFORMATION = new ConnectorInformation("bku", "BKU");
+//
+// /**
+// * The SettingsReader instance
+// */
+// private SettingsReader settings_ = null;
+//
+// /**
+// * The logger definition.
+// */
+// private static final Logger logger_ = ConfigLogger.getLogger(BKUConnector.class);
+//
+// /**
+// * The empty constructor
+// */
+// public BKUConnector() throws SignatureException
+// {
+// loadSettings();
+// }
+//
+// /**
+// * load the inital signature settings
+// *
+// * @see SettingsReader
+// */
+// private void loadSettings() throws SignatureException
+// {
+// if (settings_ == null)
+// {
+// try
+// {
+// settings_ = SettingsReader.getInstance();
+// }
+// catch (SettingsException e)
+// {
+// String log_message = "Can not load signature settings. Cause:\n" + e.getMessage();
+// logger_.error(log_message);
+// throw new SignatureException(101, log_message, e);
+// }
// }
-
- verify_req_str = verify_req_str.replaceFirst("XMLContentReplace", verify_template_str);
- if (logger_.isDebugEnabled())
- {
- logger_.debug("verify_req_str.xml : " + verify_req_str);
- }
-
- return verify_req_str;
- }
-
- /**
- * Sends the request to the given URL.
- *
- * @param url
- * The URL.
- * @param request_string
- * The request string.
- * @return Returns the response string.
- * @throws SignatureException
- * F.e.
- */
- protected Properties sendRequest(String url, String request_string) throws SignatureException
- {
- try
- {
- Properties response_properties = BKUPostConnection.doPostRequest(url, request_string);
- return response_properties;
- }
- catch (Exception e)
- {
- SignatureException se = new SignatureException(320, e);
- throw se;
- }
- }
-
- /**
- *
- * @param url
- * The URL.
- * @param request_string
- * The request string.
- * @return Returns the response string.
- * @throws SignatureException
- * F.e.
- */
- protected Properties sendRequest(String url, String request_string,
- byte[] signdata, String mimetype) throws SignatureException
- {
- try
- {
- // Properties response_properties =
- // BKUPostConnection.doPostRequest272(url, request_string, signdata,
- // mimetype);
- Properties response_properties = BKUPostConnection.doPostRequest272(url, request_string, signdata, mimetype);
- return response_properties;
- }
- catch (Exception e)
- {
- SignatureException se = new SignatureException(320, e);
- throw se;
- }
- }
-
- public SignatureObject analyzeSignResponse(Properties response_properties,
- String sigType) throws SignatureException
- {
- // String sign_request_filename = getSignRequestTemplateFileName(sigType);
-
- // TODO hotfix
- String response_string = response_properties.getProperty("response_string");
-
- // TODO debug
- try
- {
- FileOutputStream fos = new FileOutputStream("C:\\wprinz\\Filer\\egiz2\\sign_response.utf8.xml");
- OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
- osw.write(response_string);
- osw.close();
- }
- catch (Exception e)
- {
- logger_.error(e);
- }
-
- SignatureObject sig_obj = new SignatureObject();
- sig_obj.setRawSignatureResponse(response_string);
- try
- {
- sig_obj.setSigType(sigType);
- sig_obj.initByType();
- }
- catch (SignatureTypesException e)
- {
- SignatureException se = new SignatureException(300, "Cannot init signature object with type:" + sigType, e);
- throw se;
- }
- if (logger_.isDebugEnabled())
- {
- logger_.debug("Signature Type is:" + sig_obj.getSignationType());
- }
-
- if (!response_string.equals(""))
- {
- Pattern erc_p_s = Pattern.compile("<[\\w]*:?ErrorCode>");
- Pattern erc_p_e = Pattern.compile("</[\\w]*:?ErrorCode>");
- Matcher erc_m_s = erc_p_s.matcher(response_string);
- Matcher erc_m_e = erc_p_e.matcher(response_string);
- // System.err.println(response_string);
-
- if (erc_m_s.find() && erc_m_e.find())
- {
- if (logger_.isEnabledFor(Level.ERROR))
- {
- // logger_.debug(sign_request_filename + "_response.xml : " +
- // response_string);
- logger_.error("BKU Error response: " + response_string);
- }
- Pattern erm_p_s = Pattern.compile("<[\\w]*:?Info>");
- Pattern erm_p_e = Pattern.compile("</[\\w]*:?Info>");
- Matcher erm_m_s = erm_p_s.matcher(response_string);
- Matcher erm_m_e = erm_p_e.matcher(response_string);
- SignatureException se = new SignatureException(0, "BKUSigExc");
- String error_code = response_string.substring(erc_m_s.end(), erc_m_e.start());
- se.setExternalErrorCode(error_code);
- if (erm_m_s.find() && erm_m_e.find())
- {
- String error_mess = response_string.substring(erm_m_s.end(), erm_m_e.start());
- se.setExternalErrorMessage(error_mess);
- }
- throw se;
- }
- else
- {
- if (logger_.isDebugEnabled())
- {
- logger_.debug("signature_response_string: " + response_string);
- }
- parseCreateXMLResponse(response_properties, sig_obj);
- }
- }
- sig_obj.setSigResponse(response_string);
- return sig_obj;
- }
-
- public SignatureResponse analyzeVerifyResponse(Properties response_properties) throws SignatureException
- {
- String response_string = response_properties.getProperty("response_string");
-
- if (!response_string.equals(""))
- {
- Pattern erc_p_s = Pattern.compile("<[\\w]*:?ErrorCode>");
- Pattern erc_p_e = Pattern.compile("</[\\w]*:?ErrorCode>");
- Matcher erc_m_s = erc_p_s.matcher(response_string);
- Matcher erc_m_e = erc_p_e.matcher(response_string);
-
- if (erc_m_s.find() && erc_m_e.find())
- {
- if (logger_.isEnabledFor(Level.ERROR))
- {
- // logger_.debug(getType() + "_response.xml : " + response_string);
- logger_.error(getType() + "_response.xml : " + response_string);
- }
- Pattern erm_p_s = Pattern.compile("<[\\w]*:?Info>");
- Pattern erm_p_e = Pattern.compile("</[\\w]*:?Info>");
- Matcher erm_m_s = erm_p_s.matcher(response_string);
- Matcher erm_m_e = erm_p_e.matcher(response_string);
- SignatureException se = new SignatureException(0, "BKUSigExc");
- if (erc_m_s.find() && erc_m_e.find())
- {
- String error_code = response_string.substring(erc_m_s.end(), erc_m_e.start());
- se.setExternalErrorCode(error_code);
- }
- if (erm_m_s.find() && erm_m_e.find())
- {
- String error_mess = response_string.substring(erm_m_s.end(), erm_m_e.start());
- se.setExternalErrorMessage(error_mess);
- }
- throw se;
- }
- else
- {
- if (logger_.isDebugEnabled())
- {
- // logger_.debug(getType() + "_response.xml : " + response_string);
- }
- return parseVerifyXMLResponse(response_string);
- }
- }
- return null;
- }
-
- protected String getConnectorValueFromProfile(String profile, String key)
- {
- String value = settings_.getValueFromKey("sig_obj." + profile + "." + key);
- if (value == null)
- {
- value = settings_.getValueFromKey(key);
- }
- return value;
- }
-
- public String getSignURL(String profile)
- {
- final String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_SIGN + ".url";
- return getConnectorValueFromProfile(profile, key);
- }
-
- protected String getSignRequestTemplateFileName(String profile, String sigmode)
- {
- String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_SIGN + ".request" + "." + sigmode;
- logger_.info("getSignRequestTemplateFileName: profile=" + profile + "" + " key=" + key);
- String filename = getConnectorValueFromProfile(profile, key);
- logger_.info("getSignRequestTemplateFileName filename=" + filename);
- return filename;// getConnectorValueFromProfile(profile, key);
- }
-
- protected String getSignKeyboxIdentifier(String profile)
- {
- String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_SIGN + ".KeyboxIdentifier";
- return getConnectorValueFromProfile(profile, key);
- }
-
- public String getVerifyURL(String profile)
- {
- String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_VERIFY + ".url";
- return getConnectorValueFromProfile(profile, key);
- }
-
- protected String getVerifyRequestTemplateFileName(String profile)
- {
- String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_VERIFY + ".request";
- return getConnectorValueFromProfile(profile, key);
- }
-
- protected String getVerifyTemplateFileName(String profile)
- {
- String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_VERIFY + ".template";
- return getConnectorValueFromProfile(profile, key);
- }
-
- protected String getSigPropFileName(String profile, String sigmode)
- {
- String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_VERIFY + ".template.SP." + sigmode;
- logger_.info("getSigPropFileName: profile=" + profile + "" + " key=" + key);
- String filename = getConnectorValueFromProfile(profile, key);
- logger_.info("getSigPropFileName filename=" + filename);
- return getConnectorValueFromProfile(profile, key);
- }
-
- /**
- * Returns the type of this BKU-like connector.
- *
- * <p>
- * All settings keys will be prefixed by this type. So to reuse the BKU
- * connector, a deriving class has to implement this method specifying an own
- * type.
- * </p>
- *
- * @return Returns the type of this BKU-like connector.
- */
- protected String getType()
- {
- return CONNECTOR_INFORMATION.getIdentifier();
- }
+// }
+//
+// public SignatureObject doSign(String sigType, byte[] data, PdfASID algorithm) throws SignatureException
+// {
+// String sigmode = algorithm.getType();
+//
+// String request_string = prepareSignRequestDetached(sigType, sigmode);
+//
+// String sign_url = getSignURL(sigType);
+//
+// String versionstring = algorithm.getVersion();
+// logger_.info("versionstring=" + versionstring);
+//
+// String mimetype = "";
+// if (sigmode.equalsIgnoreCase(SignatorFactory.TYPE_TEXTUAL))
+// {
+// mimetype = "text/plain";
+// }
+// if (sigmode.equalsIgnoreCase(SignatorFactory.TYPE_BINARY))
+// {
+// mimetype = "application/pdf";
+// }
+//
+// Properties response_properties = sendRequest(sign_url, request_string, data, mimetype);
+//
+// return analyzeSignResponse(response_properties, sigType);
+// }
+//
+// public SignatureResponse doVerify(byte[] data, SignatureObject sigObject) throws SignatureException
+// {
+// String sigmode = sigObject.getKZ().getType();
+// String sigversion = sigObject.getKZ().getVersion();
+//
+// // decide which template should be used to verify
+// // use versionstring to decide if detached Signature
+// String request_string = prepareVerifyRequestDetached(data, sigObject);
+// // if (sigversion.equals(SignatorFactory.VERSION_1_1_0))
+// // {
+// // TODO support Sign v1.1.0 Remove base64 and write tempfile
+// // String sigversion=SignatorFactory.TYPE_TEXTUAL;
+//
+// String mimetype = "";
+// if (sigmode.equalsIgnoreCase(SignatorFactory.TYPE_TEXTUAL))
+// {
+// mimetype = "text/plain";
+// }
+// if (sigmode.equalsIgnoreCase(SignatorFactory.TYPE_BINARY))
+// {
+// mimetype = "application/pdf";
+// }
+//
+// String verify_url = getVerifyURL(sigObject.getSignationType());
+// Properties response_properties = sendRequest(verify_url, request_string, data, mimetype);
+//
+// return analyzeVerifyResponse(response_properties);
+// }
+//
+// /**
+// * This method parses the BKU-Response string. It separates the
+// * SignatureValue, X509IssuerName, SigningTime, X509SerialNumber,
+// * X509Certificate, CertDigest, DigestValue and the signation id-s. If the
+// * X509Certificate is extracted it would be stored in the certificates
+// * directory.
+// *
+// * @param xmlResponse
+// * the response string from the BKU sign-request
+// * @param sigObj
+// * the SignatureObject that should be filled
+// * @throws SignatureException
+// * ErrorCode (303, 304)
+// * @see SignatureObject
+// * @see CodingHelper
+// * @see X509Cert
+// */
+// private void parseCreateXMLResponse(Properties response_properties,
+// SignatureObject sigObj) throws SignatureException
+// {
+// String xmlResponse = response_properties.getProperty("response_string");
+//
+// Pattern sig_val_p_s = Pattern.compile("<[\\w]*:?SignatureValue>");
+// Pattern sig_val_p_e = Pattern.compile("</[\\w]*:?SignatureValue>");
+// Pattern iss_nam_p_s = Pattern.compile("<[\\w]*:?X509IssuerName>");
+// Pattern iss_nam_p_e = Pattern.compile("</[\\w]*:?X509IssuerName>");
+// Pattern sig_tim_p_s = Pattern.compile("<[\\w]*:?SigningTime>");
+// Pattern sig_tim_p_e = Pattern.compile("</[\\w]*:?SigningTime>");
+// Pattern ser_num_p_s = Pattern.compile("<[\\w]*:?X509SerialNumber>");
+// Pattern ser_num_p_e = Pattern.compile("</[\\w]*:?X509SerialNumber>");
+// Pattern sig_cer_p_s = Pattern.compile("<[\\w]*:?X509Certificate>");
+// Pattern sig_cer_p_e = Pattern.compile("</[\\w]*:?X509Certificate>");
+//
+// Pattern sig_cer_d_p_s = Pattern.compile("<[\\w]*:?CertDigest>");
+// Pattern sig_cer_d_p_e = Pattern.compile("</[\\w]*:?CertDigest>");
+// Pattern dig_val_p_s = Pattern.compile("<[\\w]*:?DigestValue>");
+// Pattern dig_val_p_e = Pattern.compile("</[\\w]*:?DigestValue>");
+//
+// Matcher sig_val_m_s = sig_val_p_s.matcher(xmlResponse);
+// Matcher sig_val_m_e = sig_val_p_e.matcher(xmlResponse);
+// Matcher iss_nam_m_s = iss_nam_p_s.matcher(xmlResponse);
+// Matcher iss_nam_m_e = iss_nam_p_e.matcher(xmlResponse);
+// Matcher sig_tim_m_s = sig_tim_p_s.matcher(xmlResponse);
+// Matcher sig_tim_m_e = sig_tim_p_e.matcher(xmlResponse);
+// Matcher ser_num_m_s = ser_num_p_s.matcher(xmlResponse);
+// Matcher ser_num_m_e = ser_num_p_e.matcher(xmlResponse);
+// Matcher sig_cer_m_s = sig_cer_p_s.matcher(xmlResponse);
+// Matcher sig_cer_m_e = sig_cer_p_e.matcher(xmlResponse);
+//
+// Matcher sig_cer_d_m_s = sig_cer_d_p_s.matcher(xmlResponse);
+// Matcher sig_cer_d_m_e = sig_cer_d_p_e.matcher(xmlResponse);
+//
+// String sig_val = "";
+// String iss_nam = "";
+// String ser_num = "";
+// String sig_tim = "";
+// String sig_cer = "";
+// String sig_dig = "";
+//
+// // SignatureValue
+// if (sig_val_m_s.find() && sig_val_m_e.find())
+// {
+// sig_val = xmlResponse.substring(sig_val_m_s.end(), sig_val_m_e.start());
+// sig_val = sig_val.replaceAll("\\s", "");
+// sigObj.setSignationValue(sig_val);
+// }
+// // X509IssuerName
+// if (iss_nam_m_s.find() && iss_nam_m_e.find())
+// {
+// iss_nam = xmlResponse.substring(iss_nam_m_s.end(), iss_nam_m_e.start());
+// sigObj.setSignationIssuer(iss_nam);
+// }
+// // X509SerialNumber
+// if (ser_num_m_s.find() && ser_num_m_e.find())
+// {
+// ser_num = xmlResponse.substring(ser_num_m_s.end(), ser_num_m_e.start());
+// sigObj.setSignationSerialNumber(ser_num);
+// }
+// // SigningTime
+// if (sig_tim_m_s.find() && sig_tim_m_e.find())
+// {
+// sig_tim = xmlResponse.substring(sig_tim_m_s.end(), sig_tim_m_e.start());
+// sigObj.setSignationDate(sig_tim);
+// }
+// // CertDigest
+// if (sig_cer_d_m_s.find() && sig_cer_d_m_e.find())
+// {
+// String cert_digest = xmlResponse.substring(sig_cer_d_m_s.end(), sig_cer_d_m_e.start());
+// Matcher dig_val_m_s = dig_val_p_s.matcher(cert_digest);
+// Matcher dig_val_m_e = dig_val_p_e.matcher(cert_digest);
+// if (dig_val_m_s.find() && dig_val_m_e.find())
+// {
+// sig_dig = cert_digest.substring(dig_val_m_s.end(), dig_val_m_e.start());
+// sigObj.setX509CertificateDigest(sig_dig);
+// }
+// }
+// // extract Subject Name from X509Certificate
+// if (sig_cer_m_s.find() && sig_cer_m_e.find())
+// {
+// sig_cer = xmlResponse.substring(sig_cer_m_s.end(), sig_cer_m_e.start());
+// sig_cer = sig_cer.replaceAll("\\s", "");
+// sigObj.setX509Certificate(sig_cer);
+// X509Cert cert = X509Cert.initByString(sig_cer);
+// if (cert.isX509Cert())
+// {
+// sigObj.setX509Certificate(cert.getCertString());
+// String serial_num = cert.getSerialNumber();
+// String subject_name = cert.getSubjectName();
+// if (!ser_num.equals(serial_num))
+// {
+// SignatureException se = new SignatureException(303, "Serialnumber of certificate and tag X509SerialNumber differs!");
+// throw se;
+// }
+// sigObj.setSignationName(subject_name);
+// }
+// }
+// // extract Signature Id's
+// String[] ids = new String[5];
+// ids[0] = extractId(xmlResponse, "signature-");
+// ids[1] = extractId(xmlResponse, "signed-data-reference-");
+// ids[2] = extractId(xmlResponse, "signed-data-object-");
+// ids[3] = extractId(xmlResponse, "etsi-data-reference-");
+// ids[4] = extractId(xmlResponse, "etsi-data-object-");
+// String final_ids = formatSigIds(ids);
+// sigObj.setSignationIDs(final_ids);
+// }
+//
+// protected String formatSigIds(String[] sigIds) throws SignatureException
+// {
+// // ids algorithm:
+// String join = "";
+// String base = null;
+// for (int arr_idx = 0; arr_idx < sigIds.length; arr_idx++)
+// {
+// String id = sigIds[arr_idx];
+// if (logger_.isDebugEnabled())
+// {
+// logger_.debug("Set BKU id:" + id);
+// }
+// int id_idx = id.lastIndexOf("-");
+// if (arr_idx == 0)
+// {
+// base = id.substring(0, id_idx);
+// }
+// String cur_id = id.substring(id_idx + 1);
+// if (cur_id.equalsIgnoreCase(""))
+// {
+// cur_id = "0";
+// }
+//
+// join += "-" + cur_id;
+// }
+// String ids = base + "@" + join.substring(1);
+// String final_ids = getSigIDprefixValueFromProfile() + ids;
+// return final_ids;
+// }
+//
+// protected String getSigIDprefixValueFromProfile()
+// {
+// String key = getType() + ".sign.SIG_IDprefix";
+// String value = settings_.getValueFromKey(key);
+// if (value == null)
+// {
+// value = "";
+// }
+// return value;
+// }
+//
+// /**
+// * This emthod extracts id-values from a text. The id is given by the name.
+// *
+// * @param text
+// * the id-value that should extract from
+// * @param name
+// * the id-key
+// * @return the value of the given key in the text
+// */
+// private String extractId(String text, String name)
+// {
+// String id = null;
+// int start_idx = text.indexOf(name) + name.length();
+// int end_idx = text.indexOf("\"", start_idx);
+//
+// final int quot_end_idx = end_idx;
+// final int squot_end_idx = text.indexOf("'", start_idx);
+// end_idx = Math.min(quot_end_idx, squot_end_idx);
+// id = text.substring(start_idx, end_idx);
+// logger_.info("extract id:" + name + id);
+// if (logger_.isDebugEnabled())
+// {
+// logger_.debug("extract id:" + name + id);
+// }
+// return id;
+// }
+//
+// public String getVerifyTemplate(byte [] data,
+// SignatureObject sigObject) throws SignatureException
+// {
+// // TODO Template selection depending on Sigid
+// try
+// {
+// if (data == null)
+// {
+// SignatureException se = new SignatureException(311, "Document can not be verified because data is empty.");
+// throw se;
+// }
+// if (sigObject == null)
+// {
+// SignatureException se = new SignatureException(312, "Document can not be verified because no signature object are set.");
+// throw se;
+// }
+//
+// String verify_template = "./templates/BKUVerifyTemplateDetached.xml";//getVerifyTemplateFileName(sigObject.getSignationType());
+// String sigmode = sigObject.getKZ().getType();
+//
+// String sig_prop_filename = "./templates/BKUVerifyTemplateSP_neueBKU_text.xml"; //getSigPropFileName(sigObject.getSignationType(), sigmode);
+//
+// if (sigObject.getKZ().getType().equals("binaer"))
+// {
+// sig_prop_filename = "./templates/BKUVerifyTemplateSP_neueBKU_bin.xml";
+// }
+//
+//
+// logger_.info(" verify_template= " + verify_template);
+// logger_.info("sig_prop_filename = " + sig_prop_filename);
+// String ids_string = sigObject.getSignationIds();
+// logger_.info("ids_string = " + ids_string);
+// String[] ids = SignatureObject.parseSigIds(ids_string);
+//
+// // TODO hotfix
+// boolean neue_bku = true;
+// if (ids[5] != null)
+// {
+// // Hash has to be made over an other part than in previous versions.
+// // i dont know how this is in newer versions than 2.7.1
+// // id[5] of Signature of 2.7.1 signed Pdfs is "etsi-bka-1.0@"
+// if (ids[5].equals("etsi-bka-1.0@"))
+// {
+// neue_bku = true;
+// }
+// }
+// logger_.info("verify ids[5] = " + ids[5]);
+// logger_.info("verify neue_bku = " + neue_bku);
+// if (neue_bku)
+// {
+// // verify_template =
+// // getConnectorValueFromProfile(sigObject.getSignationType(),
+// // "bku.verify.template2");
+// // //"./templates/BKUVerifyTemplateB64_neueBKU.xml";
+// // sig_prop_filename =
+// // getConnectorValueFromProfile(sigObject.getSignationType(),
+// // "bku.verify.template2.SP");
+// // //"./templates/BKUVerifyTemplateSP_neueBKU.xml";
+// }
+//
+// String ver_temp_str = FileHelper.readFromFile(SettingsReader.relocateFile(verify_template));
+// String sig_prop_str = FileHelper.readFromFile(SettingsReader.relocateFile(sig_prop_filename));
+// if (logger_.isDebugEnabled())
+// {
+// // logger_.debug(verify_template);
+// logger_.debug(sig_prop_filename);
+// }
+//
+// String x509_cert_string = sigObject.getX509CertificateString();
+// if (x509_cert_string == null)
+// {
+// SignatureException se = new SignatureException(313, "Document certificate is not defined.");
+// throw se;
+// }
+// String cert_alg = settings_.getValueFromKey("cert.alg.ecdsa");
+// X509Cert x509_cert = sigObject.getX509Cert();
+// if (x509_cert.isRSA())
+// {
+// cert_alg = settings_.getValueFromKey("cert.alg.rsa");
+// }
+//
+// sig_prop_str = sig_prop_str.replaceFirst("SigningTimeReplace", sigObject.getSignationDate());
+//
+// String issuer_name = sigObject.getSignationIssuer();
+// // The issuer is already unicode, so it mustn't be encoded again.
+// // byte[] issuer_name =
+// // CodingHelper.encodeUTF8(sigObject.getSignationIssuer());
+// // new String(issuer_name); // this would double encode the String, not to
+// // mention the missing encoding
+// sig_prop_str = sig_prop_str.replaceFirst("X509IssuerNameReplace", issuer_name);
+//
+// sig_prop_str = sig_prop_str.replaceFirst("X509SerialNumberReplace", sigObject.getSignationSerialNumber());
+// sig_prop_str = sig_prop_str.replaceFirst("DigestValueX509CertificateReplace", sigObject.getX509CertificateDigest());
+// sig_prop_str = sig_prop_str.replaceFirst("SigIdReplace", ids[0]);
+// sig_prop_str = sig_prop_str.replaceFirst("SigDataRefReplace", ids[1]);
+//
+// ver_temp_str = ver_temp_str.replaceFirst("CertAlgReplace", cert_alg);
+// ver_temp_str = ver_temp_str.replaceFirst("TemplateQualifyingPropertiesReplace", sig_prop_str);
+// byte[] sig_prop_code = CodingHelper.buildDigest(sig_prop_str.getBytes("UTF-8"));
+//
+// String sig_prop_hash = CodingHelper.encodeBase64(sig_prop_code);
+// logger_.info("XXXXXSignedPropertiesoldbase64bku sig_prop_hash=" + sig_prop_hash);
+// // TODO hotfix
+// // if (neue_bku)
+// // {
+// // BKU Version 2.7.1 builds hash over other than previous
+// final String ETSI_SIGNED_PROPERTIES_START_TAG = "<etsi:SignedProperties"; // xml
+// // name
+// // spaces
+// // follow,
+// // so
+// // this
+// // is
+// // not
+// // a
+// // complete
+// // tag...
+// final String ETSI_SIGNED_PROPERTIES_END_TAG = "</etsi:SignedProperties>";
+//
+// final int hash_start = sig_prop_str.indexOf(ETSI_SIGNED_PROPERTIES_START_TAG);
+// assert hash_start >= 0;
+// final int hash_end = sig_prop_str.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 = sig_prop_str.substring(hash_start, hash_end);
+// logger_.info("etsi:SignedProperties string to be hashed: " + string_to_be_hashed);
+//
+// final byte[] bytes_to_be_hashed = string_to_be_hashed.getBytes("UTF-8");
+// sig_prop_code = CodingHelper.buildDigest(bytes_to_be_hashed);
+// sig_prop_hash = CodingHelper.encodeBase64(sig_prop_code);
+// logger_.info("XXXXXSignedPropertiesnewbase64bku sig_prop_hash=" + sig_prop_hash);
+// // }
+//
+// ver_temp_str = ver_temp_str.replaceFirst("DigestValueSignedPropertiesReplace", sig_prop_hash);
+// // logger_.info("DIGEST:" + sig_prop_hash);
+// if (logger_.isDebugEnabled())
+// {
+// logger_.debug("build digest from QualifyingProperties:start");
+// // logger_.debug("DATA :" + sig_prop_str);
+// logger_.debug("DIGEST:" + sig_prop_hash);
+// logger_.debug("build digest from QualifyingProperties:end");
+// }
+//
+// ver_temp_str = ver_temp_str.replaceFirst("SignatureValueReplace", sigObject.getSignationValue());
+// ver_temp_str = ver_temp_str.replaceFirst("X509CertificateReplace", x509_cert_string);
+// byte[] data_value = data; // normalizedText.getBytes("UTF-8");
+// byte[] data_value_hash = CodingHelper.buildDigest(data_value);
+// String object_data_hash = CodingHelper.encodeBase64(data_value_hash);
+// // logger_.info("XXXXXXxbase64 object_data_hash="+object_data_hash);
+// // String object_data = new String(data_value);
+// if (logger_.isDebugEnabled())
+// {
+// logger_.debug("build digest from data object:start");
+// // logger_.debug("DATA :" + normalizedText);
+// logger_.debug("DIGEST:" + object_data_hash);
+// logger_.debug("build digest from data object:end");
+// }
+//
+// // String raw_b64 = CodingHelper.encodeUTF8AsBase64(normalizedText);
+// String raw_b64 = CodingHelper.encodeBase64(data_value);
+//
+// ver_temp_str = ver_temp_str.replaceFirst("Base64ContentReplace", raw_b64);
+// ver_temp_str = ver_temp_str.replaceFirst("DigestValueSignedDataReplace", object_data_hash);
+//
+// ver_temp_str = ver_temp_str.replaceAll("SigIdReplace", ids[0]);
+// ver_temp_str = ver_temp_str.replaceAll("SigDataRefReplace", ids[1]);
+// ver_temp_str = ver_temp_str.replaceAll("SigDataObjURIReplace", ids[2]);
+// ver_temp_str = ver_temp_str.replaceAll("EtsiDataRefReplace", ids[3]);
+// ver_temp_str = ver_temp_str.replaceAll("EtsiDataObjURIReplace", ids[4]);
+// if (logger_.isDebugEnabled())
+// {
+// // logger_.debug("VERIFY REQUEST:" + ver_temp_str);
+// }
+//
+// return ver_temp_str;
+// }
+// catch (UnsupportedEncodingException e)
+// {
+// throw new SignatureException(310, e);
+// }
+// }
+//
+// /**
+// * This method parses the verify response string and return a
+// * SignatureResponse object. The SignatureResponse object is filled out by the
+// * response values from the BKU-response.
+// *
+// * @param xmlResponse
+// * the response values from the BKU-verify request
+// * @return SignatureResponse object
+// * @see SignatureResponse
+// */
+// private SignatureResponse parseVerifyXMLResponse(String xmlResponse)
+// {
+// if (logger_.isInfoEnabled())
+// {
+// logger_.info("Try parsing the verify response");
+// }
+//
+// Pattern sub_nam_p_s = Pattern.compile("<dsig:X509SubjectName>");
+// Pattern sub_nam_p_e = Pattern.compile("</dsig:X509SubjectName>");
+// Pattern iss_nam_p_s = Pattern.compile("<dsig:X509IssuerName>");
+// Pattern iss_nam_p_e = Pattern.compile("</dsig:X509IssuerName>");
+// Pattern ser_num_p_s = Pattern.compile("<dsig:X509SerialNumber>");
+// Pattern ser_num_p_e = Pattern.compile("</dsig:X509SerialNumber>");
+//
+// Pattern sig_chk_p_s = Pattern.compile("<sl:SignatureCheck>");
+// Pattern sig_chk_p_e = Pattern.compile("</sl:SignatureCheck>");
+// Pattern man_chk_p_s = Pattern.compile("<sl:SignatureManifestCheck>");
+// Pattern man_chk_p_e = Pattern.compile("</sl:SignatureManifestCheck>");
+// Pattern cer_chk_p_s = Pattern.compile("<sl:CertificateCheck>");
+// Pattern cer_chk_p_e = Pattern.compile("</sl:CertificateCheck>");
+//
+// // [tknall] start qualified certificate
+// Pattern cert_qualified_p = Pattern.compile("<sl:QualifiedCertificate/>");
+// Matcher cert_qualified_m = cert_qualified_p.matcher(xmlResponse);
+// // [tknall] stop qualified certificate
+//
+// Pattern code_p_s = Pattern.compile("<sl:Code>");
+// Pattern code_p_e = Pattern.compile("</sl:Code>");
+// Pattern info_p_s = Pattern.compile("<sl:Info>");
+// Pattern info_p_e = Pattern.compile("</sl:Info>");
+//
+// Pattern cert_p_s = Pattern.compile("<dsig:X509Certificate>");
+// Pattern cert_p_e = Pattern.compile("</dsig:X509Certificate>");
+//
+// Matcher sub_nam_m_s = sub_nam_p_s.matcher(xmlResponse);
+// Matcher sub_nam_m_e = sub_nam_p_e.matcher(xmlResponse);
+// Matcher iss_nam_m_s = iss_nam_p_s.matcher(xmlResponse);
+// Matcher iss_nam_m_e = iss_nam_p_e.matcher(xmlResponse);
+// Matcher ser_num_m_s = ser_num_p_s.matcher(xmlResponse);
+// Matcher ser_num_m_e = ser_num_p_e.matcher(xmlResponse);
+//
+// Matcher sig_chk_m_s = sig_chk_p_s.matcher(xmlResponse);
+// Matcher sig_chk_m_e = sig_chk_p_e.matcher(xmlResponse);
+// Matcher man_chk_m_s = man_chk_p_s.matcher(xmlResponse);
+// Matcher man_chk_m_e = man_chk_p_e.matcher(xmlResponse);
+// Matcher cer_chk_m_s = cer_chk_p_s.matcher(xmlResponse);
+// Matcher cer_chk_m_e = cer_chk_p_e.matcher(xmlResponse);
+//
+// Matcher cert_m_s = cert_p_s.matcher(xmlResponse);
+// Matcher cert_m_e = cert_p_e.matcher(xmlResponse);
+//
+// SignatureResponse sig_res = new SignatureResponse();
+//
+// // [tknall] start qualified certificate
+// sig_res.setQualifiedCertificate(cert_qualified_m.find());
+// // [tknall] stop qualified certificate
+//
+// if (sub_nam_m_s.find() && sub_nam_m_e.find())
+// {
+// String sub_nam = xmlResponse.substring(sub_nam_m_s.end(), sub_nam_m_e.start());
+// sig_res.setX509SubjectName(sub_nam);
+// }
+// if (iss_nam_m_s.find() && iss_nam_m_e.find())
+// {
+// String iss_nam = xmlResponse.substring(iss_nam_m_s.end(), iss_nam_m_e.start());
+// sig_res.setX509IssuerName(iss_nam);
+// }
+// if (ser_num_m_s.find() && ser_num_m_e.find())
+// {
+// String ser_num = xmlResponse.substring(ser_num_m_s.end(), ser_num_m_e.start());
+// sig_res.setX509SerialNumber(ser_num);
+// }
+// if (sig_chk_m_s.find() && sig_chk_m_e.find())
+// {
+// String sig_chk = xmlResponse.substring(sig_chk_m_s.end(), sig_chk_m_e.start());
+// Matcher code_m_s = code_p_s.matcher(sig_chk);
+// Matcher code_m_e = code_p_e.matcher(sig_chk);
+// Matcher info_m_s = info_p_s.matcher(sig_chk);
+// Matcher info_m_e = info_p_e.matcher(sig_chk);
+// if (code_m_s.find() && code_m_e.find())
+// {
+// String code = sig_chk.substring(code_m_s.end(), code_m_e.start());
+// sig_res.setSignatureCheckCode(code);
+// }
+// if (info_m_s.find() && info_m_e.find())
+// {
+// String info = sig_chk.substring(info_m_s.end(), info_m_e.start());
+// sig_res.setSignatureCheckInfo(info);
+// }
+// }
+// if (man_chk_m_s.find() && man_chk_m_e.find())
+// {
+// String man_chk = xmlResponse.substring(man_chk_m_s.end(), man_chk_m_e.start());
+// Matcher code_m_s = code_p_s.matcher(man_chk);
+// Matcher code_m_e = code_p_e.matcher(man_chk);
+// Matcher info_m_s = info_p_s.matcher(man_chk);
+// Matcher info_m_e = info_p_e.matcher(man_chk);
+// if (code_m_s.find() && code_m_e.find())
+// {
+// String code = man_chk.substring(code_m_s.end(), code_m_e.start());
+// sig_res.setSignatureManifestCheckCode(code);
+// }
+// if (info_m_s.find() && info_m_e.find())
+// {
+// String info = man_chk.substring(info_m_s.end(), info_m_e.start());
+// sig_res.setSignatureManifestCheckInfo(info);
+// }
+// }
+// if (cer_chk_m_s.find() && cer_chk_m_e.find())
+// {
+// String cer_chk = xmlResponse.substring(cer_chk_m_s.end(), cer_chk_m_e.start());
+// Matcher code_m_s = code_p_s.matcher(cer_chk);
+// Matcher code_m_e = code_p_e.matcher(cer_chk);
+// Matcher info_m_s = info_p_s.matcher(cer_chk);
+// Matcher info_m_e = info_p_e.matcher(cer_chk);
+// if (code_m_s.find() && code_m_e.find())
+// {
+// String code = cer_chk.substring(code_m_s.end(), code_m_e.start());
+// sig_res.setCertificateCheckCode(code);
+// }
+// if (info_m_s.find() && info_m_e.find())
+// {
+// String info = cer_chk.substring(info_m_s.end(), info_m_e.start());
+// sig_res.setCertificateCheckInfo(info);
+// }
+// }
+// if (cert_m_s.find() && cert_m_e.find())
+// {
+// String cert_string = xmlResponse.substring(cert_m_s.end(), cert_m_e.start());
+//
+// X509Cert resp_cert = X509Cert.initByString(cert_string);
+// sig_res.setCertificate(resp_cert);
+// }
+//
+// return sig_res;
+// }
+//
+// public String prepareSignRequestDetached(String signType, String sigmode) throws SignatureException
+// {
+// logger_.info("Call " + getType() + " connector sigmode=" + sigmode);
+//
+// String keybox_identifier = getSignKeyboxIdentifier(signType);
+// String sign_request_filename = getSignRequestTemplateFileName(signType, sigmode);
+// String sign_req_str = FileHelper.readFromFile(SettingsReader.relocateFile(sign_request_filename));
+//
+// if (sign_req_str == null)
+// {
+// throw new SignatureException(300, "Can not read the create xml request template");
+// }
+// sign_req_str = sign_req_str.replaceFirst("KeyboxIdentifierReplace", keybox_identifier);
+// return sign_req_str;
+// }
+//
+// // decides if moasigned or BKU
+// public String prepareVerifyRequestDetached(byte[] data,
+// SignatureObject sigObject) throws SignatureException
+// {
+// // get templates
+// String verify_request = "./templates/BKUVerifyRequestDetached.xml"; //getVerifyRequestTemplateFileName(sigObject.getSignationType());
+// String verify_req_str = FileHelper.readFromFile(SettingsReader.relocateFile(verify_request));
+// logger_.info("prepareVerifyRequest TemplateFile=" + verify_request);
+//
+// String verify_template_str = 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
+// verify_template_str = getVerifyTemplate(data, sigObject);
+//// }
+//
+// verify_req_str = verify_req_str.replaceFirst("XMLContentReplace", verify_template_str);
+// if (logger_.isDebugEnabled())
+// {
+// logger_.debug("verify_req_str.xml : " + verify_req_str);
+// }
+//
+// return verify_req_str;
+// }
+//
+// /**
+// * Sends the request to the given URL.
+// *
+// * @param url
+// * The URL.
+// * @param request_string
+// * The request string.
+// * @return Returns the response string.
+// * @throws SignatureException
+// * F.e.
+// */
+// protected Properties sendRequest(String url, String request_string) throws SignatureException
+// {
+// try
+// {
+// Properties response_properties = BKUPostConnection.doPostRequest(url, request_string);
+// return response_properties;
+// }
+// catch (Exception e)
+// {
+// SignatureException se = new SignatureException(320, e);
+// throw se;
+// }
+// }
+//
+// /**
+// *
+// * @param url
+// * The URL.
+// * @param request_string
+// * The request string.
+// * @return Returns the response string.
+// * @throws SignatureException
+// * F.e.
+// */
+// protected Properties sendRequest(String url, String request_string,
+// byte[] signdata, String mimetype) throws SignatureException
+// {
+// try
+// {
+// // Properties response_properties =
+// // BKUPostConnection.doPostRequest272(url, request_string, signdata,
+// // mimetype);
+// Properties response_properties = BKUPostConnection.doPostRequest272(url, request_string, signdata, mimetype);
+// return response_properties;
+// }
+// catch (Exception e)
+// {
+// SignatureException se = new SignatureException(320, e);
+// throw se;
+// }
+// }
+//
+// public SignatureObject analyzeSignResponse(Properties response_properties,
+// String sigType) throws SignatureException
+// {
+// // String sign_request_filename = getSignRequestTemplateFileName(sigType);
+//
+// // TODO hotfix
+// String response_string = response_properties.getProperty("response_string");
+//
+// // TODO debug
+// try
+// {
+// FileOutputStream fos = new FileOutputStream("C:\\wprinz\\Filer\\egiz2\\sign_response.utf8.xml");
+// OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
+// osw.write(response_string);
+// osw.close();
+// }
+// catch (Exception e)
+// {
+// logger_.error(e);
+// }
+//
+// SignatureObject sig_obj = new SignatureObject();
+// sig_obj.setRawSignatureResponse(response_string);
+// try
+// {
+// sig_obj.setSigType(sigType);
+// sig_obj.initByType();
+// }
+// catch (SignatureTypesException e)
+// {
+// SignatureException se = new SignatureException(300, "Cannot init signature object with type:" + sigType, e);
+// throw se;
+// }
+// if (logger_.isDebugEnabled())
+// {
+// logger_.debug("Signature Type is:" + sig_obj.getSignationType());
+// }
+//
+// if (!response_string.equals(""))
+// {
+// Pattern erc_p_s = Pattern.compile("<[\\w]*:?ErrorCode>");
+// Pattern erc_p_e = Pattern.compile("</[\\w]*:?ErrorCode>");
+// Matcher erc_m_s = erc_p_s.matcher(response_string);
+// Matcher erc_m_e = erc_p_e.matcher(response_string);
+// // System.err.println(response_string);
+//
+// if (erc_m_s.find() && erc_m_e.find())
+// {
+// if (logger_.isEnabledFor(Level.ERROR))
+// {
+// // logger_.debug(sign_request_filename + "_response.xml : " +
+// // response_string);
+// logger_.error("BKU Error response: " + response_string);
+// }
+// Pattern erm_p_s = Pattern.compile("<[\\w]*:?Info>");
+// Pattern erm_p_e = Pattern.compile("</[\\w]*:?Info>");
+// Matcher erm_m_s = erm_p_s.matcher(response_string);
+// Matcher erm_m_e = erm_p_e.matcher(response_string);
+// SignatureException se = new SignatureException(0, "BKUSigExc");
+// String error_code = response_string.substring(erc_m_s.end(), erc_m_e.start());
+// se.setExternalErrorCode(error_code);
+// if (erm_m_s.find() && erm_m_e.find())
+// {
+// String error_mess = response_string.substring(erm_m_s.end(), erm_m_e.start());
+// se.setExternalErrorMessage(error_mess);
+// }
+// throw se;
+// }
+// else
+// {
+// if (logger_.isDebugEnabled())
+// {
+// logger_.debug("signature_response_string: " + response_string);
+// }
+// parseCreateXMLResponse(response_properties, sig_obj);
+// }
+// }
+// sig_obj.setSigResponse(response_string);
+// return sig_obj;
+// }
+//
+// public SignatureResponse analyzeVerifyResponse(Properties response_properties) throws SignatureException
+// {
+// String response_string = response_properties.getProperty("response_string");
+//
+// if (!response_string.equals(""))
+// {
+// Pattern erc_p_s = Pattern.compile("<[\\w]*:?ErrorCode>");
+// Pattern erc_p_e = Pattern.compile("</[\\w]*:?ErrorCode>");
+// Matcher erc_m_s = erc_p_s.matcher(response_string);
+// Matcher erc_m_e = erc_p_e.matcher(response_string);
+//
+// if (erc_m_s.find() && erc_m_e.find())
+// {
+// if (logger_.isEnabledFor(Level.ERROR))
+// {
+// // logger_.debug(getType() + "_response.xml : " + response_string);
+// logger_.error(getType() + "_response.xml : " + response_string);
+// }
+// Pattern erm_p_s = Pattern.compile("<[\\w]*:?Info>");
+// Pattern erm_p_e = Pattern.compile("</[\\w]*:?Info>");
+// Matcher erm_m_s = erm_p_s.matcher(response_string);
+// Matcher erm_m_e = erm_p_e.matcher(response_string);
+// SignatureException se = new SignatureException(0, "BKUSigExc");
+// if (erc_m_s.find() && erc_m_e.find())
+// {
+// String error_code = response_string.substring(erc_m_s.end(), erc_m_e.start());
+// se.setExternalErrorCode(error_code);
+// }
+// if (erm_m_s.find() && erm_m_e.find())
+// {
+// String error_mess = response_string.substring(erm_m_s.end(), erm_m_e.start());
+// se.setExternalErrorMessage(error_mess);
+// }
+// throw se;
+// }
+// else
+// {
+// if (logger_.isDebugEnabled())
+// {
+// // logger_.debug(getType() + "_response.xml : " + response_string);
+// }
+// return parseVerifyXMLResponse(response_string);
+// }
+// }
+// return null;
+// }
+//
+// protected String getConnectorValueFromProfile(String profile, String key)
+// {
+// String value = settings_.getValueFromKey("sig_obj." + profile + "." + key);
+// if (value == null)
+// {
+// value = settings_.getValueFromKey(key);
+// }
+// return value;
+// }
+//
+// public String getSignURL(String profile)
+// {
+// final String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_SIGN + ".url";
+// return getConnectorValueFromProfile(profile, key);
+// }
+//
+// protected String getSignRequestTemplateFileName(String profile, String sigmode)
+// {
+// String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_SIGN + ".request" + "." + sigmode;
+// logger_.info("getSignRequestTemplateFileName: profile=" + profile + "" + " key=" + key);
+// String filename = getConnectorValueFromProfile(profile, key);
+// logger_.info("getSignRequestTemplateFileName filename=" + filename);
+// return filename;// getConnectorValueFromProfile(profile, key);
+// }
+//
+// protected String getSignKeyboxIdentifier(String profile)
+// {
+// String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_SIGN + ".KeyboxIdentifier";
+// return getConnectorValueFromProfile(profile, key);
+// }
+//
+// public String getVerifyURL(String profile)
+// {
+// String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_VERIFY + ".url";
+// return getConnectorValueFromProfile(profile, key);
+// }
+//
+// protected String getVerifyRequestTemplateFileName(String profile)
+// {
+// String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_VERIFY + ".request";
+// return getConnectorValueFromProfile(profile, key);
+// }
+//
+// protected String getVerifyTemplateFileName(String profile)
+// {
+// String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_VERIFY + ".template";
+// return getConnectorValueFromProfile(profile, key);
+// }
+//
+// protected String getSigPropFileName(String profile, String sigmode)
+// {
+// String key = getType() + "." + ConnectorConfigurationKeys.VALUE_MODE_VERIFY + ".template.SP." + sigmode;
+// logger_.info("getSigPropFileName: profile=" + profile + "" + " key=" + key);
+// String filename = getConnectorValueFromProfile(profile, key);
+// logger_.info("getSigPropFileName filename=" + filename);
+// return getConnectorValueFromProfile(profile, key);
+// }
+//
+// /**
+// * Returns the type of this BKU-like connector.
+// *
+// * <p>
+// * All settings keys will be prefixed by this type. So to reuse the BKU
+// * connector, a deriving class has to implement this method specifying an own
+// * type.
+// * </p>
+// *
+// * @return Returns the type of this BKU-like connector.
+// */
+// protected String getType()
+// {
+// return CONNECTOR_INFORMATION.getIdentifier();
+// }
} \ No newline at end of file