Skip to content

Commit f4b1e7c

Browse files
authored
Overload validateReference
1 parent 29d8e95 commit f4b1e7c

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

src/XMLSecurityDSig.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,38 @@
4343

4444
class XMLSecurityDSig extends \RobRichards\XMLSecLibs\XMLSecurityDSig
4545
{
46+
/**
47+
* @return bool
48+
* @throws Exception
49+
*/
50+
public function validateReference()
51+
{
52+
$sigNode = $this->sigNode;
53+
$docElem = $sigNode->ownerDocument->documentElement;
54+
55+
// enveloped signature, remove it
56+
if (!$docElem->isSameNode($sigNode)) {
57+
if ($sigNode->parentNode !== null) {
58+
$sigNode->parentNode->removeChild($sigNode);
59+
}
60+
}
61+
$xpath = $this->getXPathObj();
62+
$query = "./secdsig:SignedInfo[1]/secdsig:Reference";
63+
$nodeset = $xpath->query($query, $sigNode);
64+
if ($nodeset->length < 1) {
65+
throw new Exception("Reference nodes not found");
66+
}
67+
68+
/* Initialize/reset the list of validated nodes. */
69+
$this->validatedNodes = [];
70+
71+
foreach ($nodeset as $refNode) {
72+
if (!$this->processRefNode($refNode)) {
73+
/* Clear the list of validated nodes. */
74+
$this->validatedNodes = null;
75+
throw new Exception("Reference validation failed");
76+
}
77+
}
78+
return true;
79+
}
4680
}

0 commit comments

Comments
 (0)