}
}
- XMLObject* decrypt(const CredentialResolver* KEKresolver, const XMLCh* recipient) const
+ XMLObject* decrypt(const CredentialResolver& credResolver, const XMLCh* recipient, CredentialCriteria* criteria) const
{
if (!m_EncryptedData)
throw DecryptionException("No encrypted data present.");
- EncryptedKeyResolver ekr(*this, recipient);
- Decrypter decrypter(KEKresolver, &ekr);
- DOMDocumentFragment* frag = decrypter.decryptData(*m_EncryptedData);
+ EncryptedKeyResolver ekr(*this);
+ Decrypter decrypter(&credResolver, criteria, &ekr);
+ DOMDocumentFragment* frag = decrypter.decryptData(*m_EncryptedData, recipient);
if (frag->hasChildNodes() && frag->getFirstChild()==frag->getLastChild()) {
DOMNode* plaintext=frag->getFirstChild();
if (plaintext->getNodeType()==DOMNode::ELEMENT_NODE) {
- auto_ptr<XMLObject> ret(XMLObjectBuilder::buildOneFromElement(static_cast<DOMElement*>(plaintext)));
- ret->releaseThisAndChildrenDOM();
+ // Import the tree into a new Document that we can bind to the unmarshalled object.
+ XercesJanitor<DOMDocument> newdoc(XMLToolingConfig::getConfig().getParser().newDocument());
+ DOMElement* treecopy = static_cast<DOMElement*>(newdoc->importNode(plaintext, true));
+ newdoc->appendChild(treecopy);
+ auto_ptr<XMLObject> ret(XMLObjectBuilder::buildOneFromElement(treecopy, true));
+ newdoc.release();
return ret.release();
}
}