Berin, I am still new at programming with this stuff (actually I am a manager type who only programs a bit to keep my hand in). I have been extending the toy program that I was working on and have found a more elegant solution to the problem of how to check multiple DSIGs. I have found a standard Xerces method that will search the DOM tree and return Named Nodes. So the whole routine that I sent to you is not really needed. The following code snippet shows how to check multiple DSIGs using the Xerces routine (instead of my routine). Again the variable "result" is true if all DSIGs verify and the variable "sigcnt" contains the index of the last DSIG that verified correctly.
Ta John //Solution #2 (using Xerces methods) DomList = theDOM->getElementsByTagNameNS (DSIGConstants::s_unicodeStrURIDSIG, MAKE_UNICODE_STRING("Signature")); sigNode = DomList->item(0); sigcnt = 0; result = true; while ((result) && (sigNode != NULL)) { sig = prov.newSignatureFromDOM(theDOM, sigNode); // use your favourite Resolver xxxKeyResolver ires(NULL); sig->setKeyInfoResolver(&ires); try { sig->load(); result = sig->verify(); } catch (XSECException &e) { char * msg = XMLString::transcode(e.getMsg()); cerr << "An error occured during signature verification"n Message: " << msg << endl; XMLString::release(msg); result = false; } catch (XSECCryptoException &e) { cerr << "An error occured during signature verification"n Message: " << e.getMsg() << endl; ERR_load_crypto_strings(); BIO * bio_err; if ((bio_err=BIO_new(BIO_s_file())) != NULL) BIO_set_fp (bio_err,stderr,BIO_NOCLOSE|BIO_FP_TEXT); ERR_print_errors(bio_err); result = false; } sigcnt += 1; sigNode = DomList->item(sigcnt); }