Sample code for 30+ languages & platforms
PowerBuilder

Get Certificates within XML Signature

See more XML Digital Signatures Examples

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

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_SbXml
oleobject loo_Dsig
integer i
oleobject loo_SaCerts
oleobject loo_Cert
integer li_BVerifyReferenceDigests
integer li_BVerified
integer j

li_Success = 0

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

loo_SbXml = create oleobject
li_rc = loo_SbXml.ConnectToNewObject("Chilkat.StringBuilder")
if li_rc < 0 then
    destroy loo_SbXml
    MessageBox("Error","Connecting to COM object failed")
    return
end if

// Load XML containing one or more signatures.
li_Success = loo_SbXml.LoadFile("qa_data/xml_dsig_valid_samples/multipleSigners/sp.pdf.XAdES.xml","utf-8")
if li_Success = 0 then
    Write-Debug "Failed to load the XML file.."
    destroy loo_SbXml
    return
end if

loo_Dsig = create oleobject
li_rc = loo_Dsig.ConnectToNewObject("Chilkat.XmlDSig")

// 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.
li_Success = loo_Dsig.LoadSignatureSb(loo_SbXml)
if li_Success <> 1 then
    Write-Debug loo_Dsig.LastErrorText
    destroy loo_SbXml
    destroy loo_Dsig
    return
end if

// For each signature, verify and also get the certificate(s) contained within each Signature.
i = 0
loo_SaCerts = create oleobject
li_rc = loo_SaCerts.ConnectToNewObject("Chilkat.StringArray")

loo_Cert = create oleobject
li_rc = loo_Cert.ConnectToNewObject("Chilkat.Cert")

Write-Debug "numSignatures = " + string(loo_Dsig.NumSignatures)

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

    li_BVerifyReferenceDigests = 1
    li_BVerified = loo_Dsig.VerifySignature(li_BVerifyReferenceDigests)
    Write-Debug "Signature " + string(i + 1) + " verified = " + string(li_BVerified)

    // Get the certificates embedded in this signature.
    loo_SaCerts.Clear()
    li_Success = loo_Dsig.GetCerts(loo_SaCerts)
    if li_Success = 1 then
        j = 0
        do while j < loo_SaCerts.Count
            li_Success = loo_Cert.LoadFromBase64(loo_SaCerts.GetString(j))
            if li_Success = 1 then
                Write-Debug "    " + loo_Cert.SubjectDN
            end if

            j = j + 1
        loop
    end if

    i = i + 1
loop


destroy loo_SbXml
destroy loo_Dsig
destroy loo_SaCerts
destroy loo_Cert