Unicode C
Unicode 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 Unicode C Downloads
#include <C_CkPfxW.h>
#include <C_CkPrivateKeyW.h>
#include <C_CkRsaW.h>
#include <C_CkCrypt2W.h>
#include <C_CkBinDataW.h>
void ChilkatSample(void)
{
BOOL success;
const wchar_t *concatenatedParams;
HCkPfxW pfx;
HCkPrivateKeyW privKey;
HCkRsaW rsa;
const wchar_t *hexSig;
HCkCrypt2W crypt;
HCkBinDataW bd;
const wchar_t *md5_summary;
success = FALSE;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
concatenatedParams = L"12345678|2019-06-12T17:05:43+02:00|9952|bb123bb1231|cc123cc1231|ss123ss123|199.01";
// Get the private key from a pfx file.
pfx = CkPfxW_Create();
success = CkPfxW_LoadPfxFile(pfx,L"qa_data/pfx/cert_test123.pfx",L"test123");
if (success == FALSE) {
wprintf(L"%s\n",CkPfxW_lastErrorText(pfx));
CkPfxW_Dispose(pfx);
return;
}
privKey = CkPrivateKeyW_Create();
success = CkPfxW_PrivateKeyAt(pfx,0,privKey);
if (success == FALSE) {
wprintf(L"%s\n",CkPfxW_lastErrorText(pfx));
CkPfxW_Dispose(pfx);
CkPrivateKeyW_Dispose(privKey);
return;
}
// Create IIC signature according to RSASSA-PKCS-v1_5 using SHA256
rsa = CkRsaW_Create();
success = CkRsaW_UsePrivateKey(rsa,privKey);
if (success == FALSE) {
wprintf(L"%s\n",CkRsaW_lastErrorText(rsa));
CkPfxW_Dispose(pfx);
CkPrivateKeyW_Dispose(privKey);
CkRsaW_Dispose(rsa);
return;
}
// PKCS-v1_5 is used by default.
CkRsaW_putEncodingMode(rsa,L"hex");
CkRsaW_putCharset(rsa,L"utf-8");
hexSig = CkRsaW_signStringENC(rsa,concatenatedParams,L"sha256");
wprintf(L"Signature value result is: %s\n",hexSig);
// Compute the MD5 hash of the bytes.
crypt = CkCrypt2W_Create();
CkCrypt2W_putEncodingMode(crypt,L"hex");
CkCrypt2W_putHashAlgorithm(crypt,L"md5");
bd = CkBinDataW_Create();
CkBinDataW_AppendEncoded(bd,hexSig,L"hex");
md5_summary = CkCrypt2W_hashBdENC(crypt,bd);
wprintf(L"MD5 summary value is: %s\n",md5_summary);
CkPfxW_Dispose(pfx);
CkPrivateKeyW_Dispose(privKey);
CkRsaW_Dispose(rsa);
CkCrypt2W_Dispose(crypt);
CkBinDataW_Dispose(bd);
}