[xmlsec] [xmlsec]Questions about template file
°Á¤È£
°Á¤È£
Tue, 13 Aug 2002 19:23:47 +0900 (GMT+09:00)
Mime Prologue
--5058.1029234227148FreechalMail
Content-Type: text/plain; charset=EUC-KR
Content-Transfer-Encoding: 8bit
please i want to know how sign and encryption without template file.
example code in c:\xmlsec-0.0.7\docs\examples\enc1 doesn't work well.
and that example code encrypt for memory data.
so i edit code and it sucessfully compile without error, but it does not work well.
follow code is reference in 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;
}
---------------------------------------
½Å°³³ä Á¾ÇÕ ¼îÇθô, Buychal
http://www.buychal.com
--5058.1029234227148FreechalMail
Content-Type: text/html; charset=EUC-KR
Content-Transfer-Encoding: quoted-printable
<html>
<head>
<style>P {margin-top:2px;margin-bottom:2px;}</style>
</head>
<body>
<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 wel=
l. </P>
<P>And that example code encrypt for memory data. </P>
<P>so I edit code and it sucessfully compile without error, but i=
t does not work well.</P>
<P>Follow code is reference in C:\xmlsec-0.0.7\apps\xmlsec.c and C:\xm=
lsec-0.0.7\docs\examples\enc1.</P>
<P>//////////////////////Execute Result/////////////////////////////////</P=
>
<P>Call Init()<BR>**********xmlSecEncCtxCreate()***********<BR>Call readKey=
s()<BR>startLoad : c:\test\Debug\des.key<BR>return value:0<BR>Call xmlSecPa=
rseFile()<BR>Call encrypt()<BR>********Start encrypt()*********<BR>********=
xmlSecEncryptUri()*********<BR>xmlSecEvpCipherFinal: evp cipher final faile=
d<BR>xmlSecCipherTransformFlush: cipher final failed<BR>xmlSecCipherTransfo=
rmFlush: next transform flush failed<BR>xmlSecCipherValueNodeRead: failed t=
o finalize encryption<BR>xmlSecCipherDataNodeRead: failed to read CipherVal=
ue node<BR>xmlSecDecrypt: failed to get CipherData node content<BR>xmlSecEn=
cryptedKeyNodeRead: node decrypt failed<BR>********xmlDocDumpMemoryEnc() tm=
pl *********<BR>xmlDocDumpFormatMemoryEnc: Null DOM tree document poi=
nter.<BR>Error: failed to dump document to memory<BR>********xmlSecEncResul=
tDestroy()*********<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 <t=
ime.h><BR>#include <openssl/evp.h><BR>#include <openssl/rand.h&=
gt;<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 <l=
ibxslt/extensions.h> <BR>#include <libxslt/xsltInternals.h><BR>#in=
clude <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 &=
lt;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>//#defin=
e TMPL_FILE "c:\\test\\Debug\\enc-des3-test.tmpl"<BR>#define OUT_ENC "c:\\t=
est\\Debug\\enc-test-des.xml"<BR>#define OUT_DEC "c:\\test\\Debug\\after-de=
c.txt"<BR>/**<BR> * Init/Shutdown<BR> */<BR>int init(void);=
<BR>int createTmpl(void);<BR>void shutdown(void);<BR>int readKeys(cha=
r *file);<BR> <BR>char *data =3D NULL;<BR>int type=3D1; //1:encrypt 2:=
decrypt<BR>xmlSecEncCtxPtr encCtx =3D NULL;</P>
<P>int encrypt(void);<BR>int decrypt(xmlDocPtr doc);</P>
<P>/**<BR> * Global data<BR> */<BR>xmlSecKeysMngrPtr keyMgr =3D N=
ULL; <BR>xmlSecKeyPtr sessionKey =3D NULL;<BR>xmlNodePtr encData=3DNULL;</P=
>
<P>char *nodeId =3D NULL;<BR>char *nodeName =3D NULL;<BR>char *nodeNs =3D N=
ULL;<BR>int repeats =3D 1;<BR>int printResult =3D 0;<BR>clock_t total_time =
=3D 0;<BR>char *global_pwd =3D NULL;</P>
<P>int main(int argc, char **argv) <BR>{<BR> xmlDocPtr do=
c =3D NULL;<BR> int ret;</P>
<P> printf("Call Init()\n");<BR> ret =3D init();<BR>=
if(ret < 0) <BR> {<BR> f=
printf(stdout, "Error: init failed\n");<BR> goto done;<BR> =
}<BR> printf("Call readKeys()\n");<BR> =
ret =3D readKeys(KEY_FILE);<BR> data =3D SRC_FILE;<BR> if(ret<=
0)<BR> {<BR> fprintf(stdout, "Error: read keys \n");<BR>&nb=
sp; goto done;<BR> }</P>
<P> printf("Call xmlSecParseFile()\n");<BR> //doc =3D xmlSecParse=
File(TM);<BR> ret=3DcreateTmpl();<BR> <BR> if(ret<0)<BR>&=
nbsp;{<BR> fprintf(stdout, "Error: create Template Object\n");<B=
R> goto done;<BR> }</P>
<P>/* if(doc =3D=3D 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 =3D encry=
pt();<BR> break;<BR> case 2:<BR> &nb=
sp;printf("Call decrypt()\n");<BR> ret =3D decrypt(doc);<B=
R> break;<BR> }<BR> if(ret < 0) <BR> {<B=
R> fprintf(stderr, "Error: operation failed\n");<BR> =
goto done; <BR> }</P>
<P>done: <BR> if(doc !=3D NULL) <BR> {<BR> =
; printf("Call xmlFreeDoc()\n");<BR> xmlFreeDoc(doc); <BR>&=
nbsp;}<BR> printf("Call shutdown()\n");<BR> shutdown();<BR> =
return 1;<BR>}<BR>int createTmpl(void)<BR>{<BR> xmlNodePtr encKey =3D =
NULL;<BR> xmlNodePtr cur;<BR> xmlDocPtr doc =3D NULL;<BR> <B=
R> encData =3D xmlSecEncDataCreate(NULL, NULL, NULL, NULL);<BR> i=
f(encData =3D=3D NULL) <BR> {<BR> fprintf(stderr, "Error: t=
emplate creation failed\n");<BR> goto done; <B=
R> }<BR> <BR> cur =3D xmlSecEncDataAddEncMethod(encData, xml=
SecEncDes3Cbc);<BR> if(cur =3D=3D NULL) <BR> {<BR> fpr=
intf(stderr, "Error: failed to add Enc Method\n");<BR> goto done=
; <BR> }<BR> <BR> cur =3D xmlSecEncDataAdd=
CipherValue(encData); <BR> if(cur =3D=3D NULL) <BR>&=
nbsp;{<BR> fprintf(stderr, "Error: failed to add CipherValue\n")=
;<BR> goto done; <BR> }<BR> cur =3D =
xmlSecEncDataAddKeyInfo(encData);<BR> if(cur =3D=3D NULL) <BR> {<=
BR> fprintf(stderr, "Error: failed to add KeyInfo\n");<BR> =
goto done; <BR> }<BR> <BR> encKey =
=3D xmlSecKeyInfoAddEncryptedKey(cur, NULL, NULL, NULL);<BR> if(encKey=
=3D=3D NULL) <BR> {<BR> fprintf(stderr, "Error: failed to =
add EncryptedKey\n");<BR> goto done; <BR> =
;}<BR> <BR> /**<BR> &n=
bsp; * Set the encryption method for encrypting the key<BR> &nbs=
p; */<BR> cur =3D xmlSecEncDataAddEncMethod(encKey, xmlSecEncDes=
3Cbc);<BR> if(cur =3D=3D NULL) <BR> {<BR> fprintf(stde=
rr, "Error: failed to add EncryptedKey Enc Method\n");<BR> goto =
done; <BR> }<BR> cur =3D xmlSecEncDataAddCipher=
Value(encKey); <BR> if(cur =3D=3D NULL) <BR> {<=
BR> fprintf(stderr, "Error: failed to add EncryptedKey CipherVal=
ue\n");<BR> goto done; <BR> }<BR> <B=
R> cur =3D xmlSecEncDataAddKeyInfo(encKey);<BR> if(cur =3D=3D NUL=
L) <BR> {<BR> fprintf(stderr, "Error: failed to add Encrypt=
edKey KeyInfo\n");<BR> goto done; <BR> }<=
/P>
<P> cur =3D xmlSecKeyInfoAddKeyName(cur);<BR> if(cur =3D=3D NULL)=
<BR> {<BR> fprintf(stderr, "Error: failed to add Encrypted=
Key KeyName\n");<BR> goto done; <BR> }<BR=
>done: <BR> <BR=
> return(0);</P>
<P>}<BR>int init(void) <BR>{<BR> time_t t =3D 0;</P>
<P> OpenSSL_add_all_algorithms();<BR> ERR_load_crypto_strings(); =
<BR> <BR> time(&t);<BR> while (RAND_status(=
) !=3D 1) <BR> {<BR> RAND_seed(&t, sizeof(t));<BR> =
;}<BR> xmlInitParser();<BR> LIBXML_TEST_VERSION</P>
<P> xmlSecInit(); </P>
<P> keyMgr =3D xmlSecSimpleKeysMngrCreate(); <BR>&nb=
sp;if(keyMgr =3D=3D NULL) <BR> {<BR> fprintf(stderr, "Error=
: failed to create keys manager\n");<BR> return(-1);<BR> &n=
bsp; }</P>
<P> printf("**********xmlSecEncCtxCreate()***********\n");<BR> &n=
bsp; encCtx =3D xmlSecEncCtxCreate(keyMgr);<BR> &nbs=
p; <BR> if(encCtx =3D=3D NULL) <BR> {<BR> =
fprintf(stderr,"Error: failed to create Enc context\n");<BR> &nb=
sp;return(-1);<BR> } <BR> return(0); <BR>}=
</P>
<P>void shutdown(void) <BR>{<BR> /* destroy xmlsec object=
s */<BR> if(encCtx !=3D NULL) <BR> {<BR> xmlSecEncCtxD=
estroy(encCtx);<BR> } <BR> if(keyMgr !=3D NULL)=
<BR> {<BR> xmlSecSimpleKeysMngrDestroy(keyMgr);<BR> }=
<BR> if(encData !=3DNULL)<BR> {<BR> xmlSecEncDataDestr=
oy(encData);<BR> }<BR> <BR> xmlSecShutdown();<B=
R> <BR> xsltCleanupGlobals();  =
; <BR> xmlCleanupParser();</=
P>
<P> RAND_cleanup();<BR> ERR_clear_error();<BR>}</P>
<P>int readKeys(char *file) <BR>{<BR> int ret=3D0;<BR> &nbs=
p; <BR> printf("startLoad : %s\n",file);<BR> ret =3D xmlSecSimple=
KeysMngrLoad(keyMgr,file, 0);<BR> printf("return value:%d\n",ret);<BR>=
if(ret < 0) <BR> {<BR> fprintf(stderr, "Error: fai=
led to load keys from \"%s\".\n", file);<BR> return(-1);<BR>&nbs=
p;}<BR> return(0);<BR>}<BR>int encrypt(void) <BR>{<BR> xmlSecEncR=
esultPtr encResult =3D NULL;<BR> xmlChar *result =3D NULL; <BR>&n=
bsp;xmlDocPtr doc =3D NULL;<BR> FILE *fp;<BR> int len;<BR> i=
nt ret;<BR> int res =3D -1;</P>
<P> printf("********Start encrypt()*********\n");</P>
<P> if(SRC_TYPE && (data !=3D NULL) && encCtx !=3DNULL=
&& encData !=3DNULL) <BR> {<BR> printf("********xm=
lSecEncryptUri()*********\n");<BR> ret =3D xmlSecEncryptUri(encC=
tx, NULL, NULL, encData, data, &encResult);<BR> <BR> &n=
bsp; if(ret < 0) <BR> &nb=
sp; {<BR> fprintf(stderr,"Error: x=
mlSecEncryptUri() failed \n");<BR> goto done; &=
nbsp; <BR> } </P>
<P> }<BR> else if(!SRC_TYPE && (data !=3D NULL)) <BR>&nbs=
p;{ <BR> xmlNodePtr cur;<BR> <BR> printf("******=
**xmlParseFile()*********\n");<BR> doc =3D xmlParseFile(data);<B=
R> <BR> if (doc =3D=3D NULL) <BR> {<BR>&nb=
sp; fprintf(stderr, "Error: unable to parse f=
ile \"%s\"\n", data);<BR> goto done;&nb=
sp; <BR> }</P>
<P> if(nodeId !=3D NULL) <BR> {<BR> =
printf("********xmlSecFindNodeById()*********\n");<BR> &nb=
sp; cur =3D xmlSecFindNodeById(encData, BAD_CAST nodeId);<BR>&n=
bsp; } <BR> else if(n=
odeName !=3D NULL) <BR> {<BR> &nbs=
p;printf("********xmlSecFindNode()*********\n");<BR> cur =
=3D xmlSecFindNode(encData, BAD_CAST nodeName, BAD_CAST nodeNs);<BR> &=
nbsp;} <BR> else <BR> {<BR> printf("=
********xmlDocGetRootElement()*********\n");<BR> cur =3D e=
ncData;<BR> }<BR> <BR> if(cur =3D=3D NULL) <BR>&=
nbsp; {<BR> fpr=
intf(stderr,"Error: empty document for file \"%s\" or unable to find node\n=
", data);<BR> goto done; &nb=
sp; <BR> }</P>
<P> printf("********xmlSecEncryptXmlNode()*********\n");<BR>&nbs=
p; ret =3D xmlSecEncryptXmlNode(encCtx, NULL, sessionKey,encData, cur,=
&encResult); <BR> <BR>&=
nbsp; if(ret < 0) <BR> {<BR> &nb=
sp; fprintf(stderr,"Error: xmlSecEncryptXmlNode() f=
ailed \n");<BR> goto done; &=
nbsp; <BR> } <BR> }<BR> else <BR> printf("E=
rror: haha\n");<BR> <BR> if((encResult !=3D NULL) &a=
mp;& (encResult->replaced) && (doc !=3D NULL)) <BR> {<B=
R> printf("********xmlDocDumpMemoryEnc() doc *********\n"); =
; <BR> xmlDocDumpMemoryEnc(doc, &result, &len, NULL=
); <BR> }<BR> &n=
bsp; else <BR> &=
nbsp; {<BR> printf("********xmlDocDumpMemoryEnc() tmpl *********=
\n");<BR> xmlDocDumpMemoryEnc(encData->doc, &result, &=
;len, NULL);<BR> }<BR> if(re=
sult =3D=3D NULL) {<BR> fprintf(=
stderr,"Error: failed to dump document to memory\n");<BR> =
goto done;<BR>  =
; }<BR> if((fp=3Dfopen(OUT_ENC,"w"))=3D=3DNULL)<BR> p=
rintf("Failure to file open\n");<BR> else<BR> fwrite(result=
, len, 1, fp);<BR> <BR>done: <BR>=
if(doc !=3D NULL) <BR> {<BR> printf("********xmlFreeD=
oc()*********\n");<BR> xmlFreeDoc(doc);<BR> }<BR> if(r=
esult !=3D NULL) <BR> {<BR> printf("********xmlFree()******=
***\n");<BR> xmlFree(result);  =
; <BR> }<BR> if(encResult !=3D NULL) <BR> {<BR> &=
nbsp;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> xmlSecEncRe=
sultPtr encResult =3D NULL;<BR> xmlNodePtr cur;<BR> =
FILE *fp;<BR> int ret;</P>
<P> printf("********Start decrypt()*********\n");</P>
<P> printf("********xmlSecFindNode()*********\n");<BR> &nbs=
p; cur =3D xmlSecFindNode(encData, BAD_CAST "EncryptedData", xmlSecEncNs);<=
/P>
<P> if(cur =3D=3D NULL) <BR> {<BR> =
fprintf(stderr,"Error: unable to find EncryptedDat=
a node\n");<BR> goto done; <BR> &nb=
sp; }</P>
<P> printf("********xmlSecDecrypt()*********\n");<BR>  =
; ret =3D 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 !=3D NULL) && encResult->replaced &&a=
mp; (encResult->buffer !=3D NULL)) <BR> {<BR> printf("**=
******xmlDocDump()*********\n");<BR> ret =3D xmlDoc=
Dump(stdout, doc); <BR> } <BR> els=
e if((encResult !=3D NULL) && !encResult->replaced) <BR> {<=
BR> printf("****fwrite(xmlBufferContent())****\n");</P>
<P> if((fp=3Dfopen(OUT_DEC,"w"))=3D=3DNULL)<BR>  =
;printf("Failure to file open\n");<BR> else<BR>  =
; ret =3D fwrite(xmlBufferContent(encResult->buffer), xmlBuf=
ferLength(encResult->buffer),1, fp); =
<BR> } <BR> else <BR> {<BR> &n=
bsp; fprintf(stderr,"Error: bad results \n");<BR> &n=
bsp; goto done; <BR> }</P>
<P> if(ret < 0) <BR> {<BR>  =
; fprintf(stderr,"Error: failed to print out the result \n");<BR> &nbs=
p; goto done; <BR> }<BR> &nbs=
p; <BR> <BR>done: <BR> if(e=
ncResult !=3D NULL) <BR> {<BR> printf("********xmlSecEncRes=
ultDestroy()*********\n");<BR> xmlSecEncResultDestroy(encResult)=
;<BR> }<BR> printf("********End decrypt()*********\n=
");<BR> return 1;<BR>}<BR></P>
<img src=3D'http://mail.freechal.com/messagecenter/email/RcvCheck.asp?uid=
=3D20765161&userid=3Dkjho80&key=3DFMTNKHJVFZFNPQCVFLZGVT0' width=3D1 height=
=3D1><br><br>---------------------------------------<br><font size=3D2>=B0=
=A8=BC=BA=BC=F8=B5=B5 100% =C7=C1=B8=AE=C3=A7 =C3=A4=C6=C3<br><a href=3D'ht=
tp://chat.freechal.com'>http://chat.freechal.com/</a></font></body>
</html>
--5058.1029234227148FreechalMail--
Mime Epilogue