C
C
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 C Downloads
#include <C_CkPfx.h>
#include <C_CkPrivateKey.h>
#include <C_CkRsa.h>
#include <C_CkCrypt2.h>
#include <C_CkBinData.h>
void ChilkatSample(void)
{
BOOL success;
const char *concatenatedParams;
HCkPfx pfx;
HCkPrivateKey privKey;
HCkRsa rsa;
const char *hexSig;
HCkCrypt2 crypt;
HCkBinData bd;
const char *md5_summary;
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) {
printf("%s\n",CkPfx_lastErrorText(pfx));
CkPfx_Dispose(pfx);
return;
}
privKey = CkPrivateKey_Create();
success = CkPfx_PrivateKeyAt(pfx,0,privKey);
if (success == FALSE) {
printf("%s\n",CkPfx_lastErrorText(pfx));
CkPfx_Dispose(pfx);
CkPrivateKey_Dispose(privKey);
return;
}
// Create IIC signature according to RSASSA-PKCS-v1_5 using SHA256
rsa = CkRsa_Create();
success = CkRsa_UsePrivateKey(rsa,privKey);
if (success == FALSE) {
printf("%s\n",CkRsa_lastErrorText(rsa));
CkPfx_Dispose(pfx);
CkPrivateKey_Dispose(privKey);
CkRsa_Dispose(rsa);
return;
}
// PKCS-v1_5 is used by default.
CkRsa_putEncodingMode(rsa,"hex");
CkRsa_putCharset(rsa,"utf-8");
hexSig = CkRsa_signStringENC(rsa,concatenatedParams,"sha256");
printf("Signature value result is: %s\n",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);
printf("MD5 summary value is: %s\n",md5_summary);
CkPfx_Dispose(pfx);
CkPrivateKey_Dispose(privKey);
CkRsa_Dispose(rsa);
CkCrypt2_Dispose(crypt);
CkBinData_Dispose(bd);
}