PowerBuilder
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
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