/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.component.xmlsecurity.api; import java.util.List; import javax.xml.crypto.dsig.Reference; import javax.xml.crypto.dsig.XMLObject; import javax.xml.crypto.dsig.XMLSignatureFactory; import javax.xml.crypto.dsig.keyinfo.KeyInfo; import org.w3c.dom.Node; import org.apache.camel.Message; /** * You can provide further XML objects and references which will be added by the * XML signature generator to the XML signature. */ public interface XmlSignatureProperties { /** * Returns further configuration objects for the XML signature * * @param input * input * @return output must not be <code>null</code> * @throws Exception * if an error occurs during creating the output */ Output get(Input input) throws Exception; //NOPMD public interface Input { /** Input message for reading header data */ Message getMessage(); /** * The message body as DOM node. If the message body is plain text then * the node will be a text node. If the message body is a XML document, * then the node is the root element. */ Node getMessageBodyNode(); /** * Returns the parent node of the signature element in the case of * enveloped or detached XML signature, or the empty result document in * the case of enveloping XML signature. * * @return parent node, cannot be <code>null</code> */ Node getParent(); /** Key info. */ KeyInfo getKeyInfo(); /** * XML signature factory which can be used to create Reference and * XMLObject instances. * * @return factory */ XMLSignatureFactory getSignatureFactory(); /** * Signature algorithm. Example: * "http://www.w3.org/2000/09/xmldsig#dsa-sha1". */ String getSignatureAlgorithm(); /** * Digest algorithm which is used for the digest calculation of the * message body. */ String getContentDigestAlgorithm(); /** * Signature Id. Can be <code>null</code>, then no signature Id * attribute is generated. */ String getSignatureId(); /** * Reference URI which points to the content of the original XML * document to be signed. For enveloped signature it is typically the * empty string. For detached signature, it is an ID attribute value * preceded by '#'. For enveloping signature, it is <code>null</code>. */ String getContentReferenceUri(); /** * Retruns the signature type. * * @return signature type */ SignatureType getSignatureType(); /** * Returns the prefix for the XML Signature namespace * ("http://www.w3.org/2000/09/xmldsig#"). Can be null or empty. */ String getPrefixForXmlSignatureNamespace(); } class Output { private String contentReferenceId; private String signatureId; private List<? extends XMLObject> objects; private List<? extends Reference> references; public List<? extends XMLObject> getObjects() { return objects; } public void setObjects(List<? extends XMLObject> objects) { this.objects = objects; } public List<? extends Reference> getReferences() { return references; } public void setReferences(List<? extends Reference> references) { this.references = references; } public String getContentReferenceId() { return contentReferenceId; } /** * Id value for the reference of the signed content. Currently used by * the XAdES parameter DataObjectFormat. See XAdESSignatureProperties. * */ public void setContentReferenceId(String contentReferenceId) { this.contentReferenceId = contentReferenceId; } public String getSignatureId() { return signatureId; } /** * You can overwrite the value of the Id attribute of the Signature * element that you get from {@link Input#getSignatureId()}. Only if the * provided value is not <code>null</code> and not empty, then the * signature Id will be overwritten. * * @param signatureId * Id attribute value of the Signature element */ public void setSignatureId(String signatureId) { this.signatureId = signatureId; } } }