PureBasic
PureBasic
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 PureBasic Downloads
IncludeFile "CkBinData.pb"
IncludeFile "CkPrivateKey.pb"
IncludeFile "CkRsa.pb"
IncludeFile "CkPfx.pb"
IncludeFile "CkCrypt2.pb"
Procedure ChilkatExample()
success.i = 0
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
concatenatedParams.s = "12345678|2019-06-12T17:05:43+02:00|9952|bb123bb1231|cc123cc1231|ss123ss123|199.01"
; Get the private key from a pfx file.
pfx.i = CkPfx::ckCreate()
If pfx.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkPfx::ckLoadPfxFile(pfx,"qa_data/pfx/cert_test123.pfx","test123")
If success = 0
Debug CkPfx::ckLastErrorText(pfx)
CkPfx::ckDispose(pfx)
ProcedureReturn
EndIf
privKey.i = CkPrivateKey::ckCreate()
If privKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkPfx::ckPrivateKeyAt(pfx,0,privKey)
If success = 0
Debug CkPfx::ckLastErrorText(pfx)
CkPfx::ckDispose(pfx)
CkPrivateKey::ckDispose(privKey)
ProcedureReturn
EndIf
; Create IIC signature according to RSASSA-PKCS-v1_5 using SHA256
rsa.i = CkRsa::ckCreate()
If rsa.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkRsa::ckUsePrivateKey(rsa,privKey)
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
CkPfx::ckDispose(pfx)
CkPrivateKey::ckDispose(privKey)
CkRsa::ckDispose(rsa)
ProcedureReturn
EndIf
; PKCS-v1_5 is used by default.
CkRsa::setCkEncodingMode(rsa, "hex")
CkRsa::setCkCharset(rsa, "utf-8")
hexSig.s = CkRsa::ckSignStringENC(rsa,concatenatedParams,"sha256")
Debug "Signature value result is: " + hexSig
; Compute the MD5 hash of the bytes.
crypt.i = CkCrypt2::ckCreate()
If crypt.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkCrypt2::setCkEncodingMode(crypt, "hex")
CkCrypt2::setCkHashAlgorithm(crypt, "md5")
bd.i = CkBinData::ckCreate()
If bd.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkBinData::ckAppendEncoded(bd,hexSig,"hex")
md5_summary.s = CkCrypt2::ckHashBdENC(crypt,bd)
Debug "MD5 summary value is: " + md5_summary
CkPfx::ckDispose(pfx)
CkPrivateKey::ckDispose(privKey)
CkRsa::ckDispose(rsa)
CkCrypt2::ckDispose(crypt)
CkBinData::ckDispose(bd)
ProcedureReturn
EndProcedure