[xmlsec] How doese xmlSecEncCtxXmlEncrypt() work?

Martin Salo Martin.Salo at gmx.net
Fri Aug 3 08:58:04 PDT 2007


Hello Mailinglist,

I have a question about xmlSecEncCtxXmlEncrypt().
I have created the EncryptionContext and the Template nodes like in encyrpt2.c example.
Then I have created the nodes (subtree) I want to decrypt. The return value of the
encryption is -1. And the node is not encrypted. Why?

Error Message:
func=xmlSecEncCtxXmlEncrypt:file=..\src\xmlenc.c:line=366:obj=unknown:subj=node->doc != NULL:
error=100:assertion: ;last error=0 (0x00000000);last error msg=The action was successfully.

I want to create this xml file, with the differnce that the <Server> node should be
replaced with an encryption section:
<?xml version="1.0"?>
<ApplicationSettings>
	<AboutBoxText>MyApp 1.0</AboutBoxText>
	<Server>
		<Url>www.abc.com</Url>
		<Password>TopSecret</Password>
	</Server>
</ApplicationSettings>


// Replace the encrypt_file() function in encrypt2.c with this fucntion:
int encrypt_file(const char* xml_file, const char* key_file) {
	xmlNode *oNode=0, *oNodeFather=0, *oNodeToEncrypt=0, *oNodeTmpl=0;
	xmlDoc *oNewDoc=0;
	xmlNs *oNsSig=0, *oNsEnc=0, *oNsXsi=0;
	xmlSecEncCtx *oEncCtx=0;
	int retval=0;

	// Create new xml file
	oNewDoc = xmlNewDoc(BAD_CAST "1.0");
	oNodeFather = xmlNewDocNode(oNewDoc, 0, BAD_CAST "ApplicationSettings", 0);
	xmlDocSetRootElement(oNewDoc, oNodeFather);

	// Add a plain node:
	oNode = xmlNewNode(0, "AboutBoxText");
	xmlNodeSetContent(oNode, "MyApp");
	xmlAddChild(oNodeFather, oNode);
	
	// Create nodes that should be encrypted:
	oNodeToEncrypt = xmlNewNode(0, "ToEncrypt");
	oNode = xmlSecAddChild(oNodeToEncrypt, "Server", 0);
	xmlNodeSetContent(oNode, "www.abc.com");
	oNode = xmlSecAddChild(oNodeToEncrypt, "Password", 0);
	xmlNodeSetContent(oNode, "TopSecret");

	// Create encryption template nodes:
	oNodeTmpl = xmlSecTmplEncDataCreate(oNewDoc, xmlSecTransformDes3CbcId, 0, 0, 0, 0);
	xmlSecTmplEncDataEnsureCipherValue(oNodeTmpl);
	oNode = xmlSecTmplEncDataEnsureKeyInfo(oNodeTmpl, NULL);
	xmlSecTmplKeyInfoAddKeyName(oNode, NULL);

	// Create encryption context:
	oEncCtx = xmlSecEncCtxCreate(NULL);
	oEncCtx->encKey = xmlSecKeyReadBinaryFile(xmlSecKeyDataDesId, key_file);
	xmlSecKeySetName(oEncCtx->encKey, (const unsigned char *)key_file);

	// Do encryption:
	retval = xmlSecEncCtxXmlEncrypt(oEncCtx, oNodeTmpl, oNodeToEncrypt);
	xmlAddChild(oNodeFather, oNodeToEncrypt);



	// Print result:
	xmlDocDump(stdout, oNewDoc);



	// Cleanup:
	if(oEncCtx != NULL)
		xmlSecEncCtxDestroy(oEncCtx);
	if(oNodeTmpl != NULL)
		xmlFreeNode(oNodeTmpl);
	if(oNewDoc != NULL)
		xmlFreeDoc(oNewDoc);
	
	return 0;
}
-- 
Ist Ihr Browser Vista-kompatibel? Jetzt die neuesten 
Browser-Versionen downloaden: http://www.gmx.net/de/go/browser



More information about the xmlsec mailing list