Pascal (Lazarus/Delphi)
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=2Chilkat 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.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.