Sample code for 30+ languages & platforms
PowerBuilder

ClickBank Decrypt Instant Notification

See more ClickBank Examples

Demonstrates how to decrypt a ClickBank instant notification. See Instant Notification Service for more information and alternative code snippets.

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
string ls_SecretKey
string ls_JsonStr
oleobject loo_Json
oleobject loo_BdNotif
oleobject loo_BdIv
oleobject loo_Crypt
string ls_HexSha1
oleobject loo_BdKey

li_Success = 0

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

// secret key from your ClickBank account
ls_SecretKey = "MY_SECRET_KEY"

ls_JsonStr = "{~"notification~":~"BASE64_NOTIFICATION~",~"iv~":~"BASE64_IV~"}"

loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")
if li_rc < 0 then
    destroy loo_Json
    MessageBox("Error","Connecting to COM object failed")
    return
end if
li_Success = loo_Json.Load(ls_JsonStr)

// Get the encrypted notification (binary) and IV from the JSON.
loo_BdNotif = create oleobject
li_rc = loo_BdNotif.ConnectToNewObject("Chilkat.BinData")

loo_BdIv = create oleobject
li_rc = loo_BdIv.ConnectToNewObject("Chilkat.BinData")

li_Success = loo_BdNotif.AppendEncoded(loo_Json.StringOf("notification"),"base64")
li_Success = loo_BdIv.AppendEncoded(loo_Json.StringOf("iv"),"base64")

// Get an SHA1 digest (as a hex string) of the secret key.
// A SHA1 digest is 20 bytes.  Therefore the hex string is 40 chars.
// Treat each us-ascii char as a binary byte of the secret key.
// 256-bit AES needs a 256-bit key, which is 32-bytes.  Therefore
// use the 1st 32 us-ascii chars of the hex SHA1 as the AES secret key.

loo_Crypt = create oleobject
li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2")

// Because we're using the hex string as the actual AES key, it matters whether the hex is uppercase or lowercase.
// We want lowercase.
loo_Crypt.EncodingMode = "hex_lower"
loo_Crypt.HashAlgorithm = "sha1"
ls_HexSha1 = loo_Crypt.HashStringENC(ls_SecretKey)
Write-Debug ls_HexSha1

// Treat the hex string as binary data for the AES key..
loo_BdKey = create oleobject
li_rc = loo_BdKey.ConnectToNewObject("Chilkat.BinData")

loo_BdKey.AppendString(ls_HexSha1,"us-ascii")
loo_BdKey.RemoveChunk(32,8)

loo_Crypt.KeyLength = 256
loo_Crypt.CryptAlgorithm = "aes"
loo_Crypt.CipherMode = "cbc"

// We can use any encoding because were just getting the binary bytes in an encoding, and then setting from the same encoding.
// We'll just use base64..
loo_Crypt.SetEncodedIV(loo_BdIv.GetEncoded("base64"),"base64")
loo_Crypt.SetEncodedKey(loo_BdKey.GetEncoded("base64"),"base64")

loo_Crypt.DecryptBd(loo_BdNotif)
Write-Debug "Decrypted: " + loo_BdNotif.GetString("utf-8")


destroy loo_Json
destroy loo_BdNotif
destroy loo_BdIv
destroy loo_Crypt
destroy loo_BdKey