public function decryptNode(XMLSecurityKey $objKey, $replace = TRUE)
 {
     if (empty($this->rawNode)) {
         throw new Exception('Node to decrypt has not been set');
     }
     if (!$objKey instanceof XMLSecurityKey) {
         throw new Exception('Invalid Key');
     }
     $doc = $this->rawNode->ownerDocument;
     $xPath = new DOMXPath($doc);
     $xPath->registerNamespace('xmlencr', XMLSecEnc::XMLENCNS);
     /* Only handles embedded content right now and not a reference */
     $query = "./xmlencr:CipherData/xmlencr:CipherValue";
     $nodeset = $xPath->query($query, $this->rawNode);
     if ($node = $nodeset->item(0)) {
         $encryptedData = base64_decode($node->nodeValue);
         $decrypted = $objKey->decryptData($encryptedData);
         if ($replace) {
             switch ($this->type) {
                 case XMLSecEnc::Element:
                     $newdoc = new DOMDocument();
                     $newdoc->loadXML($decrypted);
                     if ($this->rawNode->nodeType == XML_DOCUMENT_NODE) {
                         return $newdoc;
                     }
                     $importEnc = $this->rawNode->ownerDocument->importNode($newdoc->documentElement, TRUE);
                     $this->rawNode->parentNode->replaceChild($importEnc, $this->rawNode);
                     return $importEnc;
                     break;
                 case XMLSecEnc::Content:
                     if ($this->rawNode->nodeType == XML_DOCUMENT_NODE) {
                         $doc = $this->rawNode;
                     } else {
                         $doc = $this->rawNode->ownerDocument;
                     }
                     $newFrag = $doc->createDocumentFragment();
                     $newFrag->appendXML($decrypted);
                     $parent = $this->rawNode->parentNode;
                     $parent->replaceChild($newFrag, $this->rawNode);
                     return $parent;
                     break;
                 default:
                     return $decrypted;
             }
         } else {
             return $decrypted;
         }
     } else {
         throw new Exception("Cannot locate encrypted data");
     }
 }