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

IKOF Generation Code for Montenegro Fiscalization Service

See more _Miscellaneous_ Examples

Demonstrates computing the IKOF MD5 summary value as described in section 4.3 of this document: https://poreskauprava.gov.me/ResourceManager/FileDownload.aspx?rId=416042&rType=2

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.Pfx,
  Chilkat.BinData,
  Chilkat.PrivateKey,
  Chilkat.Rsa,
  Chilkat.Crypt2;

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

procedure RunDemo;
var
  success: Boolean;
  concatenatedParams: string;
  pfx: TPfx;
  privKey: TPrivateKey;
  rsa: TRsa;
  hexSig: string;
  crypt: TCrypt2;
  bd: TBinData;
  md5_summary: string;

begin
  success := False;

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

  concatenatedParams := '12345678|2019-06-12T17:05:43+02:00|9952|bb123bb1231|cc123cc1231|ss123ss123|199.01';

  //  Get the private key from a pfx file.
  pfx := TPfx.Create;
  success := pfx.LoadPfxFile('qa_data/pfx/cert_test123.pfx','test123');
  if (success = False) then
    begin
      WriteLn(pfx.LastErrorText);
      Exit;
    end;

  privKey := TPrivateKey.Create;
  success := pfx.PrivateKeyAt(0,privKey);
  if (success = False) then
    begin
      WriteLn(pfx.LastErrorText);
      Exit;
    end;

  //  Create IIC signature according to RSASSA-PKCS-v1_5 using SHA256
  rsa := TRsa.Create;
  success := rsa.UsePrivateKey(privKey);
  if (success = False) then
    begin
      WriteLn(rsa.LastErrorText);
      Exit;
    end;

  //  PKCS-v1_5 is used by default.
  rsa.EncodingMode := 'hex';
  rsa.Charset := 'utf-8';
  hexSig := rsa.SignStringENC(concatenatedParams,'sha256');

  WriteLn('Signature value result is: ' + hexSig);

  //  Compute the MD5 hash of the bytes.
  crypt := TCrypt2.Create;
  crypt.EncodingMode := 'hex';
  crypt.HashAlgorithm := 'md5';
  bd := TBinData.Create;
  bd.AppendEncoded(hexSig,'hex');
  md5_summary := crypt.HashBdENC(bd);

  WriteLn('MD5 summary value is: ' + md5_summary);


  pfx.Free;
  privKey.Free;
  rsa.Free;
  crypt.Free;
  bd.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.