Sample code for 30+ languages & platforms
DataFlex

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 DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Variant vSbXml
    Handle hoSbXml
    Handle hoValidator
    Integer i
    Boolean iValid
    String sTemp1

    Move False To iSuccess

    // 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..
    Get Create (RefClass(cComChilkatStringBuilder)) To hoSbXml
    If (Not(IsComObjectCreated(hoSbXml))) Begin
        Send CreateComObject of hoSbXml
    End
    Get ComLoadFile Of hoSbXml "qa_data/xml_dsig_valid_samples/externalFile/test.pdf.XAdES" "utf-8" To iSuccess
    If (iSuccess = False) Begin
        Showln "Failed to load XAdES input file."
        Procedure_Return
    End

    Get Create (RefClass(cComChilkatXmlDSig)) To hoValidator
    If (Not(IsComObjectCreated(hoValidator))) Begin
        Send CreateComObject of hoValidator
    End

    // Specify a set of absolute or relative directory paths to be searched for any external file references.
    // Directory paths are separated by semicolon chars.
    Set ComExternalRefDirs Of hoValidator To "qa_data/externalFiles;qa_data/xml_dsig_valid_samples/externalFile;c:/someOtherDir"

    Get pvComObject of hoSbXml to vSbXml
    Get ComLoadSignatureSb Of hoValidator vSbXml To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoValidator To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Validate signatures as usual..
    Move 0 To i
    While (i < (ComNumSignatures(hoValidator)))
        Set ComSelector Of hoValidator To i

        Get ComVerifySignature Of hoValidator True To iValid
        Showln "Signature " (i + 1) " and all reference digests OK = " iValid

        Move (i + 1) To i
    Loop



End_Procedure