/** * Sign the document. * * @param DOMElement $signature Signature element to sign * @param Key $keyForSignature Key used to sign data * @param string $canonicalizationAlgorithm Canonicalization algorithm * * @return DOMElement */ public static function signDocument(DOMElement $signature, Key $keyForSignature, $canonicalizationAlgorithm) { $doc = $signature->ownerDocument; $signedInfo = $signature->getElementsByTagNameNS(self::NS_XMLDSIG, 'SignedInfo')->item(0); if (!is_null($signedInfo)) { $canonicalizedData = self::canonicalizeData($signedInfo, $canonicalizationAlgorithm); $signatureValueString = base64_encode($keyForSignature->signData($canonicalizedData)); $signatureValue = $doc->createElementNS(self::NS_XMLDSIG, self::PFX_XMLDSIG . ':SignatureValue', $signatureValueString); $keyInfo = $signature->getElementsByTagNameNS(self::NS_XMLDSIG, 'KeyInfo')->item(0); $signature->insertBefore($signatureValue, $keyInfo); } return $signatureValue; }