Sample code for 30+ languages & platforms
Java Requires Chilkat v11.0.0+

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 Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.BinData;
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Crypt2;
import com.chilkatsoft.chilkat2.Pfx;
import com.chilkatsoft.chilkat2.PrivateKey;
import com.chilkatsoft.chilkat2.Rsa;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

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

        // Get the private key from a pfx file.
        Pfx pfx = new Pfx();
        try {
            pfx.loadPfxFile("qa_data/pfx/cert_test123.pfx", "test123");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        PrivateKey privKey = new PrivateKey();
        try {
            pfx.privateKeyAt(0, privKey);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // Create IIC signature according to RSASSA-PKCS-v1_5 using SHA256
        Rsa rsa = new Rsa();
        try {
            rsa.usePrivateKey(privKey);
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // PKCS-v1_5 is used by default.
        rsa.setEncodingMode("hex");
        rsa.setCharset("utf-8");
        String hexSig = rsa.signStringENC(concatenatedParams, "sha256");

        System.out.println("Signature value result is: " + hexSig);

        // Compute the MD5 hash of the bytes.
        Crypt2 crypt = new Crypt2();
        crypt.setEncodingMode("hex");
        crypt.setHashAlgorithm("md5");
        BinData bd = new BinData();
        bd.appendEncoded(hexSig, "hex");
        String md5_summary = crypt.hashBdENC(bd);

        System.out.println("MD5 summary value is: " + md5_summary);
    }
}