Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
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 Pascal (Lazarus/Delphi) Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.XmlDSig,
Chilkat.StringBuilder;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
sbXml: TStringBuilder;
validator: TXmlDSig;
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 := TStringBuilder.Create;
success := sbXml.LoadFile('qa_data/xml_dsig_valid_samples/externalFile/test.pdf.XAdES','utf-8');
if (success = False) then
begin
WriteLn('Failed to load XAdES input file.');
Exit;
end;
validator := TXmlDSig.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.
validator.ExternalRefDirs := 'qa_data/externalFiles;qa_data/xml_dsig_valid_samples/externalFile;c:/someOtherDir';
success := validator.LoadSignatureSb(sbXml);
if (success = False) then
begin
WriteLn(validator.LastErrorText);
Exit;
end;
// Validate signatures as usual..
i := 0;
while i < validator.NumSignatures do
begin
validator.Selector := i;
valid := validator.VerifySignature(True);
WriteLn('Signature ' + i + 1 + ' and all reference digests OK = ' + valid);
i := i + 1;
end;
sbXml.Free;
validator.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.