Delphi DLL
Delphi DLL
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=2Chilkat Delphi DLL Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Pfx, BinData, PrivateKey, Rsa, Crypt2;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
concatenatedParams: PWideChar;
pfx: HCkPfx;
privKey: HCkPrivateKey;
rsa: HCkRsa;
hexSig: PWideChar;
crypt: HCkCrypt2;
bd: HCkBinData;
md5_summary: PWideChar;
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 := CkPfx_Create();
success := CkPfx_LoadPfxFile(pfx,'qa_data/pfx/cert_test123.pfx','test123');
if (success = False) then
begin
Memo1.Lines.Add(CkPfx__lastErrorText(pfx));
Exit;
end;
privKey := CkPrivateKey_Create();
success := CkPfx_PrivateKeyAt(pfx,0,privKey);
if (success = False) then
begin
Memo1.Lines.Add(CkPfx__lastErrorText(pfx));
Exit;
end;
// Create IIC signature according to RSASSA-PKCS-v1_5 using SHA256
rsa := CkRsa_Create();
success := CkRsa_UsePrivateKey(rsa,privKey);
if (success = False) then
begin
Memo1.Lines.Add(CkRsa__lastErrorText(rsa));
Exit;
end;
// PKCS-v1_5 is used by default.
CkRsa_putEncodingMode(rsa,'hex');
CkRsa_putCharset(rsa,'utf-8');
hexSig := CkRsa__signStringENC(rsa,concatenatedParams,'sha256');
Memo1.Lines.Add('Signature value result is: ' + hexSig);
// Compute the MD5 hash of the bytes.
crypt := CkCrypt2_Create();
CkCrypt2_putEncodingMode(crypt,'hex');
CkCrypt2_putHashAlgorithm(crypt,'md5');
bd := CkBinData_Create();
CkBinData_AppendEncoded(bd,hexSig,'hex');
md5_summary := CkCrypt2__hashBdENC(crypt,bd);
Memo1.Lines.Add('MD5 summary value is: ' + md5_summary);
CkPfx_Dispose(pfx);
CkPrivateKey_Dispose(privKey);
CkRsa_Dispose(rsa);
CkCrypt2_Dispose(crypt);
CkBinData_Dispose(bd);
end;