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

C++
#include <CkPfx.h>
#include <CkPrivateKey.h>
#include <CkRsa.h>
#include <CkCrypt2.h>
#include <CkBinData.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 char *concatenatedParams = "12345678|2019-06-12T17:05:43+02:00|9952|bb123bb1231|cc123cc1231|ss123ss123|199.01";

    //  Get the private key from a pfx file.
    CkPfx pfx;
    success = pfx.LoadPfxFile("qa_data/pfx/cert_test123.pfx","test123");
    if (success == false) {
        std::cout << pfx.lastErrorText() << "\r\n";
        return;
    }

    CkPrivateKey privKey;
    success = pfx.PrivateKeyAt(0,privKey);
    if (success == false) {
        std::cout << pfx.lastErrorText() << "\r\n";
        return;
    }

    //  Create IIC signature according to RSASSA-PKCS-v1_5 using SHA256
    CkRsa rsa;
    success = rsa.UsePrivateKey(privKey);
    if (success == false) {
        std::cout << rsa.lastErrorText() << "\r\n";
        return;
    }

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

    std::cout << "Signature value result is: " << hexSig << "\r\n";

    //  Compute the MD5 hash of the bytes.
    CkCrypt2 crypt;
    crypt.put_EncodingMode("hex");
    crypt.put_HashAlgorithm("md5");
    CkBinData bd;
    bd.AppendEncoded(hexSig,"hex");
    const char *md5_summary = crypt.hashBdENC(bd);

    std::cout << "MD5 summary value is: " << md5_summary << "\r\n";
    }