aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java
diff options
context:
space:
mode:
authortknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2007-02-07 10:08:21 +0000
committertknall <tknall@7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c>2007-02-07 10:08:21 +0000
commita0de2a3b2a5f4a99f280f5caebbca0d183ae109a (patch)
tree7479e30c10c3994cba18c6bf8784f61748bb6cd3 /src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java
parent8f7cebd9c2c5c0f6e33863ba57ad1c215f35605c (diff)
downloadpdf-as-3-a0de2a3b2a5f4a99f280f5caebbca0d183ae109a.tar.gz
pdf-as-3-a0de2a3b2a5f4a99f280f5caebbca0d183ae109a.tar.bz2
pdf-as-3-a0de2a3b2a5f4a99f280f5caebbca0d183ae109a.zip
Bugfix: Querformat, BKU 2.7.x, ...
git-svn-id: https://joinup.ec.europa.eu/svn/pdf-as/trunk@35 7b5415b0-85f9-ee4d-85bd-d5d0c3b42d1c
Diffstat (limited to 'src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java')
-rw-r--r--src/main/java/at/knowcenter/wag/egov/egiz/sig/connectors/BKUConnector.java89
1 files changed, 71 insertions, 18 deletions
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("</[\\w]*:?SignatureValue>");
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 = "<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_.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("<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>");
@@ -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>");