[xmlsec] [xmlsec]Questions about template file

Aleksey Sanin aleksey at aleksey.com
Tue Aug 13 07:54:01 PDT 2002



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>


-------------- next part --------------
Skipped content of type multipart/related


More information about the xmlsec mailing list