Sample code for 30+ languages & platforms
PureBasic

Verify XML Digital Signature

See more XML Digital Signatures Examples

Verifies XML signatures in an XML file.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkXmlDSig.pb"

Procedure ChilkatExample()

    success.i = 0

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

    sbXml.i = CkStringBuilder::ckCreate()
    If sbXml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkStringBuilder::ckLoadFile(sbXml,"qa_data/xml_dsig_verify/csioz_sample.xml","utf-8")
    If success <> 1
        Debug "Failed to load XML file."
        CkStringBuilder::ckDispose(sbXml)
        ProcedureReturn
    EndIf

    dsig.i = CkXmlDSig::ckCreate()
    If dsig.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; First load the XML containing the signatures to be verified.
    success = CkXmlDSig::ckLoadSignatureSb(dsig,sbXml)
    If success <> 1
        Debug CkXmlDSig::ckLastErrorText(dsig)
        CkStringBuilder::ckDispose(sbXml)
        CkXmlDSig::ckDispose(dsig)
        ProcedureReturn
    EndIf

    ; It's possible that an XML document can contain multiple signatures.
    ; Each can be verified as follows:
    i.i = 0
    While i < CkXmlDSig::ckNumSignatures(dsig)
        ; Select the Nth signature by setting the Selector property.
        CkXmlDSig::setCkSelector(dsig, i)

        ; The bVerifyReferenceDigests argument determines if we want
        ; to also verify each reference digest.  If set to 0,
        ; then only the SignedInfo part of the Signature is verified.
        bVerifyReferenceDigests.i = 1
        bVerified.i = CkXmlDSig::ckVerifySignature(dsig,bVerifyReferenceDigests)
        Debug "Signature " + Str(i + 1) + " verified = " + Str(bVerified)

        i = i + 1
    Wend


    CkStringBuilder::ckDispose(sbXml)
    CkXmlDSig::ckDispose(dsig)


    ProcedureReturn
EndProcedure