diff options
author | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2016-06-20 12:45:07 +0200 |
---|---|---|
committer | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2016-06-20 12:45:07 +0200 |
commit | 53ae98cdfa510650c1e015efd0d11a96ad4dc87a (patch) | |
tree | 8e7ab77a9208b541416d14bbdb15e7211ff40c5b /moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service | |
parent | acf1b849ab835bc6797adfb91f8ab4fa88f0aff5 (diff) | |
download | moa-sig-53ae98cdfa510650c1e015efd0d11a96ad4dc87a.tar.gz moa-sig-53ae98cdfa510650c1e015efd0d11a96ad4dc87a.tar.bz2 moa-sig-53ae98cdfa510650c1e015efd0d11a96ad4dc87a.zip |
ASiC Library added
Diffstat (limited to 'moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service')
-rw-r--r-- | moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java index 8278399..e4d93a7 100644 --- a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/service/SignatureVerificationService.java @@ -24,6 +24,15 @@ package at.gv.egovernment.moa.spss.server.service; +import at.gv.egiz.asic.api.ASiC; +import at.gv.egiz.asic.api.ASiCFactory; +import at.gv.egiz.asic.api.ASiCFormat; +import at.gv.egiz.asic.api.ASiCVerificationResult; +import at.gv.egiz.asic.impl.ASiCMOAVerifier; +import at.gv.egiz.asic.xmlbind.VerifyASICSignatureRequestParser; +import at.gv.egiz.asic.xmlbind.VerifyASICSignatureResponseBuilder; +import at.gv.egiz.asic.xmlbind.VerifyASiCRequest; +import at.gv.egovernment.moa.spss.MOAApplicationException; import org.apache.axis.AxisFault; import org.w3c.dom.Element; @@ -45,6 +54,9 @@ import at.gv.egovernment.moa.spss.server.transaction.TransactionContextManager; import at.gv.egovernment.moaspss.logging.Logger; import at.gv.egovernment.moaspss.util.StreamUtils; +import java.io.FileInputStream; +import java.util.List; + /** * The service endpoint for the <code>SignatureVerification</code> web service. * @@ -122,6 +134,80 @@ public class SignatureVerificationService { return response; } + + + /** + * Handle a <code>VerifyPDFSignatureRequest</code>. + * + * @param request The <code>VerifyPDFSignatureRequest</code> to work on + * (contained in the 0th element of the array). + * @return A <code>VerifyPDFSignatureResponse</code> as the only element of + * the <code>Element</code> array. + * @throws AxisFault An error occurred during handling of the message. + */ + public Element[] VerifyASICSignatureRequest(Element[] request) + throws AxisFault { + CMSSignatureVerificationInvoker invoker = + CMSSignatureVerificationInvoker.getInstance(); + Element[] response = new Element[1]; + + try { + + // create a parser and builder for binding API objects to/from XML + VerifyASICSignatureRequestParser requestParser = + new VerifyASICSignatureRequestParser(); + VerifyASICSignatureResponseBuilder responseBuilder = + new VerifyASICSignatureResponseBuilder(); + Element reparsedReq; + VerifyASiCRequest requestObj; + VerifyCMSSignatureResponse responseObj; + // create a parser and builder for binding API objects to/from XML + + //since Axis (1.1 ff) has problem with namespaces we take the raw request stored by the Axishandler. + TransactionContext context = TransactionContextManager.getInstance().getTransactionContext(); + // validate the request + reparsedReq = ServiceUtils.reparseRequest(request[0]);//context.getRequest()); + + // convert to API objects + requestObj = requestParser.parseASIC(reparsedReq); + + if(requestObj.getFormat() == null) { + throw new MOAApplicationException("asic.0006", null); + } + + ASiC aSiC = ASiCFactory.parseASiC(requestObj.getAsicInput(), + requestObj.getFormat()); + + Logger.debug("Got ASiC " + aSiC); + + // invoke the core logic + ASiCMOAVerifier v = new ASiCMOAVerifier(); + List<ASiCVerificationResult> results = v.verify(aSiC, + requestObj.getTrustProfile(), requestObj.getDate()); + + // map back to XML + response[0] = responseBuilder.build(results).getDocumentElement(); + + // save response in transaction + context.setResponse(response[0]); + + } catch (MOAException e) { + AxisFault fault = AxisFault.makeFault(e); + fault.setFaultDetail(new Element[] { e.toErrorResponse()}); + Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:" + + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); + throw fault; + } catch (Throwable t) { + MOASystemException e = new MOASystemException("2900", null, t); + AxisFault fault = AxisFault.makeFault(e); + fault.setFaultDetail(new Element[] { e.toErrorResponse()}); + Logger.debug("Anfrage zur Signaturpruefung wurde nicht erfolgreich beendet:" + + System.getProperty("line.separator") + StreamUtils.getStackTraceAsString(e)); + throw fault; + } + + return response; + } /** * Handle a <code>VerifyCMSSignatureRequest</code>. |