Sample code for 30+ languages & platforms
PureBasic

Verify XAdES with External File Reference

See more XML Digital Signatures Examples

Demonstrates how to validate an XML digital signature that contains a reference to an external file. (This is one way of doing it..)

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.

    ; Load the XAdES file to be validated..
    sbXml.i = CkStringBuilder::ckCreate()
    If sbXml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkStringBuilder::ckLoadFile(sbXml,"qa_data/xml_dsig_valid_samples/externalFile/test.pdf.XAdES","utf-8")
    If success = 0
        Debug "Failed to load XAdES input file."
        CkStringBuilder::ckDispose(sbXml)
        ProcedureReturn
    EndIf

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

    ; Specify a set of absolute or relative directory paths to be searched for any external file references.
    ; Directory paths are separated by semicolon chars.
    CkXmlDSig::setCkExternalRefDirs(validator, "qa_data/externalFiles;qa_data/xml_dsig_valid_samples/externalFile;c:/someOtherDir")

    success = CkXmlDSig::ckLoadSignatureSb(validator,sbXml)
    If success = 0
        Debug CkXmlDSig::ckLastErrorText(validator)
        CkStringBuilder::ckDispose(sbXml)
        CkXmlDSig::ckDispose(validator)
        ProcedureReturn
    EndIf

    ; Validate signatures as usual..
    i.i = 0
    While i < CkXmlDSig::ckNumSignatures(validator)
        CkXmlDSig::setCkSelector(validator, i)

        valid.i = CkXmlDSig::ckVerifySignature(validator,1)
        Debug "Signature " + Str(i + 1) + " and all reference digests OK = " + Str(valid)

        i = i + 1
    Wend


    CkStringBuilder::ckDispose(sbXml)
    CkXmlDSig::ckDispose(validator)


    ProcedureReturn
EndProcedure