Sample code for 30+ languages & platforms
Lianja

Get Certificates within XML Signature

See more XML Digital Signatures Examples

Demonstrates how to get the certificates contained within an XML signature.

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

loSbXml = createobject("CkStringBuilder")

// Load XML containing one or more signatures.
llSuccess = loSbXml.LoadFile("qa_data/xml_dsig_valid_samples/multipleSigners/sp.pdf.XAdES.xml","utf-8")
if (llSuccess = .F.) then
    ? "Failed to load the XML file.."
    release loSbXml
    return
endif

loDsig = createobject("CkXmlDSig")

// 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.
llSuccess = loDsig.LoadSignatureSb(loSbXml)
if (llSuccess <> .T.) then
    ? loDsig.LastErrorText
    release loSbXml
    release loDsig
    return
endif

// For each signature, verify and also get the certificate(s) contained within each Signature.
i = 0
loSaCerts = createobject("CkStringArray")
loCert = createobject("CkCert")

? "numSignatures = " + str(loDsig.NumSignatures)

do while i < loDsig.NumSignatures
    // Select the Nth signature by setting the Selector property.
    loDsig.Selector = i

    llBVerifyReferenceDigests = .T.
    llBVerified = loDsig.VerifySignature(llBVerifyReferenceDigests)
    ? "Signature " + str(i + 1) + " verified = " + str(llBVerified)

    // Get the certificates embedded in this signature.
    loSaCerts.Clear()
    llSuccess = loDsig.GetCerts(loSaCerts)
    if (llSuccess = .T.) then
        j = 0
        do while j < loSaCerts.Count
            llSuccess = loCert.LoadFromBase64(loSaCerts.GetString(j))
            if (llSuccess = .T.) then
                ? "    " + loCert.SubjectDN
            endif

            j = j + 1
        enddo
    endif

    i = i + 1
enddo


release loSbXml
release loDsig
release loSaCerts
release loCert