[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:
<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>
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 want to know how sign and encryption without template file.</p>
<p>Example code in C:\xmlsec-0.0.7\docs\examples\enc1 doesn't work well.
</p>
<p>And that example code encrypt for memory data. </p>
<p>so I edit code and it sucessfully compile without error, but it does
not work well.</p>
<p>Follow code is reference 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: 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> </p>
<p>Please advice to me what is wrong. </p>
<p> </p>
<p>#include <stdlib.h><br>
#include <string.h><br>
#include <time.h><br>
#include <openssl/evp.h><br>
#include <openssl/rand.h><br>
#include <openssl/err.h><br>
#include <libxml/tree.h><br>
#include <libxml/xmlmemory.h><br>
#include <libxml/parser.h><br>
#ifndef XMLSEC_NO_XSLT<br>
#include <libxslt/xslt.h><br>
#include <libxslt/extensions.h> <br>
#include <libxslt/xsltInternals.h><br>
#include <libxslt/xsltutils.h><br>
#include <libexslt/exslt.h><br>
#endif /* XMLSEC_NO_XSLT */<br>
#include <xmlsec/xmlsec.h><br>
#include <xmlsec/xmltree.h><br>
#include <xmlsec/keys.h><br>
#include <xmlsec/keysmngr.h><br>
#include <xmlsec/transforms.h><br>
#include <xmlsec/xmldsig.h><br>
#include <xmlsec/xmlenc.h><br>
#include <xmlsec/debug.h></p>
<p>#define KEY_FILE "c:\\test\\Debug\\des.key"<br>
#define SRC_TYPE 1 //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>
* Init/Shutdown<br>
*/<br>
int init(void);<br>
int createTmpl(void);<br>
void shutdown(void);<br>
int readKeys(char *file);<br>
<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>
* Global data<br>
*/<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>
xmlDocPtr doc = NULL;<br>
int ret;</p>
<p> printf("Call Init()\n");<br>
ret = init();<br>
if(ret < 0) <br>
{<br>
fprintf(stdout, "Error: init failed\n");<br>
goto done;<br>
}<br>
printf("Call readKeys()\n");<br>
ret = readKeys(KEY_FILE);<br>
data = SRC_FILE;<br>
if(ret<0)<br>
{<br>
fprintf(stdout, "Error: read keys \n");<br>
goto done;<br>
}</p>
<p> printf("Call xmlSecParseFile()\n");<br>
//doc = xmlSecParseFile(TM);<br>
ret=createTmpl();<br>
<br>
if(ret<0)<br>
{<br>
fprintf(stdout, "Error: create Template Object\n");<br>
goto done;<br>
}</p>
<p>/* if(doc == NULL) <br>
{<br>
fprintf(stderr, "Error: failed to read XML file\n");<br>
goto done;<br>
}*/<br>
<br>
switch(type) <br>
{<br>
case 1:<br>
printf("Call encrypt()\n");<br>
ret = encrypt();<br>
break;<br>
case 2:<br>
printf("Call decrypt()\n");<br>
ret = decrypt(doc);<br>
break;<br>
}<br>
if(ret < 0) <br>
{<br>
fprintf(stderr, "Error: operation failed\n");<br>
goto done; <br>
}</p>
<p>done: <br>
if(doc != NULL) <br>
{<br>
printf("Call xmlFreeDoc()\n");<br>
xmlFreeDoc(doc); <br>
}<br>
printf("Call shutdown()\n");<br>
shutdown();<br>
return 1;<br>
}<br>
int createTmpl(void)<br>
{<br>
xmlNodePtr encKey = NULL;<br>
xmlNodePtr cur;<br>
xmlDocPtr doc = NULL;<br>
<br>
encData = xmlSecEncDataCreate(NULL, NULL, NULL, NULL);<br>
if(encData == NULL) <br>
{<br>
fprintf(stderr, "Error: template creation failed\n");<br>
goto done; <br>
}<br>
<br>
cur = xmlSecEncDataAddEncMethod(encData, xmlSecEncDes3Cbc);<br>
if(cur == NULL) <br>
{<br>
fprintf(stderr, "Error: failed to add Enc Method\n");<br>
goto done; <br>
}<br>
<br>
cur = xmlSecEncDataAddCipherValue(encData); <br>
if(cur == NULL) <br>
{<br>
fprintf(stderr, "Error: failed to add CipherValue\n");<br>
goto done; <br>
}<br>
cur = xmlSecEncDataAddKeyInfo(encData);<br>
if(cur == NULL) <br>
{<br>
fprintf(stderr, "Error: failed to add KeyInfo\n");<br>
goto done; <br>
}<br>
<br>
encKey = xmlSecKeyInfoAddEncryptedKey(cur, NULL, NULL, NULL);<br>
if(encKey == NULL) <br>
{<br>
fprintf(stderr, "Error: failed to add EncryptedKey\n");<br>
goto done; <br>
}<br>
<br>
/**<br>
* Set the encryption method for encrypting the key<br>
*/<br>
cur = xmlSecEncDataAddEncMethod(encKey, xmlSecEncDes3Cbc);<br>
if(cur == NULL) <br>
{<br>
fprintf(stderr, "Error: failed to add EncryptedKey Enc Method\n");<br>
goto done; <br>
}<br>
cur = xmlSecEncDataAddCipherValue(encKey); <br>
if(cur == NULL) <br>
{<br>
fprintf(stderr, "Error: failed to add EncryptedKey CipherValue\n");<br>
goto done; <br>
}<br>
<br>
cur = xmlSecEncDataAddKeyInfo(encKey);<br>
if(cur == NULL) <br>
{<br>
fprintf(stderr, "Error: failed to add EncryptedKey KeyInfo\n");<br>
goto done; <br>
}</p>
<p> cur = xmlSecKeyInfoAddKeyName(cur);<br>
if(cur == NULL) <br>
{<br>
fprintf(stderr, "Error: failed to add EncryptedKey KeyName\n");<br>
goto done; <br>
}<br>
done: <br>
<br>
return(0);</p>
<p>}<br>
int init(void) <br>
{<br>
time_t t = 0;</p>
<p> OpenSSL_add_all_algorithms();<br>
ERR_load_crypto_strings(); <br>
<br>
time(&t);<br>
while (RAND_status() != 1) <br>
{<br>
RAND_seed(&t, sizeof(t));<br>
}<br>
xmlInitParser();<br>
LIBXML_TEST_VERSION</p>
<p> xmlSecInit(); </p>
<p> keyMgr = xmlSecSimpleKeysMngrCreate(); <br>
if(keyMgr == NULL) <br>
{<br>
fprintf(stderr, "Error: failed to create keys manager\n");<br>
return(-1);<br>
}</p>
<p> printf("**********xmlSecEncCtxCreate()***********\n");<br>
encCtx = xmlSecEncCtxCreate(keyMgr);<br>
<br>
if(encCtx == NULL) <br>
{<br>
fprintf(stderr,"Error: failed to create Enc context\n");<br>
return(-1);<br>
} <br>
return(0); <br>
}</p>
<p>void shutdown(void) <br>
{<br>
/* destroy xmlsec objects */<br>
if(encCtx != NULL) <br>
{<br>
xmlSecEncCtxDestroy(encCtx);<br>
} <br>
if(keyMgr != NULL) <br>
{<br>
xmlSecSimpleKeysMngrDestroy(keyMgr);<br>
}<br>
if(encData !=NULL)<br>
{<br>
xmlSecEncDataDestroy(encData);<br>
}<br>
<br>
xmlSecShutdown();<br>
<br>
xsltCleanupGlobals(); <br>
xmlCleanupParser();</p>
<p> RAND_cleanup();<br>
ERR_clear_error();<br>
}</p>
<p>int readKeys(char *file) <br>
{<br>
int ret=0;<br>
<br>
printf("startLoad : %s\n",file);<br>
ret = xmlSecSimpleKeysMngrLoad(keyMgr,file, 0);<br>
printf("return value:%d\n",ret);<br>
if(ret < 0) <br>
{<br>
fprintf(stderr, "Error: failed to load keys from \"%s\".\n", file);<br>
return(-1);<br>
}<br>
return(0);<br>
}<br>
int encrypt(void) <br>
{<br>
xmlSecEncResultPtr encResult = NULL;<br>
xmlChar *result = NULL; <br>
xmlDocPtr doc = NULL;<br>
FILE *fp;<br>
int len;<br>
int ret;<br>
int res = -1;</p>
<p> printf("********Start encrypt()*********\n");</p>
<p> if(SRC_TYPE && (data != NULL) && encCtx !=NULL &&
encData !=NULL) <br>
{<br>
printf("********xmlSecEncryptUri()*********\n");<br>
ret = xmlSecEncryptUri(encCtx, NULL, NULL, encData, data, &encResult);<br>
<br>
if(ret < 0) <br>
{<br>
fprintf(stderr,"Error: xmlSecEncryptUri() failed \n");<br>
goto done; <br>
} </p>
<p> }<br>
else if(!SRC_TYPE && (data != NULL)) <br>
{ <br>
xmlNodePtr cur;<br>
<br>
printf("********xmlParseFile()*********\n");<br>
doc = xmlParseFile(data);<br>
<br>
if (doc == NULL) <br>
{<br>
fprintf(stderr, "Error: unable to parse file \"%s\"\n", data);<br>
goto done; <br>
}</p>
<p> if(nodeId != NULL) <br>
{<br>
printf("********xmlSecFindNodeById()*********\n");<br>
cur = xmlSecFindNodeById(encData, BAD_CAST nodeId);<br>
} <br>
else if(nodeName != NULL) <br>
{<br>
printf("********xmlSecFindNode()*********\n");<br>
cur = xmlSecFindNode(encData, BAD_CAST nodeName, BAD_CAST nodeNs);<br>
} <br>
else <br>
{<br>
printf("********xmlDocGetRootElement()*********\n");<br>
cur = encData;<br>
}<br>
<br>
if(cur == NULL) <br>
{<br>
fprintf(stderr,"Error: empty document for file \"%s\" or unable
to find node\n", data);<br>
goto done; <br>
}</p>
<p> printf("********xmlSecEncryptXmlNode()*********\n");<br>
ret = xmlSecEncryptXmlNode(encCtx, NULL, sessionKey,encData, cur, &encResult); <br>
<br>
if(ret < 0) <br>
{<br>
fprintf(stderr,"Error: xmlSecEncryptXmlNode() failed \n");<br>
goto done; <br>
} <br>
}<br>
else <br>
printf("Error: haha\n");<br>
<br>
if((encResult != NULL) && (encResult->replaced) && (doc
!= NULL)) <br>
{<br>
printf("********xmlDocDumpMemoryEnc() doc *********\n"); <br>
xmlDocDumpMemoryEnc(doc, &result, &len, NULL); <br>
}<br>
else <br>
{<br>
printf("********xmlDocDumpMemoryEnc() tmpl *********\n");<br>
xmlDocDumpMemoryEnc(encData->doc, &result, &len, NULL);<br>
}<br>
if(result == NULL) {<br>
fprintf(stderr,"Error: failed to dump document to memory\n");<br>
goto done;<br>
}<br>
if((fp=fopen(OUT_ENC,"w"))==NULL)<br>
printf("Failure to file open\n");<br>
else<br>
fwrite(result, len, 1, fp);<br>
<br>
done: <br>
if(doc != NULL) <br>
{<br>
printf("********xmlFreeDoc()*********\n");<br>
xmlFreeDoc(doc);<br>
}<br>
if(result != NULL) <br>
{<br>
printf("********xmlFree()*********\n");<br>
xmlFree(result); <br>
}<br>
if(encResult != NULL) <br>
{<br>
printf("********xmlSecEncResultDestroy()*********\n");<br>
xmlSecEncResultDestroy(encResult);<br>
}</p>
<p> printf("********End encrypt()*********\n");<br>
return 1;<br>
}</p>
<p>int decrypt(xmlDocPtr doc) <br>
{ <br>
xmlSecEncResultPtr encResult = NULL;<br>
xmlNodePtr cur;<br>
FILE *fp;<br>
int ret;</p>
<p> printf("********Start decrypt()*********\n");</p>
<p> printf("********xmlSecFindNode()*********\n");<br>
cur = xmlSecFindNode(encData, BAD_CAST "EncryptedData", xmlSecEncNs);</p>
<p> if(cur == NULL) <br>
{<br>
fprintf(stderr,"Error: unable to find EncryptedData node\n");<br>
goto done; <br>
}</p>
<p> printf("********xmlSecDecrypt()*********\n");<br>
ret = xmlSecDecrypt(encCtx, NULL, NULL, cur, &encResult);</p>
<p> if(ret < 0) <br>
{<br>
fprintf(stderr,"Error: xmlSecDecrypt() failed \n");<br>
goto done; <br>
} </p>
<p> if((encResult != NULL) && encResult->replaced &&
(encResult->buffer != NULL)) <br>
{<br>
printf("********xmlDocDump()*********\n");<br>
ret = xmlDocDump(stdout, doc); <br>
} <br>
else if((encResult != NULL) && !encResult->replaced) <br>
{<br>
printf("****fwrite(xmlBufferContent())****\n");</p>
<p> if((fp=fopen(OUT_DEC,"w"))==NULL)<br>
printf("Failure to file open\n");<br>
else<br>
ret = fwrite(xmlBufferContent(encResult->buffer), xmlBufferLength(encResult->buffer),1,
fp); <br>
} <br>
else <br>
{<br>
fprintf(stderr,"Error: bad results \n");<br>
goto done; <br>
}</p>
<p> if(ret < 0) <br>
{<br>
fprintf(stderr,"Error: failed to print out the result \n");<br>
goto done; <br>
}<br>
<br>
<br>
done: <br>
if(encResult != NULL) <br>
{<br>
printf("********xmlSecEncResultDestroy()*********\n");<br>
xmlSecEncResultDestroy(encResult);<br>
}<br>
printf("********End decrypt()*********\n");<br>
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" 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--