[xmlsec] [xmlsec]Questions about template file

Aleksey Sanin aleksey@aleksey.com
Tue, 13 Aug 2002 07:54:01 -0700


--------------000704060307050405010406
Content-Type: text/plain; charset=EUC-KR
Content-Transfer-Encoding: 8bit



It looks like you have problems with OpenSSL library. Most common
problem on Windows is mixed runtime libraries:

http://www.openssl.org/support/faq.html#PROG2

If you will check this and everything is ok then I would suggest to add
ERR_print_errors_fp(stderr);
call to the end of your program to see what was the last OpenSSL error.


Aleksey

°­Á¤È£ wrote:

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



--------------000704060307050405010406
Content-Type: multipart/related;
 boundary="------------040106080507030303070906"


--------------040106080507030303070906
Content-Type: text/html; charset=EUC-KR
Content-Transfer-Encoding: 8bit

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title></title>
</head>
<body>
<br>
<br>
It looks like you have problems with OpenSSL library. Most common<br>
problem on Windows is mixed runtime libraries:&nbsp; 
<pre><a href="http://www.openssl.org/support/faq.html#PROG2">http://www.openssl.org/support/faq.html#PROG2</a></pre>
If you will check this and everything is ok then I would suggest to add<br>
&nbsp;&nbsp;&nbsp; ERR_print_errors_fp(stderr);<br>
call to the end of your program to see what was the last OpenSSL error.<br>
<br>
<br>
Aleksey<br>
<br>
°­Á¤È£ wrote:<br>
<blockquote type="cite"
 cite="mid4974.1029234227164.JavaMail.Administrator@smtp3">  
  <style>P {margin-top:2px;margin-bottom:2px;}</style>  
  <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&amp;userid=kjho80&amp;key=FMTNKHJVFZFNPQCVFLZGVT0"
 width="1" height="1" moz-do-not-send="true">
  <br>
  <br>
---------------------------------------<br>
  <font size="2">°¨¼º¼øµµ 100% ÇÁ¸®Ã§ äÆÃ<br>
  <a href="http://chat.freechal.com">http://chat.freechal.com/</a></font></blockquote>
<br>
</body>
</html>

--------------040106080507030303070906--

--------------000704060307050405010406--