Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

ITIDA Canonicalize JSON and Compute SHA256 Hash

See more Egypt ITIDA Examples

Demonstrates creating the canonical (ITIDA) version of a JSON document, and then computes the SHA256 hash of the canonicalized JSON.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
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.StringBuilder;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  sb: TStringBuilder;

begin
  success := False;

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

  //  Load the JSON containing the document to be signed.

  //  The JSON file should look like this:
  //  NOTE: The JSON should NOT begin with "{ "documents" : [ ..."

  //        {
  //           "issuer":{
  //              "address":{
  //                 "branchID":"0",
  //                 "country":"EG",
  //                 "regionCity":"Cairo",
  //                 "postalCode":"",
  //                 "buildingNumber":"0",
  //                 "street":"123rd Street",
  //                 "governate":"GOVERNATE"
  //              },
  //              "type":"B",
  //              "id":"209999899",
  //              "name":"Xyz SAE"
  //           },
  //  ...
  //  ...

  sb := TStringBuilder.Create;
  success := sb.LoadFile('my_invoice.json','utf-8');
  if (success = False) then
    begin
      WriteLn('Failed to load input file.');
      Exit;
    end;

  //  Convert the contents of sb to the ITIDA canonical form.
  //  Always pass utf-8 for the 2nd arg.
  sb.Encode('itida','utf-8');

  //  Examine the canonicalized JSON
  WriteLn(sb.GetAsString());

  //  Compute the SHA256 hash and show the SHA256 in hex format
  WriteLn('SHA256 hash: ' + sb.GetHash('sha256','hex','utf-8'));


  sb.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.