Sample code for 30+ languages & platforms
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=2

Chilkat Unicode C++ Downloads

Unicode C++
#include <CkPfxW.h>
#include <CkPrivateKeyW.h>
#include <CkRsaW.h>
#include <CkCrypt2W.h>
#include <CkBinDataW.h>

void ChilkatSample(void)
    {
    bool success = false;

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    const wchar_t *concatenatedParams = L"12345678|2019-06-12T17:05:43+02:00|9952|bb123bb1231|cc123cc1231|ss123ss123|199.01";

    // Get the private key from a pfx file.
    CkPfxW pfx;
    success = pfx.LoadPfxFile(L"qa_data/pfx/cert_test123.pfx",L"test123");
    if (success == false) {
        wprintf(L"%s\n",pfx.lastErrorText());
        return;
    }

    CkPrivateKeyW privKey;
    success = pfx.PrivateKeyAt(0,privKey);
    if (success == false) {
        wprintf(L"%s\n",pfx.lastErrorText());
        return;
    }

    // Create IIC signature according to RSASSA-PKCS-v1_5 using SHA256
    CkRsaW rsa;
    success = rsa.UsePrivateKey(privKey);
    if (success == false) {
        wprintf(L"%s\n",rsa.lastErrorText());
        return;
    }

    // PKCS-v1_5 is used by default.
    rsa.put_EncodingMode(L"hex");
    rsa.put_Charset(L"utf-8");
    const wchar_t *hexSig = rsa.signStringENC(concatenatedParams,L"sha256");

    wprintf(L"Signature value result is: %s\n",hexSig);

    // Compute the MD5 hash of the bytes.
    CkCrypt2W crypt;
    crypt.put_EncodingMode(L"hex");
    crypt.put_HashAlgorithm(L"md5");
    CkBinDataW bd;
    bd.AppendEncoded(hexSig,L"hex");
    const wchar_t *md5_summary = crypt.hashBdENC(bd);

    wprintf(L"MD5 summary value is: %s\n",md5_summary);
    }