use of org.apache.xml.security.transforms.params.InclusiveNamespaces in project santuario-java by apache.
the class TransformC14NExclusive method enginePerformTransform.
protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input, OutputStream os, Transform transformObject) throws CanonicalizationException {
try {
String inclusiveNamespaces = null;
if (transformObject.length(InclusiveNamespaces.ExclusiveCanonicalizationNamespace, InclusiveNamespaces._TAG_EC_INCLUSIVENAMESPACES) == 1) {
Element inclusiveElement = XMLUtils.selectNode(transformObject.getElement().getFirstChild(), InclusiveNamespaces.ExclusiveCanonicalizationNamespace, InclusiveNamespaces._TAG_EC_INCLUSIVENAMESPACES, 0);
inclusiveNamespaces = new InclusiveNamespaces(inclusiveElement, transformObject.getBaseURI()).getInclusiveNamespaces();
}
Canonicalizer20010315ExclOmitComments c14n = new Canonicalizer20010315ExclOmitComments();
c14n.setSecureValidation(secureValidation);
if (os != null) {
c14n.setWriter(os);
}
byte[] result = c14n.engineCanonicalize(input, inclusiveNamespaces);
XMLSignatureInput output = new XMLSignatureInput(result);
output.setSecureValidation(secureValidation);
if (os != null) {
output.setOutputStream(os);
}
return output;
} catch (XMLSecurityException ex) {
throw new CanonicalizationException(ex);
}
}
use of org.apache.xml.security.transforms.params.InclusiveNamespaces in project santuario-java by apache.
the class Reference method getHTMLRepresentation.
/**
* Method getHTMLRepresentation
* @return The HTML of the transformation
* @throws XMLSignatureException
*/
public String getHTMLRepresentation() throws XMLSignatureException {
try {
XMLSignatureInput nodes = this.getNodesetBeforeFirstCanonicalization();
Transforms transforms = this.getTransforms();
Transform c14nTransform = null;
if (transforms != null) {
for (int i = 0; i < transforms.getLength(); i++) {
Transform t = transforms.item(i);
String uri = t.getURI();
if (uri.equals(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS) || uri.equals(Transforms.TRANSFORM_C14N_EXCL_WITH_COMMENTS)) {
c14nTransform = t;
break;
}
}
}
Set<String> inclusiveNamespaces = new HashSet<>();
if (c14nTransform != null && c14nTransform.length(InclusiveNamespaces.ExclusiveCanonicalizationNamespace, InclusiveNamespaces._TAG_EC_INCLUSIVENAMESPACES) == 1) {
// there is one InclusiveNamespaces element
InclusiveNamespaces in = new InclusiveNamespaces(XMLUtils.selectNode(c14nTransform.getElement().getFirstChild(), InclusiveNamespaces.ExclusiveCanonicalizationNamespace, InclusiveNamespaces._TAG_EC_INCLUSIVENAMESPACES, 0), this.getBaseURI());
inclusiveNamespaces = InclusiveNamespaces.prefixStr2Set(in.getInclusiveNamespaces());
}
return nodes.getHTMLRepresentation(inclusiveNamespaces);
} catch (TransformationException ex) {
throw new XMLSignatureException(ex);
} catch (InvalidTransformException ex) {
throw new XMLSignatureException(ex);
} catch (XMLSecurityException ex) {
throw new XMLSignatureException(ex);
}
}
use of org.apache.xml.security.transforms.params.InclusiveNamespaces in project santuario-java by apache.
the class TransformC14NExclusiveWithComments method enginePerformTransform.
protected XMLSignatureInput enginePerformTransform(XMLSignatureInput input, OutputStream os, Transform transformObject) throws CanonicalizationException {
try {
String inclusiveNamespaces = null;
if (transformObject.length(InclusiveNamespaces.ExclusiveCanonicalizationNamespace, InclusiveNamespaces._TAG_EC_INCLUSIVENAMESPACES) == 1) {
Element inclusiveElement = XMLUtils.selectNode(transformObject.getElement().getFirstChild(), InclusiveNamespaces.ExclusiveCanonicalizationNamespace, InclusiveNamespaces._TAG_EC_INCLUSIVENAMESPACES, 0);
inclusiveNamespaces = new InclusiveNamespaces(inclusiveElement, transformObject.getBaseURI()).getInclusiveNamespaces();
}
Canonicalizer20010315ExclWithComments c14n = new Canonicalizer20010315ExclWithComments();
c14n.setSecureValidation(secureValidation);
if (os != null) {
c14n.setWriter(os);
}
byte[] result = c14n.engineCanonicalize(input, inclusiveNamespaces);
XMLSignatureInput output = new XMLSignatureInput(result);
output.setSecureValidation(secureValidation);
return output;
} catch (XMLSecurityException ex) {
throw new CanonicalizationException(ex);
}
}
use of org.apache.xml.security.transforms.params.InclusiveNamespaces in project santuario-java by apache.
the class SignedInfo method getInclusiveNamespaces.
public String getInclusiveNamespaces() {
String c14nMethodURI = getCanonicalizationMethodURI();
if (!(c14nMethodURI.equals("http://www.w3.org/2001/10/xml-exc-c14n#") || c14nMethodURI.equals("http://www.w3.org/2001/10/xml-exc-c14n#WithComments"))) {
return null;
}
Element inclusiveElement = XMLUtils.getNextElement(c14nMethod.getFirstChild());
if (inclusiveElement != null) {
try {
String inclusiveNamespaces = new InclusiveNamespaces(inclusiveElement, InclusiveNamespaces.ExclusiveCanonicalizationNamespace).getInclusiveNamespaces();
return inclusiveNamespaces;
} catch (XMLSecurityException e) {
return null;
}
}
return null;
}
use of org.apache.xml.security.transforms.params.InclusiveNamespaces in project santuario-java by apache.
the class CreateExclC14nInteropValues method main.
/**
* Method main
*
* @param unused
* @throws Exception
*/
public static void main(String[] unused) throws Exception {
org.apache.xml.security.Init.init();
DocumentBuilder db = XMLUtils.createDocumentBuilder(false);
Document doc = db.newDocument();
String directory = "data/org/apache/xml/security/c14n/outExcl/";
File signatureFile = new File(directory + "apacheSignature.xml");
XMLSignature xmlSignature = new XMLSignature(doc, signatureFile.toURI().toURL().toString(), XMLSignature.ALGO_ID_MAC_HMAC_SHA1);
doc.appendChild(xmlSignature.getElement());
{
// ref 0
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPath("self::Parent or (parent::Parent and not(self::Child)) or self::GrandChild or parent::GrandChild");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
xmlSignature.addDocument("iaikTests.example1.xml", tf);
}
{
// ref 1
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPath("self::Parent or (parent::Parent and not(self::Child)) or self::GrandChild or parent::GrandChild");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
tf.addTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
xmlSignature.addDocument("iaikTests.example1.xml", tf);
}
{
// ref 2
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPathNamespaceContext("xmlns:default", "http://example.org");
xc.setXPath("self::Parent or (parent::Parent and not(self::default:Child)) or self::GrandChild or parent::GrandChild");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
xmlSignature.addDocument("iaikTests.example2.xml", tf);
}
{
// ref 3
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPathNamespaceContext("xmlns:default", "http://example.org");
xc.setXPath("self::Parent or (parent::Parent and not(self::default:Child)) or self::GrandChild or parent::GrandChild");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
tf.addTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
xmlSignature.addDocument("iaikTests.example2.xml", tf);
}
{
// ref 4
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPathNamespaceContext("xmlns:default", "http://example.org/default");
xc.setXPathNamespaceContext("xmlns:ns1", "http://example.org/ns1");
xc.setXPath("self::default:Parent or (parent::default:Parent and not(self::default:Child)) or self::ns1:GrandChild or parent::ns1:GrandChild or self::default:GrandChild or parent::default:GrandChild");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
xmlSignature.addDocument("iaikTests.example3.xml", tf);
}
{
// ref 5
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPathNamespaceContext("xmlns:default", "http://example.org/default");
xc.setXPathNamespaceContext("xmlns:ns1", "http://example.org/ns1");
xc.setXPath("self::default:Parent or (parent::default:Parent and not(self::default:Child)) or self::ns1:GrandChild or parent::ns1:GrandChild or self::default:GrandChild or parent::default:GrandChild");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
tf.addTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS);
xmlSignature.addDocument("iaikTests.example3.xml", tf);
}
{
// ref 6
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPathNamespaceContext("xmlns:ns1", "http://example.org/ns1");
xc.setXPath("self::Parent or (parent::Parent and not(self::Child)) or self::ns1:GrandChild or parent::ns1:GrandChild");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
xmlSignature.addDocument("iaikTests.example4.xml", tf);
}
{
// ref 7
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPathNamespaceContext("xmlns:ns1", "http://example.org/ns1");
xc.setXPath("self::Parent or (parent::Parent and not(self::Child)) or self::ns1:GrandChild or parent::ns1:GrandChild");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
{
InclusiveNamespaces incNS = new InclusiveNamespaces(doc, "ns2");
tf.addTransform(Transforms.TRANSFORM_C14N_EXCL_OMIT_COMMENTS, incNS.getElement());
}
xmlSignature.addDocument("iaikTests.example4.xml", tf);
}
{
// ref 8
ObjectContainer obj = new ObjectContainer(doc);
String id = "object1";
obj.setId(id);
String xmlStr = "" + "<included xml:lang='de'>" + "\n" + "<notIncluded xml:lang='de'>" + "\n" + "<notIncluded xml:lang='uk'>" + "\n" + "<included >" + "\n" + "</included>" + "\n" + "</notIncluded>" + "\n" + "</notIncluded>" + "\n" + "</included>";
Document importDoc = null;
try (InputStream is = new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))) {
importDoc = db.parse(is);
}
obj.getElement().appendChild(doc.createTextNode("\n"));
obj.getElement().appendChild(doc.importNode(importDoc.getDocumentElement(), true));
obj.getElement().appendChild(doc.createTextNode("\n"));
xmlSignature.appendObject(obj);
// ref apache_8
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPath("self::node()[local-name()='included']");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
xmlSignature.addDocument("#" + id, tf);
}
{
// ref 9
ObjectContainer obj = new ObjectContainer(doc);
String id = "object2";
obj.setId(id);
String xmlStr = "" + "<included xml:lang='uk'>" + "\n" + "<notIncluded xml:lang='de'>" + "\n" + "<notIncluded xml:lang='uk'>" + "\n" + "<included >" + "\n" + "</included>" + "\n" + "</notIncluded>" + "\n" + "</notIncluded>" + "\n" + "</included>";
Document importDoc = null;
try (InputStream is = new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))) {
importDoc = db.parse(is);
}
obj.getElement().appendChild(doc.createTextNode("\n"));
obj.getElement().appendChild(doc.importNode(importDoc.getDocumentElement(), true));
obj.getElement().appendChild(doc.createTextNode("\n"));
xmlSignature.appendObject(obj);
// ref apache_8
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPath("self::node()[local-name()='included']");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
xmlSignature.addDocument("#" + id, tf);
}
{
// ref 10
ObjectContainer obj = new ObjectContainer(doc);
String id = "object3";
obj.setId(id);
String xmlStr = "" + "<included xml:lang='de'>" + "\n" + "<notIncluded xml:lang='de'>" + "\n" + "<notIncluded xml:lang='uk'>" + "\n" + "<included xml:lang='de'>" + "\n" + "</included>" + "\n" + "</notIncluded>" + "\n" + "</notIncluded>" + "\n" + "</included>";
Document importDoc = null;
try (InputStream is = new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))) {
importDoc = db.parse(is);
}
obj.getElement().appendChild(doc.createTextNode("\n"));
obj.getElement().appendChild(doc.importNode(importDoc.getDocumentElement(), true));
obj.getElement().appendChild(doc.createTextNode("\n"));
xmlSignature.appendObject(obj);
// ref apache_8
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPath("self::node()[local-name()='included']");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
xmlSignature.addDocument("#" + id, tf);
}
{
// ref 11
ObjectContainer obj = new ObjectContainer(doc);
String id = "object4";
obj.setId(id);
String xmlStr = "" + "<included xml:lang='de'>" + "\n" + "<included xml:lang='de'>" + "\n" + "<notIncluded xml:lang='uk'>" + "\n" + "<included >" + "\n" + "</included>" + "\n" + "</notIncluded>" + "\n" + "</included>" + "\n" + "</included>";
Document importDoc = null;
try (InputStream is = new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))) {
importDoc = db.parse(is);
}
obj.getElement().appendChild(doc.createTextNode("\n"));
obj.getElement().appendChild(doc.importNode(importDoc.getDocumentElement(), true));
obj.getElement().appendChild(doc.createTextNode("\n"));
xmlSignature.appendObject(obj);
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPath("self::node()[local-name()='included']");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
xmlSignature.addDocument("#" + id, tf);
}
{
// ref 12
ObjectContainer obj = new ObjectContainer(doc);
String id = "object5";
obj.setId(id);
String xmlStr = "" + "<included xml:lang='de'>" + "\n" + "<included xml:lang='de'>" + "\n" + "<notIncluded xml:space='preserve' xml:lang='uk'>" + "\n" + "<included >" + "\n" + "</included>" + "\n" + "</notIncluded>" + "\n" + "</included>" + "\n" + "</included>";
Document importDoc = null;
try (InputStream is = new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))) {
importDoc = db.parse(is);
}
obj.getElement().appendChild(doc.createTextNode("\n"));
obj.getElement().appendChild(doc.importNode(importDoc.getDocumentElement(), true));
obj.getElement().appendChild(doc.createTextNode("\n"));
xmlSignature.appendObject(obj);
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPath("self::node()[local-name()='included']");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
xmlSignature.addDocument("#" + id, tf);
}
{
// ref 13
ObjectContainer obj = new ObjectContainer(doc);
String id = "object6";
obj.setId(id);
String xmlStr = "" + "<included xml:space='preserve' xml:lang='de'>" + "\n" + "<included xml:lang='de'>" + "\n" + "<notIncluded xml:lang='uk'>" + "\n" + "<included>" + "\n" + "</included>" + "\n" + "</notIncluded>" + "\n" + "</included>" + "\n" + "</included>";
Document importDoc = null;
try (InputStream is = new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))) {
importDoc = db.parse(is);
}
obj.getElement().appendChild(doc.createTextNode("\n"));
obj.getElement().appendChild(doc.importNode(importDoc.getDocumentElement(), true));
obj.getElement().appendChild(doc.createTextNode("\n"));
xmlSignature.appendObject(obj);
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPath("self::node()[local-name()='included']");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
}
xmlSignature.addDocument("#" + id, tf);
}
{
// ref 13b
String id = "object6";
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPath("self::node()[local-name()='included']");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
tf.addTransform(Transforms.TRANSFORM_C14N_OMIT_COMMENTS);
}
xmlSignature.addDocument("#" + id, tf);
}
{
// ref 13c
String id = "object6";
Transforms tf = new Transforms(doc);
{
XPathContainer xc = new XPathContainer(doc);
xc.setXPath("self::node()[local-name()='included']");
tf.addTransform(Transforms.TRANSFORM_XPATH, xc.getElement());
tf.addTransform(Transforms.TRANSFORM_C14N_OMIT_COMMENTS);
tf.addTransform(Transforms.TRANSFORM_C14N_OMIT_COMMENTS);
}
xmlSignature.addDocument("#" + id, tf);
// xmlSignature.addDocument("#" + id, tf, org.apache.xml.security.algorithms.MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA1, "ref13c", null);
}
String secretKey = "secret";
xmlSignature.getKeyInfo().addKeyName("The UTF-8 octets of \"" + secretKey + "\" are used for signing (" + secretKey.length() + " octets)");
xmlSignature.sign(xmlSignature.createSecretKey(secretKey.getBytes()));
FileOutputStream fos = new FileOutputStream(signatureFile);
XMLUtils.outputDOM(doc, fos);
fos.close();
int length = xmlSignature.getSignedInfo().getLength();
for (int i = 0; i < length; i++) {
String fname = directory + "c14n-" + i + "-apache.xml";
System.out.println(fname);
JavaUtils.writeBytesToFilename(fname, xmlSignature.getSignedInfo().getReferencedContentAfterTransformsItem(i).getBytes());
}
XMLSignature s = new XMLSignature(doc.getDocumentElement(), signatureFile.toURI().toURL().toString());
boolean verify = s.checkSignatureValue(s.createSecretKey("secret".getBytes()));
System.out.println("verify=" + verify);
System.out.println("");
XMLUtils.outputDOMc14nWithComments(doc, System.out);
}
Aggregations