From a0de2a3b2a5f4a99f280f5caebbca0d183ae109a Mon Sep 17 00:00:00 2001 From: tknall Date: Wed, 7 Feb 2007 10:08:21 +0000 Subject: Bugfix: Querformat, BKU 2.7.x, ... git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@35 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c --- .../wag/egov/egiz/sig/connectors/BKUConnector.java | 89 +++++++++++++++++----- .../egiz/sig/connectors/BKUPostConnection.java | 54 ++++++++++++- 2 files changed, 123 insertions(+), 20 deletions(-) (limited to 'src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors') diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java index 3b672f1..6327a11 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java @@ -18,6 +18,7 @@ package at.knowcenter.wag.egov.egiz.sig.connectors; import java.io.UnsupportedEncodingException; +import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -116,9 +117,9 @@ public class BKUConnector implements LocalConnector String request_string = prepareSignRequest(userName, signText, sigType); String sign_url = getSignURL(sigType); - String response_string = sendRequest(sign_url, request_string); + Properties response_properties = sendRequest(sign_url, request_string); - return analyzeSignResponse(response_string, sigType); + return analyzeSignResponse(response_properties, sigType); } /** @@ -140,9 +141,9 @@ public class BKUConnector implements LocalConnector String request_string = prepareVerifyRequest(normalizedText, sigObject); String verify_url = getVerifyURL(sigObject.getSignationType()); - String response_string = sendRequest(verify_url, request_string); + Properties response_properties = sendRequest(verify_url, request_string); - return analyzeVerifyResponse(response_string); + return analyzeVerifyResponse(response_properties); } /** @@ -162,8 +163,10 @@ public class BKUConnector implements LocalConnector * @see CodingHelper * @see X509Cert */ - private void parseCreateXMLResponse(String xmlResponse, SignatureObject sigObj) throws SignatureException + 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(""); Pattern iss_nam_p_s = Pattern.compile("<[\\w]*:?X509IssuerName>"); @@ -266,7 +269,11 @@ public class BKUConnector implements LocalConnector ids[2] = extractId(xmlResponse, "signed-data-object-"); ids[3] = extractId(xmlResponse, "etsi-data-reference-"); ids[4] = extractId(xmlResponse, "etsi-data-object-"); - sigObj.setSignationIDs(ids); + + //TODO hotfix + String final_ids =SignatureObject.formatSigIds(response_properties, ids); + //sigObj.setSignationIDs(ids); + sigObj.setSignationIDs(final_ids); } /** @@ -283,6 +290,13 @@ public class BKUConnector implements LocalConnector String id = null; int start_idx = text.indexOf(name) + name.length(); int end_idx = text.indexOf("\"", start_idx); + + // TODO hotfix! + 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); + // TODO hotfix end! + id = text.substring(start_idx, end_idx); if (logger_.isDebugEnabled()) { @@ -324,6 +338,21 @@ public class BKUConnector implements LocalConnector String verify_template = getVerifyTemplateFileName(sigObject.getSignationType()); String sig_prop_filename = getSigPropFileName(sigObject.getSignationType()); + String ids_string = sigObject.getSignationIds(); + logger_.debug("ids_string = " + ids_string); + String[] ids = SignatureObject.parseSigIds(ids_string); + + // TODO hotfix + final boolean neue_bku = ids[5] != null; + logger_.debug("ids[5] = " + ids[5]); + logger_.debug("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()) @@ -345,8 +374,7 @@ public class BKUConnector implements LocalConnector cert_alg = settings_.getValueFromKey("cert.alg.rsa"); } - String[] ids = sigObject.getSignationIds(); - sig_prop_str = sig_prop_str.replaceFirst("SigningTimeReplace", sigObject.getSignationDate()); + 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. @@ -362,6 +390,26 @@ public class BKUConnector implements LocalConnector 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")); + + // TODO hotfix + if (neue_bku) + { + final String ETSI_SIGNED_PROPERTIES_START_TAG = "= 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_.debug("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); + } + String sig_prop_hash = CodingHelper.encodeBase64(sig_prop_code); ver_temp_str = ver_temp_str.replaceFirst("DigestValueSignedPropertiesReplace", sig_prop_hash); if (logger_.isDebugEnabled()) @@ -445,7 +493,7 @@ public class BKUConnector implements LocalConnector Pattern cert_qualified_p = Pattern.compile(""); Matcher cert_qualified_m = cert_qualified_p.matcher(xmlResponse); // [tknall] stop qualified certificate - + Pattern code_p_s = Pattern.compile(""); Pattern code_p_e = Pattern.compile(""); Pattern info_p_s = Pattern.compile(""); @@ -472,7 +520,7 @@ public class BKUConnector implements LocalConnector 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 @@ -613,7 +661,7 @@ public class BKUConnector implements LocalConnector verify_req_str = verify_req_str.replaceFirst("XMLContentReplace", verify_template_str); if (logger_.isDebugEnabled()) { - //logger_.debug(verify_request + "_request.xml : " + verify_req_str); + logger_.debug("verify_req_str.xml : " + verify_req_str); } return verify_req_str; @@ -630,12 +678,12 @@ public class BKUConnector implements LocalConnector * @throws SignatureException * F.e. */ - protected String sendRequest(String url, String request_string) throws SignatureException + protected Properties sendRequest(String url, String request_string) throws SignatureException { try { - String response_string = BKUPostConnection.doPostRequest(url, request_string); - return response_string; + Properties response_properties = BKUPostConnection.doPostRequest(url, request_string); + return response_properties; } catch (Exception e) { @@ -644,11 +692,14 @@ public class BKUConnector implements LocalConnector } } - public SignatureObject analyzeSignResponse(String response_string, + 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"); + SignatureObject sig_obj = new SignatureObject(); sig_obj.setRawSignatureResponse(response_string); try @@ -699,17 +750,19 @@ public class BKUConnector implements LocalConnector { if (logger_.isDebugEnabled()) { - //logger_.debug(sign_request_filename + "_response.xml : " + response_string); + logger_.debug("signature_response_string: " + response_string); } - parseCreateXMLResponse(response_string, sig_obj); + parseCreateXMLResponse(response_properties, sig_obj); } } sig_obj.setSigResponse(response_string); return sig_obj; } - public SignatureResponse analyzeVerifyResponse(String response_string) throws SignatureException + 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>"); diff --git a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUPostConnection.java b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUPostConnection.java index 773b248..1ddef5f 100644 --- a/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUPostConnection.java +++ b/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUPostConnection.java @@ -18,7 +18,11 @@ package at.knowcenter.wag.egov.egiz.sig.connectors; import java.io.IOException; +import java.util.Properties; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.NameValuePair; @@ -52,7 +56,7 @@ public abstract class BKUPostConnection * @throws HttpException * ErrorCode:320 */ - public static String doPostRequest(String url, String request) throws HttpException, IOException + public static Properties doPostRequest(String url, String request) throws HttpException, IOException { PostMethod post_method = new PostMethod(url); @@ -81,6 +85,23 @@ public abstract class BKUPostConnection int method_response = http_client.executeMethod(post_method); logger_.debug("method_response = " + method_response); + Properties response_properties = new Properties(); + + if (logger_.isDebugEnabled()) + { + Header[] response_headers = post_method.getResponseHeaders(); + logger_.debug("#" + response_headers.length + " headers in response:"); + for (int i = 0; i < response_headers.length; i++) + { + logger_.debug(" response_header[" + i + "]: name = " + response_headers[i].getName() + ", value = " + response_headers[i].getValue()); + } + } + + Header server_header = post_method.getResponseHeader("Server"); + logger_.debug("server_header: name = " + server_header.getName() + ", value = " + server_header.getValue()); + parseBKUVersion(server_header.getValue(), response_properties); + + byte[] response_body = post_method.getResponseBody(); String response_string = new String(response_body, "UTF-8"); @@ -89,7 +110,36 @@ public abstract class BKUPostConnection // response. // String response_string = post.getResponseBodyAsString(); - return response_string; + response_properties.setProperty("response_string", response_string); + + return response_properties; } + // TODO hotfix + public static void parseBKUVersion(String header_value, Properties properties) + { + Pattern pattern = Pattern.compile("^citizen-card-environment/(\\d+\\.\\d+) (.+)/(\\d+\\.\\d+\\.\\d+)$"); + Matcher m = pattern.matcher(header_value); + + m.matches(); + + logger_.debug("group count = " + m.groupCount()); + + for (int i = 0; i <= m.groupCount(); i++) + { + logger_.debug(" group[" + i + "] = " + m.group(i)); + } + + final String cceVersion = m.group(1); + final String productName = m.group(2); + final String productVersion = m.group(3); + + logger_.debug("cceVersion = " + cceVersion); + logger_.debug("productName = " + productName); + logger_.debug("productVersion = " + productVersion); + + properties.setProperty("cceVersion", cceVersion); + properties.setProperty("productName", productName); + properties.setProperty("productVersion", productVersion); + } } -- cgit v1.2.3