C++
C++
Get Certificates within XML Signature
See more XML Digital Signatures Examples
Demonstrates how to get the certificates contained within an XML signature.Chilkat C++ Downloads
#include <CkStringBuilder.h>
#include <CkXmlDSig.h>
#include <CkStringArray.h>
#include <CkCert.h>
void ChilkatSample(void)
{
bool success = false;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
CkStringBuilder sbXml;
// Load XML containing one or more signatures.
success = sbXml.LoadFile("qa_data/xml_dsig_valid_samples/multipleSigners/sp.pdf.XAdES.xml","utf-8");
if (success == false) {
std::cout << "Failed to load the XML file.." << "\r\n";
return;
}
CkXmlDSig dsig;
// First load the XML containing the signatures to be verified.
// Note that this particular Signature already contains the RSA public key that will be used
// for verification.
success = dsig.LoadSignatureSb(sbXml);
if (success == false) {
std::cout << dsig.lastErrorText() << "\r\n";
return;
}
// For each signature, verify and also get the certificate(s) contained within each Signature.
int i = 0;
CkStringArray saCerts;
CkCert cert;
std::cout << "numSignatures = " << dsig.get_NumSignatures() << "\r\n";
while (i < dsig.get_NumSignatures()) {
// Select the Nth signature by setting the Selector property.
dsig.put_Selector(i);
bool bVerifyReferenceDigests = true;
bool bVerified = dsig.VerifySignature(bVerifyReferenceDigests);
std::cout << "Signature " << (i + 1) << " verified = " << bVerified << "\r\n";
// Get the certificates embedded in this signature.
saCerts.Clear();
success = dsig.GetCerts(saCerts);
if (success == true) {
int j = 0;
while (j < saCerts.get_Count()) {
success = cert.LoadFromBase64(saCerts.getString(j));
if (success == true) {
std::cout << " " << cert.subjectDN() << "\r\n";
}
j = j + 1;
}
}
i = i + 1;
}
}