public function encryptBody($siteKey, $objKey, $token) { $enc = new XMLSecEnc(); foreach ($this->envelope->childNodes as $node) { if ($node->namespaceURI == $this->soapNS && $node->localName == 'Body') { break; } } $enc->setNode($node); /* encrypt the symmetric key */ $enc->encryptKey($siteKey, $objKey, false); $enc->type = XMLSecEnc::CONTENT; /* Using the symmetric key to actually encrypt the data */ $encNode = $enc->encryptNode($objKey); $guid = XMLSecurityDSig::generateGUID(); $encNode->setAttribute('Id', $guid); $refNode = $encNode->firstChild; while ($refNode && $refNode->nodeType != XML_ELEMENT_NODE) { $refNode = $refNode->nextSibling; } if ($refNode) { $refNode = $refNode->nextSibling; } if ($this->addEncryptedKey($enc, $token)) { $this->addReference($enc->encKey, $guid); } }
private function addRefInternal($sinfoNode, $node, $algorithm, $arTransforms = null, $options = null) { $prefix = null; $prefix_ns = null; if (is_array($options)) { $prefix = empty($options['prefix']) ? null : $options['prefix']; $prefix_ns = empty($options['prefix_ns']) ? null : $options['prefix_ns']; $id_name = empty($options['id_name']) ? 'Id' : $options['id_name']; } $refNode = $this->createNewSignNode('Reference'); $sinfoNode->appendChild($refNode); if ($node instanceof DOMDocument) { $uri = null; } else { /* Do wer really need to set a prefix? */ $uri = XMLSecurityDSig::generateGUID(); $refNode->setAttribute("URI", '#' . $uri); } $transNodes = $this->createNewSignNode('Transforms'); $refNode->appendChild($transNodes); if (is_array($arTransforms)) { foreach ($arTransforms as $transform) { $transNode = $this->createNewSignNode('Transform'); $transNodes->appendChild($transNode); $transNode->setAttribute('Algorithm', $transform); } } elseif (!empty($this->canonicalMethod)) { $transNode = $this->createNewSignNode('Transform'); $transNodes->appendChild($transNode); $transNode->setAttribute('Algorithm', $this->canonicalMethod); } if (!empty($uri)) { $attname = $id_name; if (!empty($prefix)) { $attname = $prefix . ':' . $attname; } $node->setAttributeNS($prefix_ns, $attname, $uri); } $canonicalData = $this->processTransforms($refNode, $node); $digValue = $this->calculateDigest($algorithm, $canonicalData); $digestMethod = $this->createNewSignNode('DigestMethod'); $refNode->appendChild($digestMethod); $digestMethod->setAttribute('Algorithm', $algorithm); $digestValue = $this->createNewSignNode('DigestValue', $digValue); $refNode->appendChild($digestValue); }