Tcl
Tcl
Everyware API RSA Encrypt JSON
See more RSA Examples
Demonstrates how to RSA encrypt JSON using everyware.com's RSA public key.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
# First build the JSON to be encrypted.
set json [new_CkJsonObject]
CkJsonObject_UpdateString $json "provider_key" "USER GUID HERE"
CkJsonObject_UpdateString $json "menu_item" "payment"
set dt [new_CkDateTime]
CkDateTime_SetFromCurrentSystemTime $dt
CkJsonObject_UpdateString $json "date_time" [CkDateTime_getAsUnixTimeStr $dt 0]
# This build JSON like the following:
# {
# "provider_key": "USER GUID HERE",
# "menu_item": "payment",
# "date_time": "1588163411"
# }
# When we sign, we'll want to sign the most compact JSON possible
CkJsonObject_put_EmitCompact $json 1
# Everyware's RSA public key is at: https://docs.everyware.com/docs/everyware-public-rsa-key
set sb [new_CkStringBuilder]
set bCrlf 1
CkStringBuilder_AppendLine $sb "-----BEGIN PUBLIC KEY-----" $bCrlf
CkStringBuilder_AppendLine $sb "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxNbflxUSWQ3XJ1N9dAoh" $bCrlf
CkStringBuilder_AppendLine $sb "k+uaiFsg3wkPi9LGS/mH8DtHBgZxKyz+oQBDtnDd9FDEo0ql7MMgCMsTAv27W5vk" $bCrlf
CkStringBuilder_AppendLine $sb "Pu0rm6zhcTeYquWEuVCS7VtVsyTATr0Z9WhqNeZlIRurovJAXl2jRDX6QeY5dayC" $bCrlf
CkStringBuilder_AppendLine $sb "ubwyG4lBWE4fCakGY6zlh+oaElK0rvblqjYoEg3dn4KPRCYGof8OFxLptHThD4cE" $bCrlf
CkStringBuilder_AppendLine $sb "T30j+utVafhO0HRyJ4iR3Pigb4GXdWBtJEEEWddZJizMkjFQkyUAoYLOT8EJ2TW3" $bCrlf
CkStringBuilder_AppendLine $sb "Tz8SvAuHBUEFcPWTSTMAG/bSp5wrYBTXaeEhx+wrYa60OruHuzgmhzKyQVuYlCNJ" $bCrlf
CkStringBuilder_AppendLine $sb "HdbnassuIRjjSNo25o4AdSlWwpGfBZjAiyEInR+KGpHdhKTxSekJxiwiXUS0UfSG" $bCrlf
CkStringBuilder_AppendLine $sb "prOpd5PzWaAR7DvjLsdmR9XffxvJCVxC735gLK7hDJKjCajDPHVDr8FSL8xMlrq0" $bCrlf
CkStringBuilder_AppendLine $sb "nKxtsHeRl1yzoGrRr12+9MiQnHtpqROTNXcXdwe3v+Vh8V5k8v8oIrcgh1+/N7Bd" $bCrlf
CkStringBuilder_AppendLine $sb "NiRsy1gFHBdu/he/KcDRT/9/acQFMPLQueGfZxUvU5As6pEONjtKX2MUg2fMF6Rc" $bCrlf
CkStringBuilder_AppendLine $sb "sQVVrLzg0g7EcuHGfuPeKfD/716MvS8NU7rX+2soijCSQv/e18PJPMVDlcMXjnup" $bCrlf
CkStringBuilder_AppendLine $sb "PPx1tStemesavFlj1okhS6UCAwEAAQ==" $bCrlf
CkStringBuilder_AppendLine $sb "-----END PUBLIC KEY-----" $bCrlf
set pubkey [new_CkPublicKey]
set success [CkPublicKey_LoadFromString $pubkey [CkStringBuilder_getAsString $sb]]
if {$success == 0} then {
puts [CkPublicKey_lastErrorText $pubkey]
delete_CkJsonObject $json
delete_CkDateTime $dt
delete_CkStringBuilder $sb
delete_CkPublicKey $pubkey
exit
}
set rsa [new_CkRsa]
set success [CkRsa_UsePublicKey $rsa $pubkey]
if {$success == 0} then {
puts [CkRsa_lastErrorText $rsa]
delete_CkJsonObject $json
delete_CkDateTime $dt
delete_CkStringBuilder $sb
delete_CkPublicKey $pubkey
delete_CkRsa $rsa
exit
}
# We probably need a base64Url encoded encrypted key.
# Using straight-up base64 would potenially include chars that are not URL safe (i.e. have special meanings in URLs)
CkRsa_put_EncodingMode $rsa "base64url"
set encryptedJson [CkRsa_encryptStringENC $rsa [CkJsonObject_emit $json] 0]
# Build the URL
# Such as: https://portal.everyware.com/Account/LoginMenu?data={Base64Url_encrypted_JSON}
set sbUrl [new_CkStringBuilder]
CkStringBuilder_Append $sbUrl "https://portal.everyware.com/Account/LoginMenu?data="
CkStringBuilder_Append $sbUrl $encryptedJson
puts [CkStringBuilder_getAsString $sbUrl]
delete_CkJsonObject $json
delete_CkDateTime $dt
delete_CkStringBuilder $sb
delete_CkPublicKey $pubkey
delete_CkRsa $rsa
delete_CkStringBuilder $sbUrl