<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>