<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-fareast-language:EN-US;}
span.EstiloDeEmail17
{mso-style-type:personal-compose;
font-family:"Calibri","sans-serif";
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:70.85pt 3.0cm 70.85pt 3.0cm;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=PT-BR link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-US>Hi All,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>I'm trying to understand how the xmlsec tool interprets this command:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>xmlsec1 --verify --id-attr:Id infNFe file.xml<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>which parts of code are activated! Need to reproduce this behavior in my code<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Can someone explain to me?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>In special how “xmlSecAppLoadKeys” load CA ‘s files of /usr/lib/ssl/certs/ : (for sample. openssl ssl files folder) !<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>I need use “xmlAddID” to add “infNFe” like an id! Ok? How? <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Anything else!<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>My test code:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>// Copyright 2011-2012 Renato Tegon Forti<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>#define BOOST_ALL_DYN_LINK<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#define BOOST_THREAD_USE_DLL //thread header not compliant with 'BOOST_ALL_DYN_LINK'<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#define BOOST_LIB_DIAGNOSTIC<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <boost/test/minimal.hpp><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <dsafe/xmlsig.hpp><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>#define XMLSEC_CRYPTO_OPENSSL<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <libxml/tree.h><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <libxml/xmlmemory.h><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <libxml/parser.h><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>#ifndef XMLSEC_NO_XSLT<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <libxslt/xslt.h><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#endif /* XMLSEC_NO_XSLT */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <xmlsec/xmlsec.h><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <xmlsec/xmltree.h><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <xmlsec/xmldsig.h><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <xmlsec/xmlenc.h><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <xmlsec/templates.h><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#include <xmlsec/crypto.h><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>/** <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> * verify_file:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> * @mngr: the pointer to keys manager.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> * @xml_file: the signed XML file name.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> *<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> * Verifies XML signature in #xml_file.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> *<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> * Returns 0 on success or a negative value if an error occurs.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>int <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>verify_file(xmlSecKeysMngrPtr mngr, const char* xml_file)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>{<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlDocPtr doc = NULL;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlNodePtr node = NULL;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlSecDSigCtxPtr dsigCtx = NULL;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> int res = -1;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> assert(mngr);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> assert(xml_file);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> /* load file */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> doc = xmlParseFile(xml_file);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if ((doc == NULL) || (xmlDocGetRootElement(doc) == NULL)){<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_file);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> goto done; <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> /* find start node */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> node = xmlSecFindNode(xmlDocGetRootElement(doc), xmlSecNodeSignature, xmlSecDSigNs);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(node == NULL) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr, "Error: start node not found in \"%s\"\n", xml_file);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> goto done; <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> /* create signature context */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> dsigCtx = xmlSecDSigCtxCreate(mngr);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(dsigCtx == NULL) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr,"Error: failed to create signature context\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> goto done;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> /* limit the Reference URI attributes to empty or NULL */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> dsigCtx->enabledReferenceUris = xmlSecTransformUriTypeEmpty;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> /* limit allowed transforms for siganture and reference processing */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if((xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformInclC14NId) < 0) ||<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformExclC14NId) < 0) ||<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformSha1Id) < 0) ||<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> (xmlSecDSigCtxEnableSignatureTransform(dsigCtx, xmlSecTransformRsaSha1Id) < 0)) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr,"Error: failed to limit allowed siganture transforms\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> goto done;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if((xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformInclC14NId) < 0) ||<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> (xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformExclC14NId) < 0) ||<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> (xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformSha1Id) < 0) ||<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> (xmlSecDSigCtxEnableReferenceTransform(dsigCtx, xmlSecTransformEnvelopedId) < 0)) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr,"Error: failed to limit allowed reference transforms\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> goto done;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> /* in addition, limit possible key data to valid X509 certificates only */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(xmlSecPtrListAdd(&(dsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST xmlSecKeyDataX509Id) < 0) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr,"Error: failed to limit allowed key data\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> goto done;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> /* Verify signature */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(xmlSecDSigCtxVerify(dsigCtx, node) < 0) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr,"Error: signature verify\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> goto done;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> /* check that we have only one Reference */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if((dsigCtx->status == xmlSecDSigStatusSucceeded) && <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> (xmlSecPtrListGetSize(&(dsigCtx->signedInfoReferences)) != 1)) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr,"Error: only one reference is allowed\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> goto done;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> /* print verification result to stdout */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(dsigCtx->status == xmlSecDSigStatusSucceeded) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stdout, "Signature is OK\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> } else {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stdout, "Signature is INVALID\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> } <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> /* success */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> res = 0;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>done: <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> /* cleanup */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(dsigCtx != NULL) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlSecDSigCtxDestroy(dsigCtx);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(doc != NULL) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlFreeDoc(doc); <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> return(res);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>int<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>init_allxml_lib()<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>{ <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> // Init libxml and libxslt libraries<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlInitParser();<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> LIBXML_TEST_VERSION<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlSubstituteEntitiesDefault(1);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#ifndef XMLSEC_NO_XSLT<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlIndentTreeOutput = 1; <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#endif // XMLSEC_NO_XSLT <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> // Init xmlsec library <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(xmlSecInit() < 0) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr, "Error: xmlsec initialization failed.\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> return(-1);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> // Check loaded library version <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(xmlSecCheckVersion() != 1) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr, "Error: loaded xmlsec library version is not compatible.\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> return(-1);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> } <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> // Load default crypto engine if we are supporting dynamic<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> // loading for xmlsec-crypto libraries. Use the crypto library<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> // name ("openssl", "nss", etc.) to load corresponding <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> // xmlsec-crypto library.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>#ifdef XMLSEC_CRYPTO_DYNAMIC_LOADING<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(xmlSecCryptoDLLoadLibrary(BAD_CAST XMLSEC_CRYPTO) < 0) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr, "Error: unable to load default xmlsec-crypto library. Make sure\n"<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> "that you have it installed and check shared libraries path\n"<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> "(LD_LIBRARY_PATH) envornment variable.\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> return(-1); <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#endif /* XMLSEC_CRYPTO_DYNAMIC_LOADING */<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> // Init crypto library <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(xmlSecCryptoAppInit(NULL) < 0) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr, "Error: crypto initialization failed.\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> return(-1);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> // Init xmlsec-crypto library <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(xmlSecCryptoInit() < 0) {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr, "Error: xmlsec-crypto initialization failed.\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> return(-1);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> return 0;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>void<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>fnit_allxml_lib()<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>{<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> // Shutdown xmlsec-crypto library <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlSecCryptoShutdown();<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> //Shutdown crypto library <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlSecCryptoAppShutdown();<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> //Shutdown xmlsec library <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlSecShutdown();<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> // Shutdown libxslt/libxml <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#ifndef XMLSEC_NO_XSLT<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xsltCleanupGlobals(); <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>#endif //XMLSEC_NO_XSLT <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlCleanupParser(); <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>const std::string XML_FILE = "/Projects/project.dokfile.vses/hades/trunk/products/doksafe/engine/libs/xmldsig/test/"<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> "mt-embedded-id-dtd-attr.xml";<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> // "mt.xml";<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>// Unit Tests <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>void do_0()<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>{<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlSecKeysMngrPtr mngr = xmlSecKeysMngrCreate();<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(mngr == NULL) <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr, "Error: failed to create keys manager.\n"); <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> }<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> if(xmlSecCryptoAppDefaultKeysMngrInit(mngr) < 0) <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fprintf(stderr, "Error: failed to initialize keys manager.\n");<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> xmlSecKeysMngrDestroy(mngr);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> } <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> BOOST_CHECK(init_allxml_lib() == 0);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> BOOST_CHECK(verify_file(mngr, XML_FILE.c_str()) == 0);<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> fnit_allxml_lib();<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>// -<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>int test_main(int, char*[])<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>{<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US> do_0();<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US> return 0;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US>}<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US>Thanks<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></body></html>