From cabc42be1db17af1f7931544f50e0019959da49b Mon Sep 17 00:00:00 2001
From: tkellner <tkellner@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4>
Date: Thu, 28 Nov 2013 13:23:28 +0000
Subject: Extend SignRequest to allow non-XML-Signatures

git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@1235 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4
---
 .../src/main/java/at/gv/egiz/stal/SignRequest.java | 20 ++++++++++++++++++
 .../gv/egiz/bku/smccstal/SignRequestHandler.java   | 24 +++++++++++++++++++---
 2 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/STAL/src/main/java/at/gv/egiz/stal/SignRequest.java b/STAL/src/main/java/at/gv/egiz/stal/SignRequest.java
index 88b45b19..a649d3ba 100644
--- a/STAL/src/main/java/at/gv/egiz/stal/SignRequest.java
+++ b/STAL/src/main/java/at/gv/egiz/stal/SignRequest.java
@@ -65,6 +65,10 @@ public class SignRequest
     protected byte[] signedInfo;
     @XmlTransient
     protected List<HashDataInput> hashData;
+    @XmlTransient
+    protected boolean signedInfoIsRawData = false;
+    @XmlTransient
+    protected String signatureMethod;
 
     /**
      * Gets the value of the keyIdentifier property.
@@ -119,4 +123,20 @@ public class SignRequest
     public void setHashDataInput(List<HashDataInput> hashData) {
         this.hashData = hashData;
     }
+
+    public boolean getSignedInfoIsRawData() {
+      return signedInfoIsRawData;
+    }
+
+    public void setSignedInfoIsRawData(boolean signedInfoIsRawData) {
+      this.signedInfoIsRawData = signedInfoIsRawData;
+    }
+
+    public String getSignatureMethod() {
+      return signatureMethod;
+    }
+
+    public void setSignatureMethod(String signatureMethod) {
+      this.signatureMethod = signatureMethod;
+    }
 }
diff --git a/smccSTAL/src/main/java/at/gv/egiz/bku/smccstal/SignRequestHandler.java b/smccSTAL/src/main/java/at/gv/egiz/bku/smccstal/SignRequestHandler.java
index 41ef90a5..10b2e191 100644
--- a/smccSTAL/src/main/java/at/gv/egiz/bku/smccstal/SignRequestHandler.java
+++ b/smccSTAL/src/main/java/at/gv/egiz/bku/smccstal/SignRequestHandler.java
@@ -50,7 +50,9 @@ import at.gv.egiz.stal.STALRequest;
 import at.gv.egiz.stal.STALResponse;
 import at.gv.egiz.stal.SignRequest;
 import at.gv.egiz.stal.SignResponse;
+import at.gv.egiz.stal.signedinfo.CanonicalizationMethodType;
 import at.gv.egiz.stal.signedinfo.ObjectFactory;
+import at.gv.egiz.stal.signedinfo.SignatureMethodType;
 import at.gv.egiz.stal.signedinfo.SignedInfoType;
 
 public class SignRequestHandler extends AbstractRequestHandler {
@@ -89,13 +91,29 @@ public class SignRequestHandler extends AbstractRequestHandler {
             try {
                 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
                 InputStream is = new ByteArrayInputStream(signReq.getSignedInfo());
-                JAXBElement<SignedInfoType> si = (JAXBElement<SignedInfoType>) unmarshaller.unmarshal(is);
-                String signatureMethod = si.getValue().getSignatureMethod().getAlgorithm();
+
+                SignedInfoType signedInfo;
+                if (signReq.getSignedInfoIsRawData()) {
+                  signedInfo = new SignedInfoType();
+                  CanonicalizationMethodType canonicalizationMethod =
+                      new CanonicalizationMethodType();
+                  canonicalizationMethod.setAlgorithm("");
+                  SignatureMethodType signatureMethod = new SignatureMethodType();
+                  signatureMethod.setAlgorithm(signReq.getSignatureMethod());
+                  signedInfo.setCanonicalizationMethod(canonicalizationMethod);
+                  signedInfo.setSignatureMethod(signatureMethod);
+                  signedInfo.setId("");
+                } else {
+                  JAXBElement<SignedInfoType> si =
+                      (JAXBElement<SignedInfoType>) unmarshaller.unmarshal(is);
+                  signedInfo = si.getValue();
+                }
+                String signatureMethod = signedInfo.getSignatureMethod().getAlgorithm();
                 log.debug("Found signature method: {}.", signatureMethod);
                 KeyboxName kb = SignatureCard.KeyboxName.getKeyboxName(signReq.getKeyIdentifier());
 
                 byte[] resp = card.createSignature(new ByteArrayInputStream(signReq.getSignedInfo()), kb,
-                        new SignPINGUI(gui, secureViewer, si.getValue()), signatureMethod);
+                        new SignPINGUI(gui, secureViewer, signedInfo), signatureMethod);
                 if (resp == null) {
                     return errorResponse(6001, "Response is null", null);
                 }
-- 
cgit v1.2.3