From cabc42be1db17af1f7931544f50e0019959da49b Mon Sep 17 00:00:00 2001 From: tkellner 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 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 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 si = (JAXBElement) 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 si = + (JAXBElement) 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