Sample code for 30+ languages & platforms
Delphi DLL

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 Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, XmlDSig, StringBuilder;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
sbXml: HCkStringBuilder;
validator: HCkXmlDSig;
i: Integer;
valid: Boolean;

begin
success := False;

// 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 := CkStringBuilder_Create();
success := CkStringBuilder_LoadFile(sbXml,'qa_data/xml_dsig_valid_samples/externalFile/test.pdf.XAdES','utf-8');
if (success = False) then
  begin
    Memo1.Lines.Add('Failed to load XAdES input file.');
    Exit;
  end;

validator := CkXmlDSig_Create();

// 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_putExternalRefDirs(validator,'qa_data/externalFiles;qa_data/xml_dsig_valid_samples/externalFile;c:/someOtherDir');

success := CkXmlDSig_LoadSignatureSb(validator,sbXml);
if (success = False) then
  begin
    Memo1.Lines.Add(CkXmlDSig__lastErrorText(validator));
    Exit;
  end;

// Validate signatures as usual..
i := 0;
while i < CkXmlDSig_getNumSignatures(validator) do
  begin
    CkXmlDSig_putSelector(validator,i);

    valid := CkXmlDSig_VerifySignature(validator,True);
    Memo1.Lines.Add('Signature ' + IntToStr(i + 1) + ' and all reference digests OK = ' + IntToStr(Ord(valid)));

    i := i + 1;
  end;

CkStringBuilder_Dispose(sbXml);
CkXmlDSig_Dispose(validator);

end;