Sample code for 30+ languages & platforms
Delphi ActiveX

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

Delphi ActiveX
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
concatenatedParams: WideString;
pfx: TChilkatPfx;
privKey: TPrivateKey;
rsa: TChilkatRsa;
hexSig: WideString;
crypt: TChilkatCrypt2;
bd: TChilkatBinData;
md5_summary: WideString;

begin
success := 0;

// 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 := TChilkatPfx.Create(Self);
success := pfx.LoadPfxFile('qa_data/pfx/cert_test123.pfx','test123');
if (success = 0) then
  begin
    Memo1.Lines.Add(pfx.LastErrorText);
    Exit;
  end;

privKey := TPrivateKey.Create(Self);
success := pfx.PrivateKeyAt(0,privKey.ControlInterface);
if (success = 0) then
  begin
    Memo1.Lines.Add(pfx.LastErrorText);
    Exit;
  end;

// Create IIC signature according to RSASSA-PKCS-v1_5 using SHA256
rsa := TChilkatRsa.Create(Self);
success := rsa.UsePrivateKey(privKey.ControlInterface);
if (success = 0) then
  begin
    Memo1.Lines.Add(rsa.LastErrorText);
    Exit;
  end;

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

Memo1.Lines.Add('Signature value result is: ' + hexSig);

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

Memo1.Lines.Add('MD5 summary value is: ' + md5_summary);
end;