[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&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 wel=
l. </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 i=
t&nbsp;does not work well.</P>
<P>Follow code is reference&nbsp;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:&nbsp; 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>&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;t=
ime.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;l=
ibxslt/extensions.h&gt; <BR>#include &lt;libxslt/xsltInternals.h&gt;<BR>#in=
clude &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>//#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>&nbsp;* Init/Shutdown<BR>&nbsp;*/<BR>int&nbsp; init(void);=
<BR>int createTmpl(void);<BR>void shutdown(void);<BR>int&nbsp; readKeys(cha=
r *file);<BR>&nbsp;<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>&nbsp;* Global data<BR>&nbsp;*/<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>&nbsp;&nbsp;&nbsp; xmlDocPtr do=
c =3D NULL;<BR>&nbsp;&nbsp;&nbsp; int ret;</P>
<P>&nbsp;printf("Call Init()\n");<BR>&nbsp;&nbsp;&nbsp; ret =3D init();<BR>=
&nbsp;&nbsp;&nbsp; if(ret &lt; 0) <BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;f=
printf(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 =3D readKeys(KEY_FILE);<BR>&nbsp;data =3D SRC_FILE;<BR>&nbsp;if(ret&lt;=
0)<BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stdout, "Error: read keys \n");<BR>&nb=
sp;&nbsp;goto done;<BR>&nbsp;}</P>
<P>&nbsp;printf("Call xmlSecParseFile()\n");<BR>&nbsp;//doc =3D xmlSecParse=
File(TM);<BR>&nbsp;ret=3DcreateTmpl();<BR>&nbsp;<BR>&nbsp;if(ret&lt;0)<BR>&=
nbsp;{<BR>&nbsp;&nbsp;fprintf(stdout, "Error: create Template Object\n");<B=
R>&nbsp;&nbsp;goto done;<BR>&nbsp;}</P>
<P>/*&nbsp;if(doc =3D=3D 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 =3D encry=
pt();<BR>&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;case 2:<BR>&nbsp;&nbsp;&nb=
sp;printf("Call decrypt()\n");<BR>&nbsp;&nbsp;&nbsp;ret =3D decrypt(doc);<B=
R>&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;}<BR>&nbsp;if(ret &lt; 0) <BR>&nbsp;{<B=
R>&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 !=3D 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 =3D =
NULL;<BR>&nbsp;xmlNodePtr cur;<BR>&nbsp;xmlDocPtr doc =3D NULL;<BR>&nbsp;<B=
R>&nbsp;encData =3D xmlSecEncDataCreate(NULL, NULL, NULL, NULL);<BR>&nbsp;i=
f(encData =3D=3D NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: t=
emplate creation failed\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <B=
R>&nbsp;}<BR>&nbsp;<BR>&nbsp;cur =3D xmlSecEncDataAddEncMethod(encData, xml=
SecEncDes3Cbc);<BR>&nbsp;if(cur =3D=3D NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fpr=
intf(stderr, "Error: failed to add Enc Method\n");<BR>&nbsp;&nbsp;goto done=
;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;<BR>&nbsp;cur =3D xmlSecEncDataAdd=
CipherValue(encData);&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(cur =3D=3D 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 =3D =
xmlSecEncDataAddKeyInfo(encData);<BR>&nbsp;if(cur =3D=3D 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 =
=3D xmlSecKeyInfoAddEncryptedKey(cur, NULL, NULL, NULL);<BR>&nbsp;if(encKey=
 =3D=3D 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;&n=
bsp; * Set the encryption method for encrypting the key<BR>&nbsp;&nbsp;&nbs=
p;&nbsp; */<BR>&nbsp;cur =3D xmlSecEncDataAddEncMethod(encKey, xmlSecEncDes=
3Cbc);<BR>&nbsp;if(cur =3D=3D NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stde=
rr, "Error: failed to add EncryptedKey Enc Method\n");<BR>&nbsp;&nbsp;goto =
done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;cur =3D xmlSecEncDataAddCipher=
Value(encKey);&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(cur =3D=3D NULL) <BR>&nbsp;{<=
BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add EncryptedKey CipherVal=
ue\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;<B=
R>&nbsp;cur =3D xmlSecEncDataAddKeyInfo(encKey);<BR>&nbsp;if(cur =3D=3D NUL=
L) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add Encrypt=
edKey KeyInfo\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<=
/P>
<P>&nbsp;cur =3D xmlSecKeyInfoAddKeyName(cur);<BR>&nbsp;if(cur =3D=3D NULL)=
 <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error: failed to add Encrypted=
Key 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 =3D 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(=
) !=3D 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 =3D xmlSecSimpleKeysMngrCreate();&nbsp;&nbsp;&nbsp; <BR>&nb=
sp;if(keyMgr =3D=3D NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;fprintf(stderr, "Error=
: failed to create keys manager\n");<BR>&nbsp;&nbsp;return(-1);<BR>&nbsp;&n=
bsp;&nbsp; &nbsp;}</P>
<P>&nbsp;printf("**********xmlSecEncCtxCreate()***********\n");<BR>&nbsp;&n=
bsp;&nbsp; encCtx =3D xmlSecEncCtxCreate(keyMgr);<BR>&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(encCtx =3D=3D NULL) <BR>&nbsp;{<BR>&nbsp;=
&nbsp;fprintf(stderr,"Error: failed to create Enc context\n");<BR>&nbsp;&nb=
sp;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 object=
s */<BR>&nbsp;if(encCtx !=3D NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;xmlSecEncCtxD=
estroy(encCtx);<BR>&nbsp;}&nbsp;&nbsp;&nbsp; <BR>&nbsp;if(keyMgr !=3D NULL)=
 <BR>&nbsp;{<BR>&nbsp;&nbsp;xmlSecSimpleKeysMngrDestroy(keyMgr);<BR>&nbsp;}=
<BR>&nbsp;if(encData !=3DNULL)<BR>&nbsp;{<BR>&nbsp;&nbsp;xmlSecEncDataDestr=
oy(encData);<BR>&nbsp;}<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;xmlSecShutdown();<B=
R>&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=3D0;<BR>&nbsp;&nbsp;&nbs=
p; <BR>&nbsp;printf("startLoad : %s\n",file);<BR>&nbsp;ret =3D xmlSecSimple=
KeysMngrLoad(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: fai=
led to load keys from \"%s\".\n", file);<BR>&nbsp;&nbsp;return(-1);<BR>&nbs=
p;}<BR>&nbsp;return(0);<BR>}<BR>int encrypt(void) <BR>{<BR>&nbsp;xmlSecEncR=
esultPtr encResult =3D NULL;<BR>&nbsp;xmlChar *result =3D NULL;&nbsp;<BR>&n=
bsp;xmlDocPtr doc =3D NULL;<BR>&nbsp;FILE *fp;<BR>&nbsp;int len;<BR>&nbsp;i=
nt ret;<BR>&nbsp;int res =3D -1;</P>
<P>&nbsp;printf("********Start encrypt()*********\n");</P>
<P>&nbsp;if(SRC_TYPE &amp;&amp; (data !=3D NULL) &amp;&amp; encCtx !=3DNULL=
 &amp;&amp; encData !=3DNULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("********xm=
lSecEncryptUri()*********\n");<BR>&nbsp;&nbsp;ret =3D xmlSecEncryptUri(encC=
tx, NULL, NULL, encData, data, &amp;encResult);<BR>&nbsp;<BR>&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;if(ret &lt; 0) <BR>&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp; &nbsp;{<BR>&nbsp;&nbsp;&nbsp;fprintf(stderr,"Error: x=
mlSecEncryptUri() 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 !=3D NULL)) <BR>&nbs=
p;{ <BR>&nbsp;&nbsp;xmlNodePtr cur;<BR>&nbsp;<BR>&nbsp;&nbsp;printf("******=
**xmlParseFile()*********\n");<BR>&nbsp;&nbsp;doc =3D xmlParseFile(data);<B=
R>&nbsp;&nbsp;<BR>&nbsp;&nbsp;if (doc =3D=3D NULL) <BR>&nbsp;&nbsp;{<BR>&nb=
sp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;fprintf(stderr, "Error: unable to parse f=
ile \"%s\"\n", data);<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;goto done;&nb=
sp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;if(nodeId !=3D NULL) <BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;=
printf("********xmlSecFindNodeById()*********\n");<BR>&nbsp;&nbsp;&nbsp;&nb=
sp; &nbsp;&nbsp;cur =3D xmlSecFindNodeById(encData, BAD_CAST nodeId);<BR>&n=
bsp;&nbsp;&nbsp;&nbsp; &nbsp;} <BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;else if(n=
odeName !=3D NULL) <BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;{<BR>&nbsp;&nbsp;&nbs=
p;printf("********xmlSecFindNode()*********\n");<BR>&nbsp;&nbsp;&nbsp;cur =
=3D 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 =3D e=
ncData;<BR>&nbsp;&nbsp;}<BR>&nbsp;<BR>&nbsp;&nbsp;if(cur =3D=3D NULL) <BR>&=
nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;fpr=
intf(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;&nb=
sp; <BR>&nbsp;&nbsp;}</P>
<P>&nbsp;&nbsp;printf("********xmlSecEncryptXmlNode()*********\n");<BR>&nbs=
p;&nbsp;ret =3D 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;&nb=
sp;&nbsp;&nbsp; &nbsp;&nbsp;fprintf(stderr,"Error: xmlSecEncryptXmlNode() f=
ailed \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("E=
rror: haha\n");<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;if((encResult !=3D NULL) &a=
mp;&amp; (encResult-&gt;replaced) &amp;&amp; (doc !=3D NULL)) <BR>&nbsp;{<B=
R>&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;&n=
bsp;&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(re=
sult =3D=3D 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=3Dfopen(OUT_ENC,"w"))=3D=3DNULL)<BR>&nbsp;&nbsp;p=
rintf("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 !=3D NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("********xmlFreeD=
oc()*********\n");<BR>&nbsp;&nbsp;xmlFreeDoc(doc);<BR>&nbsp;}<BR>&nbsp;if(r=
esult !=3D 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 !=3D 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;xmlSecEncRe=
sultPtr encResult =3D 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;&nbs=
p; cur =3D xmlSecFindNode(encData, BAD_CAST "EncryptedData", xmlSecEncNs);<=
/P>
<P>&nbsp;&nbsp;&nbsp; if(cur =3D=3D NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"Error: unable to find EncryptedDat=
a node\n");<BR>&nbsp;&nbsp;goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nb=
sp; }</P>
<P>&nbsp;printf("********xmlSecDecrypt()*********\n");<BR>&nbsp;&nbsp;&nbsp=
; ret =3D 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 !=3D NULL) &amp;&amp; encResult-&gt;replaced &amp;&a=
mp; (encResult-&gt;buffer !=3D NULL)) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("**=
******xmlDocDump()*********\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp; ret =3D xmlDoc=
Dump(stdout, doc);&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; } <BR>&nbsp;els=
e if((encResult !=3D NULL) &amp;&amp; !encResult-&gt;replaced) <BR>&nbsp;{<=
BR>&nbsp;&nbsp;printf("****fwrite(xmlBufferContent())****\n");</P>
<P>&nbsp;&nbsp;if((fp=3Dfopen(OUT_DEC,"w"))=3D=3DNULL)<BR>&nbsp;&nbsp;&nbsp=
;printf("Failure to file open\n");<BR>&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp=
; &nbsp;&nbsp;ret =3D fwrite(xmlBufferContent(encResult-&gt;buffer), xmlBuf=
ferLength(encResult-&gt;buffer),1, fp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp; <BR>&nbsp;} <BR>&nbsp;else <BR>&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp; fprintf(stderr,"Error: bad results \n");<BR>&nbsp;&n=
bsp;&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;&nbs=
p;&nbsp;&nbsp; goto done;&nbsp;&nbsp;&nbsp; <BR>&nbsp;}<BR>&nbsp;&nbsp;&nbs=
p; <BR>&nbsp;&nbsp; <BR>done:&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; if(e=
ncResult !=3D NULL) <BR>&nbsp;{<BR>&nbsp;&nbsp;printf("********xmlSecEncRes=
ultDestroy()*********\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=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