<html>
<head>
<style>P {margin-top:2px;margin-bottom:2px;}</style>
</head>
<body>
<P>Please I&nbsp;want to know how sign and encryption without template file.</P>
<P>Example&nbsp;code in C:\xmlsec-0.0.7\docs\examples\enc1 doesn't work well. </P>
<P>And that example code&nbsp;encrypt&nbsp;for memory data. </P>
<P>so&nbsp;I&nbsp;edit code and it sucessfully compile without error, but it&nbsp;does not work well.</P>
<P>Follow code is reference&nbsp;in C:\xmlsec-0.0.7\apps\xmlsec.c and C:\xmlsec-0.0.7\docs\examples\enc1.</P>
<P>//////////////////////Execute Result/////////////////////////////////</P>
<P>Call Init()<BR>**********xmlSecEncCtxCreate()***********<BR>Call readKeys()<BR>startLoad : c:\test\Debug\des.key<BR>return value:0<BR>Call xmlSecParseFile()<BR>Call encrypt()<BR>********Start encrypt()*********<BR>********xmlSecEncryptUri()*********<BR>xmlSecEvpCipherFinal: evp cipher final failed<BR>xmlSecCipherTransformFlush: cipher final failed<BR>xmlSecCipherTransformFlush: next transform flush failed<BR>xmlSecCipherValueNodeRead: failed to finalize encryption<BR>xmlSecCipherDataNodeRead: failed to read CipherValue node<BR>xmlSecDecrypt: failed to get CipherData node content<BR>xmlSecEncryptedKeyNodeRead: node decrypt failed<BR>********xmlDocDumpMemoryEnc() tmpl *********<BR>xmlDocDumpFormatMemoryEnc:&nbsp; Null DOM tree document pointer.<BR>Error: failed to dump document to memory<BR>********xmlSecEncResultDestroy()*********<BR>********End encrypt()*********<BR>Call shutdown()<BR>Press any key to continue<BR>/////////////////////////////////////////////////////////////////////////</P>
<P>&nbsp;</P>
<P>Please advice to me what is wrong. </P>
<P>&nbsp;</P>
<P>#include &lt;stdlib.h&gt;<BR>#include &lt;string.h&gt;<BR>#include &lt;time.h&gt;<BR>#include &lt;openssl/evp.h&gt;<BR>#include &lt;openssl/rand.h&gt;<BR>#include &lt;openssl/err.h&gt;<BR>#include &lt;libxml/tree.h&gt;<BR>#include &lt;libxml/xmlmemory.h&gt;<BR>#include &lt;libxml/parser.h&gt;<BR>#ifndef XMLSEC_NO_XSLT<BR>#include &lt;libxslt/xslt.h&gt;<BR>#include &lt;libxslt/extensions.h&gt; <BR>#include &lt;libxslt/xsltInternals.h&gt;<BR>#include &lt;libxslt/xsltutils.h&gt;<BR>#include &lt;libexslt/exslt.h&gt;<BR>#endif /* XMLSEC_NO_XSLT */<BR>#include &lt;xmlsec/xmlsec.h&gt;<BR>#include &lt;xmlsec/xmltree.h&gt;<BR>#include &lt;xmlsec/keys.h&gt;<BR>#include &lt;xmlsec/keysmngr.h&gt;<BR>#include &lt;xmlsec/transforms.h&gt;<BR>#include &lt;xmlsec/xmldsig.h&gt;<BR>#include &lt;xmlsec/xmlenc.h&gt;<BR>#include &lt;xmlsec/debug.h&gt;</P>
<P>#define KEY_FILE "c:\\test\\Debug\\des.key"<BR>#define SRC_TYPE 1&nbsp;//0:xml 1:binary<BR>#define SRC_FILE "c:\\test\\Debug\\test.txt"<BR>//#define TMPL_FILE "c:\\test\\Debug\\enc-des3-test.tmpl"<BR>#define OUT_ENC "c:\\test\\Debug\\enc-test-des.xml"<BR>#define OUT_DEC "c:\\test\\Debug\\after-dec.txt"<BR>/**<BR>&nbsp;* Init/Shutdown<BR>&nbsp;*/<BR>int&nbsp; init(void);<BR>int createTmpl(void);<BR>void shutdown(void);<BR>int&nbsp; readKeys(char *file);<BR>&nbsp;<BR>char *data = NULL;<BR>int type=1; //1:encrypt 2:decrypt<BR>xmlSecEncCtxPtr encCtx = NULL;</P>
<P>int encrypt(void);<BR>int decrypt(xmlDocPtr doc);</P>
<P>/**<BR>&nbsp;* Global data<BR>&nbsp;*/<BR>xmlSecKeysMngrPtr keyMgr = NULL; <BR>xmlSecKeyPtr sessionKey = NULL;<BR>xmlNodePtr encData=NULL;</P>
<P>char *nodeId = NULL;<BR>char *nodeName = NULL;<BR>char *nodeNs = NULL;<BR>int repeats = 1;<BR>int printResult = 0;<BR>clock_t total_time = 0;<BR>char *global_pwd = NULL;</P>
<P>int main(int argc, char **argv) <BR>{<BR>&nbsp;&nbsp;&nbsp; xmlDocPtr doc = NULL;<BR>&nbsp;&nbsp;&nbsp; int ret;</P>
<P>&nbsp;printf("Call Init()\n");<BR>&nbsp;&nbsp;&nbsp; ret = init();<BR>&nbsp;&nbsp;&nbsp; if(ret &lt; 0) <BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;fprintf(stdout, "Error: init failed\n");<BR>&nbsp;&nbsp;goto done;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;printf("Call readKeys()\n");<BR>&nbsp;&nbsp;&nbsp; ret = readKeys(KEY_FILE);<BR>&nbsp;data = SRC_FILE;<BR>&nbsp;if(ret&lt;0)<BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stdout, "Error: read keys \n");<BR>&nbsp;&nbsp;goto done;<BR>&nbsp;}</P>
<P>&nbsp;printf("Call xmlSecParseFile()\n");<BR>&nbsp;//doc = xmlSecParseFile(TM);<BR>&nbsp;ret=createTmpl();<BR>&nbsp;<BR>&nbsp;if(ret&lt;0)<BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stdout, "Error: create Template Object\n");<BR>&nbsp;&nbsp;goto done;<BR>&nbsp;}</P>
<P>/*&nbsp;if(doc == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to read XML file\n");<BR>&nbsp;&nbsp;goto done;<BR>&nbsp;}*/<BR>&nbsp;<BR>&nbsp;switch(type) <BR>&nbsp;{<BR>&nbsp;&nbsp;case 1:<BR>&nbsp;&nbsp;&nbsp;printf("Call encrypt()\n");<BR>&nbsp;&nbsp;&nbsp;ret = encrypt();<BR>&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;case 2:<BR>&nbsp;&nbsp;&nbsp;printf("Call decrypt()\n");<BR>&nbsp;&nbsp;&nbsp;ret = decrypt(doc);<BR>&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;}<BR>&nbsp;if(ret &lt; 0) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: operation failed\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}</P>
<P>done:&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(doc != NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("Call xmlFreeDoc()\n");<BR>&nbsp;&nbsp;xmlFreeDoc(doc); <BR>&nbsp;}<BR>&nbsp;printf("Call shutdown()\n");<BR>&nbsp;shutdown();<BR>&nbsp;return 1;<BR>}<BR>int createTmpl(void)<BR>{<BR>&nbsp;xmlNodePtr encKey = NULL;<BR>&nbsp;xmlNodePtr cur;<BR>&nbsp;xmlDocPtr doc = NULL;<BR>&nbsp;<BR>&nbsp;encData = xmlSecEncDataCreate(NULL, NULL, NULL, NULL);<BR>&nbsp;if(encData == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: template creation failed\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;cur = xmlSecEncDataAddEncMethod(encData, xmlSecEncDes3Cbc);<BR>&nbsp;if(cur == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add Enc Method\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;cur = xmlSecEncDataAddCipherValue(encData);&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(cur == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add CipherValue\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;cur = xmlSecEncDataAddKeyInfo(encData);<BR>&nbsp;if(cur == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add KeyInfo\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;encKey = xmlSecKeyInfoAddEncryptedKey(cur, NULL, NULL, NULL);<BR>&nbsp;if(encKey == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add EncryptedKey\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; /**<BR>&nbsp;&nbsp;&nbsp;&nbsp; * Set the encryption method for encrypting the key<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;cur = xmlSecEncDataAddEncMethod(encKey, xmlSecEncDes3Cbc);<BR>&nbsp;if(cur == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add EncryptedKey Enc Method\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;cur = xmlSecEncDataAddCipherValue(encKey);&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(cur == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add EncryptedKey CipherValue\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;cur = xmlSecEncDataAddKeyInfo(encKey);<BR>&nbsp;if(cur == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add EncryptedKey KeyInfo\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}</P>
<P>&nbsp;cur = xmlSecKeyInfoAddKeyName(cur);<BR>&nbsp;if(cur == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add EncryptedKey KeyName\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>done:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; return(0);</P>
<P>}<BR>int init(void) <BR>{<BR>&nbsp;time_t t = 0;</P>
<P>&nbsp;OpenSSL_add_all_algorithms();<BR>&nbsp;ERR_load_crypto_strings(); <BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;time(&amp;t);<BR>&nbsp;while (RAND_status() != 1) <BR>&nbsp;{<BR>&nbsp;&nbsp;RAND_seed(&amp;t, sizeof(t));<BR>&nbsp;}<BR>&nbsp;xmlInitParser();<BR>&nbsp;LIBXML_TEST_VERSION</P>
<P>&nbsp;xmlSecInit();&nbsp;&nbsp;&nbsp; </P>
<P>&nbsp;keyMgr = xmlSecSimpleKeysMngrCreate();&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(keyMgr == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to create keys manager\n");<BR>&nbsp;&nbsp;return(-1);<BR>&nbsp;&nbsp;&nbsp; &nbsp;}</P>
<P>&nbsp;printf("**********xmlSecEncCtxCreate()***********\n");<BR>&nbsp;&nbsp;&nbsp; encCtx = xmlSecEncCtxCreate(keyMgr);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(encCtx == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr,"Error: failed to create Enc context\n");<BR>&nbsp;&nbsp;return(-1);<BR>&nbsp;}&nbsp;<BR>&nbsp;return(0);&nbsp;&nbsp;&nbsp; <BR>}</P>
<P>void shutdown(void) <BR>{<BR>&nbsp;&nbsp;&nbsp; /* destroy xmlsec objects */<BR>&nbsp;if(encCtx != NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;xmlSecEncCtxDestroy(encCtx);<BR>&nbsp;}&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(keyMgr != NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;xmlSecSimpleKeysMngrDestroy(keyMgr);<BR>&nbsp;}<BR>&nbsp;if(encData !=NULL)<BR>&nbsp;{<BR>&nbsp;&nbsp;xmlSecEncDataDestroy(encData);<BR>&nbsp;}<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;xmlSecShutdown();<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;xsltCleanupGlobals();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;xmlCleanupParser();</P>
<P>&nbsp;RAND_cleanup();<BR>&nbsp;ERR_clear_error();<BR>}</P>
<P>int readKeys(char *file) <BR>{<BR>&nbsp;int ret=0;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;printf("startLoad : %s\n",file);<BR>&nbsp;ret = xmlSecSimpleKeysMngrLoad(keyMgr,file, 0);<BR>&nbsp;printf("return value:%d\n",ret);<BR>&nbsp;if(ret &lt; 0) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to load keys from \"%s\".\n", file);<BR>&nbsp;&nbsp;return(-1);<BR>&nbsp;}<BR>&nbsp;return(0);<BR>}<BR>int encrypt(void) <BR>{<BR>&nbsp;xmlSecEncResultPtr encResult = NULL;<BR>&nbsp;xmlChar *result = NULL;&nbsp;<BR>&nbsp;xmlDocPtr doc = NULL;<BR>&nbsp;FILE *fp;<BR>&nbsp;int len;<BR>&nbsp;int ret;<BR>&nbsp;int res = -1;</P>
<P>&nbsp;printf("********Start encrypt()*********\n");</P>
<P>&nbsp;if(SRC_TYPE &amp;&amp; (data != NULL) &amp;&amp; encCtx !=NULL &amp;&amp; encData !=NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("********xmlSecEncryptUri()*********\n");<BR>&nbsp;&nbsp;ret = xmlSecEncryptUri(encCtx, NULL, NULL, encData, data, &amp;encResult);<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;if(ret &lt; 0) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;{<BR>&nbsp;&nbsp;&nbsp;fprintf(stderr,"Error: xmlSecEncryptUri() failed \n");<BR>&nbsp;&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;} </P>
<P>&nbsp;}<BR>&nbsp;else if(!SRC_TYPE &amp;&amp; (data != NULL)) <BR>&nbsp;{ <BR>&nbsp;&nbsp;xmlNodePtr cur;<BR>&nbsp;<BR>&nbsp;&nbsp;printf("********xmlParseFile()*********\n");<BR>&nbsp;&nbsp;doc = xmlParseFile(data);<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if (doc == NULL) <BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;fprintf(stderr, "Error: unable to parse file \"%s\"\n", data);<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;if(nodeId != NULL) <BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;printf("********xmlSecFindNodeById()*********\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;cur = xmlSecFindNodeById(encData, BAD_CAST nodeId);<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;else if(nodeName != NULL) <BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;{<BR>&nbsp;&nbsp;&nbsp;printf("********xmlSecFindNode()*********\n");<BR>&nbsp;&nbsp;&nbsp;cur = xmlSecFindNode(encData, BAD_CAST nodeName, BAD_CAST nodeNs);<BR>&nbsp;&nbsp;} <BR>&nbsp;&nbsp;else <BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;printf("********xmlDocGetRootElement()*********\n");<BR>&nbsp;&nbsp;&nbsp;cur = encData;<BR>&nbsp;&nbsp;}<BR>&nbsp;<BR>&nbsp;&nbsp;if(cur == NULL) <BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;fprintf(stderr,"Error: empty document for file \"%s\" or unable to find node\n", data);<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;printf("********xmlSecEncryptXmlNode()*********\n");<BR>&nbsp;&nbsp;ret = xmlSecEncryptXmlNode(encCtx, NULL, sessionKey,encData, cur, &amp;encResult);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;if(ret &lt; 0) <BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;fprintf(stderr,"Error: xmlSecEncryptXmlNode() failed \n");<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;} <BR>&nbsp;}<BR>&nbsp;else <BR>&nbsp;&nbsp;printf("Error: haha\n");<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;if((encResult != NULL) &amp;&amp; (encResult-&gt;replaced) &amp;&amp; (doc != NULL)) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("********xmlDocDumpMemoryEnc() doc *********\n");&nbsp;&nbsp;<BR>&nbsp;&nbsp;xmlDocDumpMemoryEnc(doc, &amp;result, &amp;len, NULL);&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;printf("********xmlDocDumpMemoryEnc() tmpl *********\n");<BR>&nbsp;&nbsp;xmlDocDumpMemoryEnc(encData-&gt;doc, &amp;result, &amp;len, NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;if(result == NULL) {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"Error: failed to dump document to memory\n");<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; goto done;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;if((fp=fopen(OUT_ENC,"w"))==NULL)<BR>&nbsp;&nbsp;printf("Failure to file open\n");<BR>&nbsp;else<BR>&nbsp;&nbsp;fwrite(result, len, 1, fp);<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>done:&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(doc != NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("********xmlFreeDoc()*********\n");<BR>&nbsp;&nbsp;xmlFreeDoc(doc);<BR>&nbsp;}<BR>&nbsp;if(result != NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("********xmlFree()*********\n");<BR>&nbsp;&nbsp;xmlFree(result);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;if(encResult != NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("********xmlSecEncResultDestroy()*********\n");<BR>&nbsp;&nbsp;xmlSecEncResultDestroy(encResult);<BR>&nbsp;}</P>
<P>&nbsp;printf("********End encrypt()*********\n");<BR>&nbsp;return 1;<BR>}</P>
<P>int decrypt(xmlDocPtr doc) <BR>{&nbsp;&nbsp;&nbsp; <BR>&nbsp;xmlSecEncResultPtr encResult = NULL;<BR>&nbsp;&nbsp;&nbsp; xmlNodePtr cur;<BR>&nbsp;FILE *fp;<BR>&nbsp;&nbsp;&nbsp; int ret;</P>
<P>&nbsp;&nbsp;&nbsp; printf("********Start decrypt()*********\n");</P>
<P>&nbsp;printf("********xmlSecFindNode()*********\n");<BR>&nbsp;&nbsp;&nbsp; cur = xmlSecFindNode(encData, BAD_CAST "EncryptedData", xmlSecEncNs);</P>
<P>&nbsp;&nbsp;&nbsp; if(cur == NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"Error: unable to find EncryptedData node\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;printf("********xmlSecDecrypt()*********\n");<BR>&nbsp;&nbsp;&nbsp; ret = xmlSecDecrypt(encCtx, NULL, NULL, cur, &amp;encResult);</P>
<P>&nbsp;&nbsp;&nbsp; if(ret &lt; 0) <BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"Error: xmlSecDecrypt() failed \n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; } </P>
<P>&nbsp;if((encResult != NULL) &amp;&amp; encResult-&gt;replaced &amp;&amp; (encResult-&gt;buffer != NULL)) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("********xmlDocDump()*********\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp; ret = xmlDocDump(stdout, doc);&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; } <BR>&nbsp;else if((encResult != NULL) &amp;&amp; !encResult-&gt;replaced) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("****fwrite(xmlBufferContent())****\n");</P>
<P>&nbsp;&nbsp;if((fp=fopen(OUT_DEC,"w"))==NULL)<BR>&nbsp;&nbsp;&nbsp;printf("Failure to file open\n");<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;ret = fwrite(xmlBufferContent(encResult-&gt;buffer), xmlBufferLength(encResult-&gt;buffer),1, fp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;} <BR>&nbsp;else <BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"Error: bad results \n");<BR>&nbsp;&nbsp;&nbsp;&nbsp; goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}</P>
<P>&nbsp;&nbsp;&nbsp; if(ret &lt; 0) <BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"Error: failed to print out the result \n");<BR>&nbsp;&nbsp;&nbsp;&nbsp; goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp; <BR>done:&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; if(encResult != NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("********xmlSecEncResultDestroy()*********\n");<BR>&nbsp;&nbsp;xmlSecEncResultDestroy(encResult);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;printf("********End decrypt()*********\n");<BR>&nbsp;&nbsp;&nbsp; return 1;<BR>}<BR></P>
<img src='http://mail.freechal.com/messagecenter/email/RcvCheck.asp?uid=20765161&userid=kjho80&key=FMTNKHJVFZFNPQCVFLZGVT0' width=1 height=1><br><br>---------------------------------------<br><font size=2>°¨¼º¼øµµ 100% ÇÁ¸®Ã§ Ã¤ÆÃ<br><a href='http://chat.freechal.com'>http://chat.freechal.com/</a></font></body>
</html>