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

Tcl

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