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

Reply via email to