The node you've created > oNode = xmlNewNode(0, "AboutBoxText");
was not assigned to any document. Check LibXML2 tutorial for more details on constructing XML DOM tree using LibXML2 functions. Aleksey Martin Salo wrote:
Hello Mailinglist, I have a question about xmlSecEncCtxXmlEncrypt(). I have created the EncryptionContext and the Template nodes like in encyrpt2.c example. Then I have created the nodes (subtree) I want to decrypt. The return value of the encryption is -1. And the node is not encrypted. Why? Error Message: func=xmlSecEncCtxXmlEncrypt:file=..\src\xmlenc.c:line=366:obj=unknown:subj=node->doc != NULL: error=100:assertion: ;last error=0 (0x00000000);last error msg=The action was successfully. I want to create this xml file, with the differnce that the <Server> node should be replaced with an encryption section: <?xml version="1.0"?> <ApplicationSettings> <AboutBoxText>MyApp 1.0</AboutBoxText> <Server> <Url>www.abc.com</Url> <Password>TopSecret</Password> </Server> </ApplicationSettings> // Replace the encrypt_file() function in encrypt2.c with this fucntion: int encrypt_file(const char* xml_file, const char* key_file) { xmlNode *oNode=0, *oNodeFather=0, *oNodeToEncrypt=0, *oNodeTmpl=0; xmlDoc *oNewDoc=0; xmlNs *oNsSig=0, *oNsEnc=0, *oNsXsi=0; xmlSecEncCtx *oEncCtx=0; int retval=0; // Create new xml file oNewDoc = xmlNewDoc(BAD_CAST "1.0"); oNodeFather = xmlNewDocNode(oNewDoc, 0, BAD_CAST "ApplicationSettings", 0); xmlDocSetRootElement(oNewDoc, oNodeFather); // Add a plain node: oNode = xmlNewNode(0, "AboutBoxText"); xmlNodeSetContent(oNode, "MyApp"); xmlAddChild(oNodeFather, oNode); // Create nodes that should be encrypted: oNodeToEncrypt = xmlNewNode(0, "ToEncrypt"); oNode = xmlSecAddChild(oNodeToEncrypt, "Server", 0); xmlNodeSetContent(oNode, "www.abc.com"); oNode = xmlSecAddChild(oNodeToEncrypt, "Password", 0); xmlNodeSetContent(oNode, "TopSecret"); // Create encryption template nodes: oNodeTmpl = xmlSecTmplEncDataCreate(oNewDoc, xmlSecTransformDes3CbcId, 0, 0, 0, 0); xmlSecTmplEncDataEnsureCipherValue(oNodeTmpl); oNode = xmlSecTmplEncDataEnsureKeyInfo(oNodeTmpl, NULL); xmlSecTmplKeyInfoAddKeyName(oNode, NULL); // Create encryption context: oEncCtx = xmlSecEncCtxCreate(NULL); oEncCtx->encKey = xmlSecKeyReadBinaryFile(xmlSecKeyDataDesId, key_file); xmlSecKeySetName(oEncCtx->encKey, (const unsigned char *)key_file); // Do encryption: retval = xmlSecEncCtxXmlEncrypt(oEncCtx, oNodeTmpl, oNodeToEncrypt); xmlAddChild(oNodeFather, oNodeToEncrypt); // Print result: xmlDocDump(stdout, oNewDoc); // Cleanup: if(oEncCtx != NULL) xmlSecEncCtxDestroy(oEncCtx); if(oNodeTmpl != NULL) xmlFreeNode(oNodeTmpl); if(oNewDoc != NULL) xmlFreeDoc(oNewDoc); return 0; }
_______________________________________________ xmlsec mailing list xmlsec@aleksey.com http://www.aleksey.com/mailman/listinfo/xmlsec