diff options
Diffstat (limited to 'moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/XMLVerifySignatureBindingImpl.java')
-rw-r--r-- | moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/XMLVerifySignatureBindingImpl.java | 524 |
1 files changed, 0 insertions, 524 deletions
diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/XMLVerifySignatureBindingImpl.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/XMLVerifySignatureBindingImpl.java deleted file mode 100644 index dcc92f9..0000000 --- a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/webservice/binding/XMLVerifySignatureBindingImpl.java +++ /dev/null @@ -1,524 +0,0 @@ -package at.gv.egovernment.moa.spss.server.webservice.binding; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.math.BigInteger; -import java.security.cert.CertificateEncodingException; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import javax.security.auth.login.FailedLoginException; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.dom.DOMResult; - -import org.apache.commons.io.IOUtils; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import at.gv.egiz.moasig.MoaTransformsType; -import at.gv.egiz.moasig.NamespaceDeclarationType; -import at.gv.egiz.moasig.PublicAuthorityType; -import at.gv.egiz.moasig.QualifiedCertificate; -import at.gv.egiz.moasig.SecureSignatureCreationDevice; -import at.gv.egiz.moasig.TransformParameterType; -import at.gv.egiz.moasig.TransformParameterType.Hash; -import at.gv.egiz.moasig.VerifyXMLSignatureResponseType; -import at.gv.egiz.moasig.XMLDataObjectAssociationType; -import at.gv.egiz.moasig.XMLSignatureLocationType; -import at.gv.egovernment.moa.spss.MOAApplicationException; -import at.gv.egovernment.moa.spss.api.SPSSFactory; -import at.gv.egovernment.moa.spss.api.common.Content; -import at.gv.egovernment.moa.spss.api.common.ContentBinary; -import at.gv.egovernment.moa.spss.api.common.ContentXML; -import at.gv.egovernment.moa.spss.api.common.InputData; -import at.gv.egovernment.moa.spss.api.common.XMLDataObjectAssociation; -import at.gv.egovernment.moa.spss.api.xmlverify.AdESFormResults; -import at.gv.egovernment.moa.spss.api.xmlverify.ReferenceInfo; -import at.gv.egovernment.moa.spss.api.xmlverify.SignatureManifestCheckParams; -import at.gv.egovernment.moa.spss.api.xmlverify.SupplementProfile; -import at.gv.egovernment.moa.spss.api.xmlverify.TransformParameter; -import at.gv.egovernment.moa.spss.api.xmlverify.VerifySignatureInfo; -import at.gv.egovernment.moa.spss.api.xmlverify.VerifySignatureLocation; -import at.gv.egovernment.moa.spss.api.xmlverify.VerifyTransformsInfoProfile; -import at.gv.egovernment.moa.spss.api.xmlverify.VerifyXMLSignatureRequest; -import at.gv.egovernment.moa.spss.api.xmlverify.VerifyXMLSignatureResponse; -import at.gv.egovernment.moa.spss.server.webservice.XMLVerifySignatureBinding; -import at.gv.egovernment.moaspss.util.DOMUtils; -import iaik.utils.RFC2253NameParser; -import iaik.utils.RFC2253NameParserException; - -public class XMLVerifySignatureBindingImpl implements XMLVerifySignatureBinding { - - /** The <code>SPSSFactory</code> for creating new API objects. */ - private SPSSFactory factory = SPSSFactory.getInstance(); - - private TransformerUtils transformerUtils = new TransformerUtils(); - - private TransformParser transformParser = new TransformParser(); - - @Override - public VerifyXMLSignatureRequest buildXMLRequest( - at.gv.egiz.moasig.VerifyXMLSignatureRequest verifyXMLSignatureRequest) throws MOAApplicationException { - Date dateTime = null; - if (verifyXMLSignatureRequest.getDateTime() != null) { - dateTime = verifyXMLSignatureRequest.getDateTime().toGregorianCalendar().getTime(); - } - boolean returnHashInputData = false; - returnHashInputData = (verifyXMLSignatureRequest.getReturnHashInputData() != null); - String trustProfileID = verifyXMLSignatureRequest.getTrustProfileID(); - VerifySignatureInfo verifySignatureInfo = parseVerifySignatureInfo( - verifyXMLSignatureRequest.getVerifySignatureInfo()); - List supplementProfiles = parseSupplementProfiles(verifyXMLSignatureRequest); - - SignatureManifestCheckParams signatureManifestCheckParams = this - .parseSignatureManifestCheckParams(verifyXMLSignatureRequest.getSignatureManifestCheckParams()); - return factory.createVerifyXMLSignatureRequest(dateTime, verifySignatureInfo, supplementProfiles, - signatureManifestCheckParams, returnHashInputData, trustProfileID); - } - - @Override - public VerifyXMLSignatureResponseType buildXMLResponse(VerifyXMLSignatureResponse response) - throws MOAApplicationException { - VerifyXMLSignatureResponseType verifyXMLSignatureResponseType = new VerifyXMLSignatureResponseType(); - - verifyXMLSignatureResponseType.setSignerInfo(this.transformerUtils.buildSignerInfo(response.getSignerInfo())); - - if (response.getHashInputDatas() != null && !response.getHashInputDatas().isEmpty()) { - for (Iterator iter = response.getHashInputDatas().iterator(); iter.hasNext();) { - InputData inputData = (InputData) iter.next(); - verifyXMLSignatureResponseType.getHashInputData().add(buildInputData(inputData)); - } - } - - if (response.getReferenceInputDatas() != null && !response.getReferenceInputDatas().isEmpty()) { - for (Iterator iter = response.getReferenceInputDatas().iterator(); iter.hasNext();) { - InputData inputData = (InputData) iter.next(); - verifyXMLSignatureResponseType.getReferenceInputData().add(buildInputData(inputData)); - } - } - - // add the SignatureCheck - verifyXMLSignatureResponseType.setSignatureCheck(buildReferencesCheckResult(response.getSignatureCheck())); - - // add the SignatureManifestCheck - if (response.getSignatureManifestCheck() != null) { - verifyXMLSignatureResponseType.setSignatureManifestCheck(buildReferencesCheckResult(response.getSignatureManifestCheck())); - } - - // add the XMLDsigManifestChecks - if(response.getXMLDsigManifestChecks() != null) { - List xmlDsigManifestChecks = response.getXMLDsigManifestChecks(); - Iterator iter = xmlDsigManifestChecks.iterator(); - while(iter.hasNext()) { - Object xmlDsigManifestCheck = iter.next(); - verifyXMLSignatureResponseType.getXMLDSIGManifestCheck().add( - buildManifestCheckResult((at.gv.egovernment.moa.spss.api.xmlverify.ManifestRefsCheckResult) - xmlDsigManifestCheck)); - } - } - - // add the CertificateCheck - verifyXMLSignatureResponseType.setCertificateCheck(this.transformerUtils.buildCheckResult(response.getCertificateCheck())); - - if(response.getAdESFormResults() != null) { - Iterator formIterator = response.getAdESFormResults().iterator(); - - while(formIterator.hasNext()) { - AdESFormResults adESFormResult = (AdESFormResults)formIterator.next(); - verifyXMLSignatureResponseType.getFormCheckResult().add( - buildFormResult(adESFormResult)); - } - - } - - return verifyXMLSignatureResponseType; - } - - private at.gv.egiz.moasig.InputDataType buildInputData(InputData inputData) throws MOAApplicationException { - at.gv.egiz.moasig.InputDataType inputDataType = new at.gv.egiz.moasig.InputDataType(); - inputDataType.setPartOf(inputData.getPartOf()); - - if(inputData.getReferringReferenceNumber() != InputData.REFERER_NONE_) { - inputDataType.setReferringSigReference(BigInteger.valueOf(inputData.getReferringReferenceNumber())); - } - - switch(inputData.getContentType()) { - case Content.XML_CONTENT: - ContentXML contentXml = (ContentXML) inputData; - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - iaik.xml.crypto.utils.DOMUtils.serialize(DOMUtils.nodeList2DocumentFragment( - contentXml.getXMLContent()).getOwnerDocument(), - baos); - inputDataType.setBase64Content(baos.toByteArray()); - } catch (TransformerException e) { - throw new MOAApplicationException("2200", null, e); - } catch (ParserConfigurationException e) { - throw new MOAApplicationException("2200", null, e); - } - - break; - case Content.BINARY_CONTENT: - ContentBinary contentBinary = (ContentBinary) inputData; - try { - inputDataType.setBase64Content(IOUtils.toByteArray(contentBinary.getBinaryContent())); - } catch (IOException e) { - throw new MOAApplicationException("2200", null, e); - } - break; - } - return inputDataType; - } - - private at.gv.egiz.moasig.FormResultType buildFormResult(AdESFormResults adESFormResults) { - at.gv.egiz.moasig.FormResultType formResult = new at.gv.egiz.moasig.FormResultType(); - formResult.setCode(BigInteger.valueOf(adESFormResults.getCode())); - formResult.setName(adESFormResults.getName()); - return formResult; - } - - private at.gv.egiz.moasig.ManifestRefsCheckResultType buildManifestCheckResult( - at.gv.egovernment.moa.spss.api.xmlverify.ManifestRefsCheckResult referencesCheckResult) { - at.gv.egiz.moasig.ManifestRefsCheckResultType referencesCheckResultType = new at.gv.egiz.moasig.ManifestRefsCheckResultType(); - - if (referencesCheckResult.getInfo() != null) { - at.gv.egiz.moasig.ObjectFactory of = new at.gv.egiz.moasig.ObjectFactory(); - at.gv.egiz.moasig.AnyChildrenType anyInfos = new at.gv.egiz.moasig.AnyChildrenType(); - - if (referencesCheckResult.getInfo().getFailedReferences() != null) { - for (int idx = 0; idx < referencesCheckResult.getInfo().getFailedReferences().length; idx++) { - anyInfos.getContent().add(of.createFailedReference( - BigInteger.valueOf(referencesCheckResult.getInfo().getFailedReferences()[idx]))); - } - } - - if (referencesCheckResult.getInfo().getAnyOtherInfo() != null) { - for (int idx = 0; idx < referencesCheckResult.getInfo().getAnyOtherInfo().getLength(); idx++) { - Node node = referencesCheckResult.getInfo().getAnyOtherInfo().item(idx); - if (node instanceof Element) { - anyInfos.getContent().add((Element) node); - } - } - } - - anyInfos.getContent().add(of.createReferringSigReference( - BigInteger.valueOf(referencesCheckResult.getInfo().getReferringSignatureReference()))); - - referencesCheckResultType.setInfo(anyInfos); - - } - - referencesCheckResultType.setCode(BigInteger.valueOf(referencesCheckResult.getCode())); - return referencesCheckResultType; - } - - private at.gv.egiz.moasig.ReferencesCheckResultType buildReferencesCheckResult( - at.gv.egovernment.moa.spss.api.xmlverify.ReferencesCheckResult referencesCheckResult) { - at.gv.egiz.moasig.ReferencesCheckResultType referencesCheckResultType = new at.gv.egiz.moasig.ReferencesCheckResultType(); - - if (referencesCheckResult.getInfo() != null) { - at.gv.egiz.moasig.ObjectFactory of = new at.gv.egiz.moasig.ObjectFactory(); - at.gv.egiz.moasig.AnyChildrenType anyInfos = new at.gv.egiz.moasig.AnyChildrenType(); - - if (referencesCheckResult.getInfo().getFailedReferences() != null) { - for (int idx = 0; idx < referencesCheckResult.getInfo().getFailedReferences().length; idx++) { - anyInfos.getContent().add(of.createFailedReference( - BigInteger.valueOf(referencesCheckResult.getInfo().getFailedReferences()[idx]))); - } - } - - if (referencesCheckResult.getInfo().getAnyOtherInfo() != null) { - for (int idx = 0; idx < referencesCheckResult.getInfo().getAnyOtherInfo().getLength(); idx++) { - Node node = referencesCheckResult.getInfo().getAnyOtherInfo().item(idx); - if (node instanceof Element) { - anyInfos.getContent().add((Element) node); - } - } - } - - referencesCheckResultType.setInfo(anyInfos); - } - - referencesCheckResultType.setCode(BigInteger.valueOf(referencesCheckResult.getCode())); - return referencesCheckResultType; - } - - - - /** - * Parse the <code>VerifySignatureInfo</code> DOM element contained in the - * <code>VerifyXMLSignatureRequest</code> DOM element. - * - * @param requestElem - * The <code>VerifyXMLSignatureRequest</code> DOM element - * containing the <code>VerifySignatureInfo</code> DOM element. - * @return The <code>VerifySignatureInfo</code> API object containing the - * data from the DOM element. - * @throws MOAApplicationException - */ - private VerifySignatureInfo parseVerifySignatureInfo( - at.gv.egiz.moasig.VerifyXMLSignatureRequestType.VerifySignatureInfo verifySignatureInfo) - throws MOAApplicationException { - Content verifySignatureEnvironment = transformerUtils - .buildContent(verifySignatureInfo.getVerifySignatureEnvironment()); - - XMLSignatureLocationType xmlSignatureLocationType = verifySignatureInfo.getVerifySignatureLocation(); - - String xPathExpression = xmlSignatureLocationType.getXPathExpression(); - - Iterator<NamespaceDeclarationType> namespaceDelcarationIterator = xmlSignatureLocationType.getNamespaceDeclaration().iterator(); - - Map namespaceMap = new HashMap(); - - while(namespaceDelcarationIterator.hasNext()) { - NamespaceDeclarationType namespaceDelcaration = namespaceDelcarationIterator.next(); - - String prefix = namespaceDelcaration.getPrefix(); - String namespace = namespaceDelcaration.getValue(); - - namespaceMap.put(prefix, namespace); - } - - VerifySignatureLocation verifySignatureLocation = factory.createVerifySignatureLocation(xPathExpression, - namespaceMap); - - return factory.createVerifySignatureInfo(verifySignatureEnvironment, verifySignatureLocation); - } - - /** - * Parse the supplement profiles contained in the given - * <code>VerifyXMLSignatureRequest</code> DOM element. - * - * @param requestElem - * The <code>VerifyXMLSignatureRequest</code> DOM element. - * @return A <code>List</code> of <code>SupplementProfile</code> API objects - * containing the data from the <code>SupplementProfile</code> DOM - * elements. - * @throws MOAApplicationException - */ - private List parseSupplementProfiles(at.gv.egiz.moasig.VerifyXMLSignatureRequest verifyXMLSignatureRequest) - throws MOAApplicationException { - List supplementProfiles = new ArrayList(); - List<Object> supplementElements = verifyXMLSignatureRequest.getSupplementProfileOrSupplementProfileID(); - if (supplementElements != null) { - Iterator<Object> supplementElementsIterator = supplementElements.iterator(); - while (supplementElementsIterator.hasNext()) { - Object object = supplementElementsIterator.next(); - SupplementProfile profile; - if (object instanceof XMLDataObjectAssociationType) { - XMLDataObjectAssociationType xmlDataObjectAssociationType = (XMLDataObjectAssociationType) object; - profile = parseSupplementProfile(xmlDataObjectAssociationType); - } else if (object instanceof String) { - String profileID = (String) object; - profile = factory.createSupplementProfile(profileID); - } else { - throw new MOAApplicationException( - "Invalid object in moa:SupplementProfile | moa:SupplementProfileID", null); - } - - supplementProfiles.add(profile); - } - } - - return supplementProfiles; - } - - public SupplementProfile parseSupplementProfile(XMLDataObjectAssociationType xmlDataObjectAssociationType) - throws MOAApplicationException { - XMLDataObjectAssociation supplementProfile = this.transformerUtils - .parseXMLDataObjectAssociation(xmlDataObjectAssociationType); - - return factory.createSupplementProfile(supplementProfile); - } - - /** - * Parse the <code>SignatureManifestCheckParams</code> DOM element contained - * in the given <code>VerifyXMLSignatureRequest</code> DOM element. - * - * @param requestElem - * The <code>VerifyXMLSignatureRequest</code> DOM element. - * @return The <code>SignatureManifestCheckParams</code> API object - * containing the data from the - * <code>SignatureManifestCheckParams</code> DOM element. - * @throws MOAApplicationException - * An error occurred parsing the - * <code>SignatureManifestCheckParams</code> DOM element. - */ - private SignatureManifestCheckParams parseSignatureManifestCheckParams( - at.gv.egiz.moasig.VerifyXMLSignatureRequestType.SignatureManifestCheckParams signatureManifestCheckParams) - throws MOAApplicationException { - - if (signatureManifestCheckParams == null) { - return null; - } - - boolean returnReferencInputData = signatureManifestCheckParams.isReturnReferenceInputData(); - List<at.gv.egiz.moasig.VerifyTransformsDataType> referenceInfos = signatureManifestCheckParams - .getReferenceInfo(); - List referenceInfosBuild = parseReferenceInfos(referenceInfos); - - return factory.createSignatureManifestCheckParams(referenceInfosBuild, returnReferencInputData); - } - - /** - * Parse the <code>ReferenceInfo</code> DOM elements contained in a - * <code>SignatureManifestCheckParams</code> DOM element. - * - * @param paramsElem - * The <code>SignatureManifestCheckParams</code> DOM element - * containing the <code>ReferenceInfo</code> DOM elements. - * @return A <code>List</code> of <code>RefernceInfo</code> API objects - * containing the data from the <code>ReferenceInfo</code> DOM - * elements. - * @throws MOAApplicationException - * An error occurred parsing the <code>ReferenceInfo</code> DOM - * elements. - */ - private List parseReferenceInfos(List<at.gv.egiz.moasig.VerifyTransformsDataType> referenceInfosWeb) - throws MOAApplicationException { - - List referenceInfos = new ArrayList(); - - if (referenceInfosWeb != null) { - - Iterator<at.gv.egiz.moasig.VerifyTransformsDataType> referenceInfosIterator = referenceInfosWeb.iterator(); - - while (referenceInfosIterator.hasNext()) { - at.gv.egiz.moasig.VerifyTransformsDataType verifyTransformsDataType = referenceInfosIterator.next(); - - ReferenceInfo referenceInfo = parseReferenceInfo(verifyTransformsDataType); - referenceInfos.add(referenceInfo); - } - - } - return referenceInfos; - } - - /** - * Parse a <code>ReferenceInfo</code> DOM element. - * - * @param refInfoElem - * The <code>ReferenceInfo</code> DOM element to parse. - * @return The <code>ReferenceInfo</code> API object containing the data - * from the given <code>ReferenceInfo</code> DOM element. - * @throws MOAApplicationException - * An error occurred parsing the <code>ReferenceInfo</code> DOM - * element. - */ - private ReferenceInfo parseReferenceInfo(at.gv.egiz.moasig.VerifyTransformsDataType verifyTransformsDataType) - throws MOAApplicationException { - List profiles = parseVerifyTransformsInfoProfiles(verifyTransformsDataType); - return factory.createReferenceInfo(profiles); - } - - /** - * Parse the <code>VerifyTransformsInfoProfile</code> DOM elements contained - * in a <code>ReferenceInfo</code> DOM element. - * - * @param refInfoElem - * <code>ReferenceInfo</code> DOM element containing the - * <code>VerifyTransformsInfoProfile</code> DOM elements. - * @return A <code>List</code> of <code>VerifyTransformsInfoProfile</code> - * API objects containing the profile data. - * @throws MOAApplicationException - * An error occurred building the - * <code>VerifyTransformsInfoProfile</code>s. - */ - private List parseVerifyTransformsInfoProfiles(at.gv.egiz.moasig.VerifyTransformsDataType verifyTransformsDataType) - throws MOAApplicationException { - - List profiles = new ArrayList(); - - List<Object> transformsList = verifyTransformsDataType - .getVerifyTransformsInfoProfileOrVerifyTransformsInfoProfileID(); - Iterator<Object> transformsListIterator = transformsList.iterator(); - - while (transformsListIterator.hasNext()) { - Object object = transformsListIterator.next(); - - if (object instanceof at.gv.egiz.moasig.VerifyTransformsInfoProfile) { - at.gv.egiz.moasig.VerifyTransformsInfoProfile verifyTransformsInfoProfile = (at.gv.egiz.moasig.VerifyTransformsInfoProfile) object; - } else if (object instanceof String) { - String profileID = (String) object; - profiles.add(factory.createVerifyTransformsInfoProfile(profileID)); - } else { - throw new MOAApplicationException("Invalid object in VerifyTransformsData", null); - } - } - return profiles; - } - - /** - * Parse a <code>VerifyTransformsInfoProfile</code> DOM element. - * - * @param profileElem - * The <code>VerifyTransformsInfoProfile</code> DOM element to - * parse. - * @return A <code>VerifyTransformsInfoProfile</code> API object containing - * the information from the <code>VerifyTransformsInfoProfile</code> - * DOM element. - * @throws MOAApplicationException - * An error occurred parsing the - * <code>VerifyTransformsInfoProfile</code>. - */ - public VerifyTransformsInfoProfile parseVerifyTransformsInfoProfile( - at.gv.egiz.moasig.VerifyTransformsInfoProfile verifyTransformsInfoProfile) throws MOAApplicationException { - List transforms = null; - List transformParameters = new ArrayList(); - List<TransformParameterType> transformParams = verifyTransformsInfoProfile.getTransformParameter(); - Iterator<TransformParameterType> transformParamIterator = transformParams.iterator(); - - MoaTransformsType moaTransforms = verifyTransformsInfoProfile.getMoaTransforms(); - - if (moaTransforms != null) { - transforms = transformParser.parseTransforms(moaTransforms); - } - - while (transformParamIterator.hasNext()) { - TransformParameterType transformParameter = transformParamIterator.next(); - transformParameters.add(parseTransformParameter(transformParameter)); - } - - return factory.createVerifyTransformsInfoProfile(transforms, transformParameters); - } - - /** - * Parse a <code>TransformParameter</code> DOM element. - * - * @param paramElem - * The <code>TransformParameter</code> DOM element to parse. - * @return The <code>TransformParameter</code> API object containing the - * information from the <code>TransformParameter</code> DOM element. - * @throws MOAApplicationException - * An error occurred parsing the <code>TransformParameter</code> - * DOM element. - */ - private TransformParameter parseTransformParameter(TransformParameterType transformParameter) - throws MOAApplicationException { - String uri = transformParameter.getURI(); - if (transformParameter.getBase64Content() != null) { - InputStream binaryContent = new ByteArrayInputStream(transformParameter.getBase64Content()); - return factory.createTransformParameter(uri, binaryContent); - } else if (transformParameter.getHash() != null) { - Hash hash = transformParameter.getHash(); - String digestMethodStr = ""; - - if (hash.getDigestMethod() != null) { - digestMethodStr = hash.getDigestMethod().getAlgorithm(); - } - byte[] digestValue = hash.getDigestValue(); - return factory.createTransformParameter(uri, digestMethodStr, digestValue); - } else { - return factory.createTransformParameter(uri); - } - } -} |