blautenb 2003/05/31 15:55:08
Modified: c/src/tools/xtest xtest.cpp
Log:
Memory checks now performed
Revision Changes Path
1.14 +367 -300 xml-security/c/src/tools/xtest/xtest.cpp
Index: xtest.cpp
===================================================================
RCS file: /home/cvs/xml-security/c/src/tools/xtest/xtest.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- xtest.cpp 28 May 2003 10:56:48 -0000 1.13
+++ xtest.cpp 31 May 2003 22:55:08 -0000 1.14
@@ -284,6 +284,24 @@
int main(int argc, char **argv) {
+ /* We output a version number to overcome a "feature" in Microsoft's
memory
+ leak detection */
+
+ cout << "DSIG Info (Using Apache XML-Security-C Library v" <<
XSEC_VERSION_MAJOR <<
+ "." << XSEC_VERSION_MEDIUM << "." << XSEC_VERSION_MINOR <<
")\n";
+
+#if defined (_DEBUG) && defined (_MSC_VER)
+
+ // Do some memory debugging under Visual C++
+
+ _CrtMemState s1, s2, s3;
+
+ // At this point we are about to start really using XSEC, so
+ // Take a "before" checkpoing
+
+ _CrtMemCheckpoint( &s1 );
+
+#endif
// First initialise the XML system
@@ -305,401 +323,450 @@
}
- /*
- * First we create a document from scratch
- */
-
- cerr << "Creating a known doc and signing (HMAC-SHA1)" << endl;
-
- // Create a blank Document
-
- //DOMImplementation impl;
-
- XMLCh tempStr[100];
- XMLString::transcode("Core", tempStr, 99);
- DOMImplementation *impl =
DOMImplementationRegistry::getDOMImplementation(tempStr);
-
-
- DOMDocument *doc = impl->createDocument(
- 0, // root element namespace URI.
- MAKE_UNICODE_STRING("ADoc"), // root element name
- NULL);// DOMDocumentType()); // document type object (DTD).
-
- DOMElement *rootElem = doc->getDocumentElement();
- rootElem->setAttributeNS(DSIGConstants::s_unicodeStrURIXMLNS,
- MAKE_UNICODE_STRING("xmlns:foo"),
MAKE_UNICODE_STRING("http://www.foo.org"));
-
- DOMElement * prodElem =
doc->createElement(MAKE_UNICODE_STRING("product"));
- rootElem->appendChild(prodElem);
-
- DOMText * prodDataVal =
doc->createTextNode(MAKE_UNICODE_STRING("XMLSecurityC"));
- prodElem->appendChild(prodDataVal);
-
- DOMElement *catElem =
doc->createElement(MAKE_UNICODE_STRING("category"));
- rootElem->appendChild(catElem);
- catElem->setAttribute(MAKE_UNICODE_STRING("idea"),
MAKE_UNICODE_STRING("great"));
-
- DOMText *catDataVal = doc->createTextNode(MAKE_UNICODE_STRING("XML
Security Tools"));
- catElem->appendChild(catDataVal);
-
- XSECProvider prov;
- DSIGSignature *sig;
- DSIGReference *ref[10];
- DOMElement *sigNode;
- int refCount;
+ {
- try {
-
/*
- * Now we have a document, create a signature for it.
+ * First we create a document from scratch
*/
+
+ cerr << "Creating a known doc and signing (HMAC-SHA1)" << endl;
- sig = prov.newSignature();
- sig->setDSIGNSPrefix(MAKE_UNICODE_STRING("ds"));
+ // Create a blank Document
- sigNode = sig->createBlankSignature(doc, CANON_C14N_COM,
SIGNATURE_HMAC, HASH_SHA1);
-
rootElem->appendChild(doc->createTextNode(DSIGConstants::s_unicodeStrNL));
- rootElem->insertBefore(doc->createComment(MAKE_UNICODE_STRING("
a comment ")), prodElem);
- rootElem->appendChild(sigNode);
-
rootElem->insertBefore(doc->createTextNode(DSIGConstants::s_unicodeStrNL),
prodElem);
+ //DOMImplementation impl;
- /*
- * Add some test references
- */
+ XMLCh tempStr[100];
+ XMLString::transcode("Core", tempStr, 99);
+ DOMImplementation *impl =
DOMImplementationRegistry::getDOMImplementation(tempStr);
+
- ref[0] = sig->createReference(MAKE_UNICODE_STRING(""));
- ref[0]->appendEnvelopedSignatureTransform();
+ DOMDocument *doc = impl->createDocument(
+ 0, // root element
namespace URI.
+ MAKE_UNICODE_STRING("ADoc"),
// root element name
+ NULL);// DOMDocumentType()); //
document type object (DTD).
+
+ DOMElement *rootElem = doc->getDocumentElement();
+ rootElem->setAttributeNS(DSIGConstants::s_unicodeStrURIXMLNS,
+ MAKE_UNICODE_STRING("xmlns:foo"),
MAKE_UNICODE_STRING("http://www.foo.org"));
+
+ DOMElement * prodElem =
doc->createElement(MAKE_UNICODE_STRING("product"));
+ rootElem->appendChild(prodElem);
+
+ DOMText * prodDataVal =
doc->createTextNode(MAKE_UNICODE_STRING("XMLSecurityC"));
+ prodElem->appendChild(prodDataVal);
+
+ DOMElement *catElem =
doc->createElement(MAKE_UNICODE_STRING("category"));
+ rootElem->appendChild(catElem);
+ catElem->setAttribute(MAKE_UNICODE_STRING("idea"),
MAKE_UNICODE_STRING("great"));
+
+ DOMText *catDataVal =
doc->createTextNode(MAKE_UNICODE_STRING("XML Security Tools"));
+ catElem->appendChild(catDataVal);
+
+ XSECProvider prov;
+ DSIGSignature *sig;
+ DSIGReference *ref[10];
+ DOMElement *sigNode;
+ int refCount;
- ref[1] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
- ref[1]->appendEnvelopedSignatureTransform();
- ref[1]->appendCanonicalizationTransform(CANON_C14N_NOC);
-
- ref[2] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
- ref[2]->appendEnvelopedSignatureTransform();
- ref[2]->appendCanonicalizationTransform(CANON_C14N_COM);
-
- ref[3] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
- ref[3]->appendEnvelopedSignatureTransform();
- ref[3]->appendCanonicalizationTransform(CANON_C14NE_NOC);
-
- ref[4] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
- ref[4]->appendEnvelopedSignatureTransform();
- ref[4]->appendCanonicalizationTransform(CANON_C14NE_COM);
-
- ref[5] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
- ref[5]->appendEnvelopedSignatureTransform();
- DSIGTransformC14n * ce =
ref[5]->appendCanonicalizationTransform(CANON_C14NE_COM);
- ce->addInclusiveNamespace("foo");
-
- sig->setECNSPrefix(MAKE_UNICODE_STRING("ec"));
- ref[6] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
- ref[6]->appendEnvelopedSignatureTransform();
- ce = ref[6]->appendCanonicalizationTransform(CANON_C14NE_COM);
- ce->addInclusiveNamespace("foo");
+ try {
+
+ /*
+ * Now we have a document, create a signature for it.
+ */
+
+ sig = prov.newSignature();
+ sig->setDSIGNSPrefix(MAKE_UNICODE_STRING("ds"));
-#ifdef XSEC_NO_XALAN
+ sigNode = sig->createBlankSignature(doc,
CANON_C14N_COM, SIGNATURE_HMAC, HASH_SHA1);
+
rootElem->appendChild(doc->createTextNode(DSIGConstants::s_unicodeStrNL));
+
rootElem->insertBefore(doc->createComment(MAKE_UNICODE_STRING(" a comment ")),
prodElem);
+ rootElem->appendChild(sigNode);
+
rootElem->insertBefore(doc->createTextNode(DSIGConstants::s_unicodeStrNL),
prodElem);
- cerr << "WARNING : No testing of XPath being performed as Xalan
not present" << endl;
- refCount = 7;
+ /*
+ * Add some test references
+ */
-#else
- /*
- * Create some XPath/XPathFilter references
- */
+ ref[0] = sig->createReference(MAKE_UNICODE_STRING(""));
+ ref[0]->appendEnvelopedSignatureTransform();
+ ref[1] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
+ ref[1]->appendEnvelopedSignatureTransform();
+ ref[1]->appendCanonicalizationTransform(CANON_C14N_NOC);
- ref[7] = sig->createReference(MAKE_UNICODE_STRING(""));
- sig->setXPFNSPrefix(MAKE_UNICODE_STRING("xpf"));
- DSIGTransformXPathFilter * xpf =
ref[7]->appendXPathFilterTransform();
- xpf->appendFilter(FILTER_INTERSECT,
MAKE_UNICODE_STRING("//ADoc/category"));
-
- ref[8] = sig->createReference(MAKE_UNICODE_STRING(""));
- /*
ref[5]->appendXPathTransform("ancestor-or-self::dsig:Signature",
-
"xmlns:dsig=http://www.w3.org/2000/09/xmldsig#"); */
-
- DSIGTransformXPath * x =
ref[8]->appendXPathTransform("count(ancestor-or-self::dsig:Signature | \
-here()/ancestor::dsig:Signature[1]) > \
-count(ancestor-or-self::dsig:Signature)");
- x->setNamespace("dsig", "http://www.w3.org/2000/09/xmldsig#");
+ ref[2] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
+ ref[2]->appendEnvelopedSignatureTransform();
+ ref[2]->appendCanonicalizationTransform(CANON_C14N_COM);
- refCount = 9;
+ ref[3] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
+ ref[3]->appendEnvelopedSignatureTransform();
+
ref[3]->appendCanonicalizationTransform(CANON_C14NE_NOC);
-#endif
-
- /*
- * Sign the document, using an HMAC algorithm and the key
"secret"
- */
+ ref[4] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
+ ref[4]->appendEnvelopedSignatureTransform();
+
ref[4]->appendCanonicalizationTransform(CANON_C14NE_COM);
+ ref[5] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
+ ref[5]->appendEnvelopedSignatureTransform();
+ DSIGTransformC14n * ce =
ref[5]->appendCanonicalizationTransform(CANON_C14NE_COM);
+ ce->addInclusiveNamespace("foo");
- sig->appendKeyName(MAKE_UNICODE_STRING("The secret key is
\"secret\""));
+ sig->setECNSPrefix(MAKE_UNICODE_STRING("ec"));
+ ref[6] =
sig->createReference(MAKE_UNICODE_STRING("#xpointer(/)"));
+ ref[6]->appendEnvelopedSignatureTransform();
+ ce =
ref[6]->appendCanonicalizationTransform(CANON_C14NE_COM);
+ ce->addInclusiveNamespace("foo");
- // Append a test DNames
+ #ifdef XSEC_NO_XALAN
- DSIGKeyInfoX509 * x509 = sig->appendX509Data();
- x509->setX509SubjectName(s_tstDName);
+ cerr << "WARNING : No testing of XPath being performed
as Xalan not present" << endl;
+ refCount = 7;
- // Append a test PGPData element
- sig->appendPGPData(s_tstPGPKeyID, s_tstPGPKeyPacket);
+ #else
+ /*
+ * Create some XPath/XPathFilter references
+ */
- // Append an SPKIData element
- DSIGKeyInfoSPKIData * spki = sig->appendSPKIData(s_tstSexp1);
- spki->appendSexp(s_tstSexp2);
- // Append a MgmtData element
- sig->appendMgmtData(s_tstMgmtData);
+ ref[7] = sig->createReference(MAKE_UNICODE_STRING(""));
+ sig->setXPFNSPrefix(MAKE_UNICODE_STRING("xpf"));
+ DSIGTransformXPathFilter * xpf =
ref[7]->appendXPathFilterTransform();
+ xpf->appendFilter(FILTER_INTERSECT,
MAKE_UNICODE_STRING("//ADoc/category"));
- sig->setSigningKey(createHMACKey((unsigned char *) "secret"));
- sig->sign();
+ ref[8] = sig->createReference(MAKE_UNICODE_STRING(""));
+ /*
ref[5]->appendXPathTransform("ancestor-or-self::dsig:Signature",
+
"xmlns:dsig=http://www.w3.org/2000/09/xmldsig#"); */
- cerr << "Doc signed OK - Checking values against Known Good" <<
endl;
+ DSIGTransformXPath * x =
ref[8]->appendXPathTransform("count(ancestor-or-self::dsig:Signature | \
+ here()/ancestor::dsig:Signature[1]) > \
+ count(ancestor-or-self::dsig:Signature)");
+ x->setNamespace("dsig",
"http://www.w3.org/2000/09/xmldsig#");
- unsigned char buf[128];
- int len;
+ refCount = 9;
- /*
- * Validate the reference hash values from known good
- */
+ #endif
+
+ /*
+ * Sign the document, using an HMAC algorithm and the
key "secret"
+ */
- int i;
- for (i = 0; i < refCount; ++i) {
- cerr << "Calculating hash for reference " << i << " ...
";
+ sig->appendKeyName(MAKE_UNICODE_STRING("The secret key
is \"secret\""));
- len = (int) ref[i]->calculateHash(buf, 128);
+ // Append a test DNames
- cerr << " Done\nChecking -> ";
+ DSIGKeyInfoX509 * x509 = sig->appendX509Data();
+ x509->setX509SubjectName(s_tstDName);
- if (len != 20) {
- cerr << "Bad (Length = " << len << ")" << endl;
- exit (1);
- }
+ // Append a test PGPData element
+ sig->appendPGPData(s_tstPGPKeyID, s_tstPGPKeyPacket);
- for (int j = 0; j < 20; ++j) {
+ // Append an SPKIData element
+ DSIGKeyInfoSPKIData * spki =
sig->appendSPKIData(s_tstSexp1);
+ spki->appendSexp(s_tstSexp2);
- if (buf[j] != createdDocRefs[i][j]) {
- cerr << "Bad at location " << j << endl;
- exit (1);
- }
-
- }
- cerr << "Good.\n";
+ // Append a MgmtData element
+ sig->appendMgmtData(s_tstMgmtData);
- }
+ sig->setSigningKey(createHMACKey((unsigned char *)
"secret"));
+ sig->sign();
- /*
- * Verify the signature check works
- */
+ cerr << "Doc signed OK - Checking values against Known
Good" << endl;
- cerr << "Running \"verifySignatureOnly()\" on calculated
signature ... ";
- if (sig->verifySignatureOnly()) {
- cerr << "OK" << endl;
- }
- else {
- cerr << "Failed" << endl;
- char * e = XMLString::transcode(sig->getErrMsgs());
- cout << e << endl;
- delete [] e;
- exit(1);
- }
+ unsigned char buf[128];
+ int len;
- /*
- * Change the document and ensure the signature fails.
- */
+ /*
+ * Validate the reference hash values from known good
+ */
- cerr << "Setting incorrect key in Signature object" << endl;
- sig->setSigningKey(createHMACKey((unsigned char *)
"badsecret"));
+ int i;
+ for (i = 0; i < refCount; ++i) {
- cerr << "Running \"verifySignatureOnly()\" on calculated
signature ... ";
- if (!sig->verifySignatureOnly()) {
- cerr << "OK (Signature bad)" << endl;
- }
- else {
- cerr << "Failed (signature OK but should be bad)" <<
endl;
- exit(1);
- }
+ cerr << "Calculating hash for reference " << i
<< " ... ";
- // Don't need the signature now the DOM structure is in place
- prov.releaseSignature(sig);
+ len = (int) ref[i]->calculateHash(buf, 128);
- /*
- * Now serialise the document to memory so we can re-parse and
check from scratch
- */
+ cerr << " Done\nChecking -> ";
- cerr << "Serialising the document to a memory buffer ... ";
+ if (len != 20) {
+ cerr << "Bad (Length = " << len << ")"
<< endl;
+ exit (1);
+ }
- DOMWriter *theSerializer =
((DOMImplementationLS*)impl)->createDOMWriter();
+ for (int j = 0; j < 20; ++j) {
- theSerializer->setEncoding(MAKE_UNICODE_STRING("UTF-8"));
- if
(theSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, false))
-
theSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, false);
+ if (buf[j] != createdDocRefs[i][j]) {
+ cerr << "Bad at location " << j
<< endl;
+ exit (1);
+ }
+
+ }
+ cerr << "Good.\n";
+ }
- MemBufFormatTarget *formatTarget = new MemBufFormatTarget();
+ /*
+ * Verify the signature check works
+ */
+
+ cerr << "Running \"verifySignatureOnly()\" on
calculated signature ... ";
+ if (sig->verifySignatureOnly()) {
+ cerr << "OK" << endl;
+ }
+ else {
+ cerr << "Failed" << endl;
+ char * e =
XMLString::transcode(sig->getErrMsgs());
+ cout << e << endl;
+ delete [] e;
+ exit(1);
+ }
- theSerializer->writeNode(formatTarget, *doc);
+ /*
+ * Change the document and ensure the signature fails.
+ */
+
+ cerr << "Setting incorrect key in Signature object" <<
endl;
+ sig->setSigningKey(createHMACKey((unsigned char *)
"badsecret"));
+
+ cerr << "Running \"verifySignatureOnly()\" on
calculated signature ... ";
+ if (!sig->verifySignatureOnly()) {
+ cerr << "OK (Signature bad)" << endl;
+ }
+ else {
+ cerr << "Failed (signature OK but should be
bad)" << endl;
+ exit(1);
+ }
- // Copy to a new buffer
- len = formatTarget->getLen();
- char * mbuf = new char [len + 1];
- memcpy(mbuf, formatTarget->getRawBuffer(), len);
- mbuf[len] = '\0';
+ // Don't need the signature now the DOM structure is in
place
+ prov.releaseSignature(sig);
- delete theSerializer;
- delete formatTarget;
+ /*
+ * Now serialise the document to memory so we can
re-parse and check from scratch
+ */
- cerr << "done\nParsing memory buffer back to DOM ... ";
+ cerr << "Serialising the document to a memory buffer
... ";
- // Also release the document so that we can re-load from scratch
+ DOMWriter *theSerializer =
((DOMImplementationLS*)impl)->createDOMWriter();
- doc->release();
+
theSerializer->setEncoding(MAKE_UNICODE_STRING("UTF-8"));
+ if
(theSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, false))
+
theSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, false);
- /*
- * Re-parse
- */
- XercesDOMParser parser;
-
- parser.setDoNamespaces(true);
- parser.setCreateEntityReferenceNodes(true);
+ MemBufFormatTarget *formatTarget = new
MemBufFormatTarget();
- MemBufInputSource* memIS = new MemBufInputSource ((const
XMLByte*) mbuf,
-
len, "XSECMem");
+ theSerializer->writeNode(formatTarget, *doc);
- parser.parse(*memIS);
- doc = parser.adoptDocument();
+ // Copy to a new buffer
+ len = formatTarget->getLen();
+ char * mbuf = new char [len + 1];
+ memcpy(mbuf, formatTarget->getRawBuffer(), len);
+ mbuf[len] = '\0';
+ delete theSerializer;
+ delete formatTarget;
- delete(memIS);
- delete[] mbuf;
+ cerr << "done\nParsing memory buffer back to DOM ... ";
- cerr << "done\nValidating signature ...";
+ // Also release the document so that we can re-load
from scratch
- /*
- * Validate signature
- */
+ doc->release();
- sig = prov.newSignatureFromDOM(doc);
- sig->load();
- sig->setSigningKey(createHMACKey((unsigned char *) "secret"));
+ /*
+ * Re-parse
+ */
- if (sig->verify()) {
- cerr << "OK" << endl;
- }
- else {
- cerr << "Failed\n" << endl;
- char * e = XMLString::transcode(sig->getErrMsgs());
- cerr << e << endl;
- delete [] e;
- exit(1);
- }
+ XercesDOMParser parser;
+
+ parser.setDoNamespaces(true);
+ parser.setCreateEntityReferenceNodes(true);
- /*
- * Ensure DNames are read back in and decoded properly
- */
+ MemBufInputSource* memIS = new MemBufInputSource
((const XMLByte*) mbuf,
+
len, "XSECMem");
- DSIGKeyInfoList * kil = sig->getKeyInfoList();
- int nki = kil->getSize();
+ parser.parse(*memIS);
+ doc = parser.adoptDocument();
- cerr << "Checking Distinguished name is decoded correctly ... ";
- for (i = 0; i < nki; ++i) {
- if (kil->item(i)->getKeyInfoType() ==
DSIGKeyInfo::KEYINFO_X509) {
+ delete(memIS);
+ delete[] mbuf;
- if (strEquals(s_tstDName, ((DSIGKeyInfoX509 *)
kil->item(i))->getX509SubjectName())) {
- cerr << "yes" << endl;
- }
- else {
- cerr << "decoded incorrectly" << endl;;
- exit (1);
- }
- }
- if (kil->item(i)->getKeyInfoType() ==
DSIGKeyInfo::KEYINFO_PGPDATA) {
-
- cerr << "Validating PGPData read back OK ... ";
+ cerr << "done\nValidating signature ...";
+
+ /*
+ * Validate signature
+ */
- DSIGKeyInfoPGPData * p = (DSIGKeyInfoPGPData
*)kil->item(i);
+ sig = prov.newSignatureFromDOM(doc);
+ sig->load();
+ sig->setSigningKey(createHMACKey((unsigned char *)
"secret"));
- if (!(strEquals(p->getKeyID(), s_tstPGPKeyID) &&
- strEquals(p->getKeyPacket(),
s_tstPGPKeyPacket))) {
+ if (sig->verify()) {
+ cerr << "OK" << endl;
+ }
+ else {
+ cerr << "Failed\n" << endl;
+ char * e =
XMLString::transcode(sig->getErrMsgs());
+ cerr << e << endl;
+ delete [] e;
+ exit(1);
+ }
- cerr << "no!";
- exit(1);
+ /*
+ * Ensure DNames are read back in and decoded properly
+ */
+
+ DSIGKeyInfoList * kil = sig->getKeyInfoList();
+ int nki = kil->getSize();
+
+ cerr << "Checking Distinguished name is decoded
correctly ... ";
+ for (i = 0; i < nki; ++i) {
+
+ if (kil->item(i)->getKeyInfoType() ==
DSIGKeyInfo::KEYINFO_X509) {
+
+ if (strEquals(s_tstDName,
((DSIGKeyInfoX509 *) kil->item(i))->getX509SubjectName())) {
+ cerr << "yes" << endl;
+ }
+ else {
+ cerr << "decoded incorrectly"
<< endl;;
+ exit (1);
+ }
}
+ if (kil->item(i)->getKeyInfoType() ==
DSIGKeyInfo::KEYINFO_PGPDATA) {
+
+ cerr << "Validating PGPData read back
OK ... ";
- cerr << "yes\n";
- }
- if (kil->item(i)->getKeyInfoType() ==
DSIGKeyInfo::KEYINFO_SPKIDATA) {
-
- cerr << "Validating SPKIData read back OK ... ";
+ DSIGKeyInfoPGPData * p =
(DSIGKeyInfoPGPData *)kil->item(i);
- DSIGKeyInfoSPKIData * s = (DSIGKeyInfoSPKIData
*)kil->item(i);
+ if (!(strEquals(p->getKeyID(),
s_tstPGPKeyID) &&
+ strEquals(p->getKeyPacket(),
s_tstPGPKeyPacket))) {
- if (s->getSexpSize() != 2) {
- cerr << "no - expected two
S-expressions";
- exit(1);
+ cerr << "no!";
+ exit(1);
+ }
+
+ cerr << "yes\n";
}
+ if (kil->item(i)->getKeyInfoType() ==
DSIGKeyInfo::KEYINFO_SPKIDATA) {
+
+ cerr << "Validating SPKIData read back
OK ... ";
+
+ DSIGKeyInfoSPKIData * s =
(DSIGKeyInfoSPKIData *)kil->item(i);
+
+ if (s->getSexpSize() != 2) {
+ cerr << "no - expected two
S-expressions";
+ exit(1);
+ }
+
+ if (!(strEquals(s->getSexp(0),
s_tstSexp1) &&
+ strEquals(s->getSexp(1),
s_tstSexp2))) {
- if (!(strEquals(s->getSexp(0), s_tstSexp1) &&
- strEquals(s->getSexp(1), s_tstSexp2))) {
+ cerr << "no!";
+ exit(1);
+ }
- cerr << "no!";
- exit(1);
+ cerr << "yes\n";
}
+ if (kil->item(i)->getKeyInfoType() ==
DSIGKeyInfo::KEYINFO_MGMTDATA) {
+
+ cerr << "Validating MgmtData read back
OK ... ";
- cerr << "yes\n";
- }
- if (kil->item(i)->getKeyInfoType() ==
DSIGKeyInfo::KEYINFO_MGMTDATA) {
-
- cerr << "Validating MgmtData read back OK ... ";
+ DSIGKeyInfoMgmtData * m =
(DSIGKeyInfoMgmtData *)kil->item(i);
- DSIGKeyInfoMgmtData * m = (DSIGKeyInfoMgmtData
*)kil->item(i);
+ if (!strEquals(m->getData(),
s_tstMgmtData)) {
- if (!strEquals(m->getData(), s_tstMgmtData)) {
+ cerr << "no!";
+ exit(1);
+ }
- cerr << "no!";
- exit(1);
+ cerr << "yes\n";
}
-
- cerr << "yes\n";
}
}
- }
- catch (XSECException &e)
- {
- cerr << "An error occured during signature processing\n
Message: ";
- char * ce = XMLString::transcode(e.getMsg());
- cerr << ce << endl;
- delete ce;
- exit(1);
+ catch (XSECException &e)
+ {
+ cerr << "An error occured during signature processing\n
Message: ";
+ char * ce = XMLString::transcode(e.getMsg());
+ cerr << ce << endl;
+ delete ce;
+ exit(1);
+
+ }
+ catch (XSECCryptoException &e)
+ {
+ cerr << "A cryptographic error occured during signature
processing\n Message: "
+ << e.getMsg() << endl;
+ exit(1);
+ }
+
+ DOMWriter *theSerializer =
((DOMImplementationLS*)impl)->createDOMWriter();
+
+ theSerializer->setEncoding(MAKE_UNICODE_STRING("UTF-8"));
+ if
(theSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, false))
+
theSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, false);
+
+
+ XMLFormatTarget *formatTarget = new StdOutFormatTarget();
+
+ theSerializer->writeNode(formatTarget, *doc);
- }
- catch (XSECCryptoException &e)
- {
- cerr << "A cryptographic error occured during signature
processing\n Message: "
- << e.getMsg() << endl;
- exit(1);
+ cout << endl;
+
+ delete theSerializer;
+ delete formatTarget;
+
+ doc->release();
+
+ cerr << "All tests passed" << endl;
+
}
- DOMWriter *theSerializer =
((DOMImplementationLS*)impl)->createDOMWriter();
+ XSECPlatformUtils::Terminate();
+#ifndef XSEC_NO_XALAN
+ XalanTransformer::terminate();
+ XPathEvaluator::terminate();
+#endif
+ XMLPlatformUtils::Terminate();
- theSerializer->setEncoding(MAKE_UNICODE_STRING("UTF-8"));
- if (theSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint,
false))
- theSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint,
false);
+#if defined (_DEBUG) && defined (_MSC_VER)
+ _CrtMemCheckpoint( &s2 );
- XMLFormatTarget *formatTarget = new StdOutFormatTarget();
+ if ( _CrtMemDifference( &s3, &s1, &s2 ) && (
+ s3.lCounts[0] > 0 ||
+ s3.lCounts[1] > 1 ||
+ // s3.lCounts[2] > 2 || We don't worry about C Runtime
+ s3.lCounts[3] > 0 ||
+ s3.lCounts[4] > 0)) {
+
+ // Note that there is generally 1 Normal and 1 CRT block
+ // still taken. 1 is from Xalan and 1 from stdio
+
+ // Send all reports to STDOUT
+ _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
+ _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
+ _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
+ _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT );
+ _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
+ _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT );
- theSerializer->writeNode(formatTarget, *doc);
-
- cout << endl;
+ // Dumpy memory stats
- delete theSerializer;
- delete formatTarget;
+ _CrtMemDumpAllObjectsSince( &s3 );
+ _CrtMemDumpStatistics( &s3 );
+ }
- doc->release();
+ // Now turn off memory leak checking and end as there are some
+ // Globals that are allocated that get seen as leaks (Xalan?)
+
+ int dbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
+ dbgFlag &= ~(_CRTDBG_LEAK_CHECK_DF);
+ _CrtSetDbgFlag( dbgFlag );
+
+#endif
- cerr << "All tests passed" << endl;
return 0;