From b3811b783e2617d90012cd85b070950bf0fd9883 Mon Sep 17 00:00:00 2001 From: rchaouch Date: Thu, 30 Sep 2021 12:02:24 +0200 Subject: [PATCH] Make transforms element configurable with options array, default true for BC --- src/XMLSecurityDSig.php | 48 ++++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/src/XMLSecurityDSig.php b/src/XMLSecurityDSig.php index 16713ab..a770f1a 100644 --- a/src/XMLSecurityDSig.php +++ b/src/XMLSecurityDSig.php @@ -631,6 +631,7 @@ private function addRefInternal($sinfoNode, $node, $algorithm, $arTransforms=nul $id_name = 'Id'; $overwrite_id = true; $force_uri = false; + $transforms_elem = true; if (is_array($options)) { $prefix = empty($options['prefix']) ? null : $options['prefix']; @@ -638,6 +639,7 @@ private function addRefInternal($sinfoNode, $node, $algorithm, $arTransforms=nul $id_name = empty($options['id_name']) ? 'Id' : $options['id_name']; $overwrite_id = !isset($options['overwrite']) ? true : (bool) $options['overwrite']; $force_uri = !isset($options['force_uri']) ? false : (bool) $options['force_uri']; + $transforms_elem = !isset($options['transforms_elem']) ? true : (bool) $options['transforms_elem']; } $attname = $id_name; @@ -662,32 +664,34 @@ private function addRefInternal($sinfoNode, $node, $algorithm, $arTransforms=nul $refNode->setAttribute("URI", ''); } - $transNodes = $this->createNewSignNode('Transforms'); - $refNode->appendChild($transNodes); - - if (is_array($arTransforms)) { - foreach ($arTransforms AS $transform) { - $transNode = $this->createNewSignNode('Transform'); - $transNodes->appendChild($transNode); - if (is_array($transform) && - (! empty($transform['http://www.w3.org/TR/1999/REC-xpath-19991116'])) && - (! empty($transform['http://www.w3.org/TR/1999/REC-xpath-19991116']['query']))) { - $transNode->setAttribute('Algorithm', 'http://www.w3.org/TR/1999/REC-xpath-19991116'); - $XPathNode = $this->createNewSignNode('XPath', $transform['http://www.w3.org/TR/1999/REC-xpath-19991116']['query']); - $transNode->appendChild($XPathNode); - if (! empty($transform['http://www.w3.org/TR/1999/REC-xpath-19991116']['namespaces'])) { - foreach ($transform['http://www.w3.org/TR/1999/REC-xpath-19991116']['namespaces'] AS $prefix => $namespace) { - $XPathNode->setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:$prefix", $namespace); + if ($transforms_elem) { + $transNodes = $this->createNewSignNode('Transforms'); + $refNode->appendChild($transNodes); + + if (is_array($arTransforms)) { + foreach ($arTransforms AS $transform) { + $transNode = $this->createNewSignNode('Transform'); + $transNodes->appendChild($transNode); + if (is_array($transform) && + (! empty($transform['http://www.w3.org/TR/1999/REC-xpath-19991116'])) && + (! empty($transform['http://www.w3.org/TR/1999/REC-xpath-19991116']['query']))) { + $transNode->setAttribute('Algorithm', 'http://www.w3.org/TR/1999/REC-xpath-19991116'); + $XPathNode = $this->createNewSignNode('XPath', $transform['http://www.w3.org/TR/1999/REC-xpath-19991116']['query']); + $transNode->appendChild($XPathNode); + if (! empty($transform['http://www.w3.org/TR/1999/REC-xpath-19991116']['namespaces'])) { + foreach ($transform['http://www.w3.org/TR/1999/REC-xpath-19991116']['namespaces'] AS $prefix => $namespace) { + $XPathNode->setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:$prefix", $namespace); + } } + } else { + $transNode->setAttribute('Algorithm', $transform); } - } else { - $transNode->setAttribute('Algorithm', $transform); } + } elseif (! empty($this->canonicalMethod)) { + $transNode = $this->createNewSignNode('Transform'); + $transNodes->appendChild($transNode); + $transNode->setAttribute('Algorithm', $this->canonicalMethod); } - } elseif (! empty($this->canonicalMethod)) { - $transNode = $this->createNewSignNode('Transform'); - $transNodes->appendChild($transNode); - $transNode->setAttribute('Algorithm', $this->canonicalMethod); } $canonicalData = $this->processTransforms($refNode, $node);