Rust Requires Chilkat v11.0.0+
Rust
Everyware API RSA Encrypt JSON
See more RSA Examples
Demonstrates how to RSA encrypt JSON using everyware.com's RSA public key.Chilkat Rust Downloads
// 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.
let json = chilkat::JsonObject::new();
let _ = json.update_string("provider_key", "USER GUID HERE");
let _ = json.update_string("menu_item", "payment");
let dt = chilkat::DateTime::new();
let _ = dt.set_from_current_system_time();
let _ = json.update_string("date_time", &dt.get_as_unix_time_str(false).unwrap_or_default());
// 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
json.set_emit_compact(true);
// Everyware's RSA public key is at: https://docs.everyware.com/docs/everyware-public-rsa-key
let sb = chilkat::StringBuilder::new();
let b_crlf = true;
let _ = sb.append_line("-----BEGIN PUBLIC KEY-----", b_crlf);
let _ = sb.append_line("MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxNbflxUSWQ3XJ1N9dAoh", b_crlf);
let _ = sb.append_line("k+uaiFsg3wkPi9LGS/mH8DtHBgZxKyz+oQBDtnDd9FDEo0ql7MMgCMsTAv27W5vk", b_crlf);
let _ = sb.append_line("Pu0rm6zhcTeYquWEuVCS7VtVsyTATr0Z9WhqNeZlIRurovJAXl2jRDX6QeY5dayC", b_crlf);
let _ = sb.append_line("ubwyG4lBWE4fCakGY6zlh+oaElK0rvblqjYoEg3dn4KPRCYGof8OFxLptHThD4cE", b_crlf);
let _ = sb.append_line("T30j+utVafhO0HRyJ4iR3Pigb4GXdWBtJEEEWddZJizMkjFQkyUAoYLOT8EJ2TW3", b_crlf);
let _ = sb.append_line("Tz8SvAuHBUEFcPWTSTMAG/bSp5wrYBTXaeEhx+wrYa60OruHuzgmhzKyQVuYlCNJ", b_crlf);
let _ = sb.append_line("HdbnassuIRjjSNo25o4AdSlWwpGfBZjAiyEInR+KGpHdhKTxSekJxiwiXUS0UfSG", b_crlf);
let _ = sb.append_line("prOpd5PzWaAR7DvjLsdmR9XffxvJCVxC735gLK7hDJKjCajDPHVDr8FSL8xMlrq0", b_crlf);
let _ = sb.append_line("nKxtsHeRl1yzoGrRr12+9MiQnHtpqROTNXcXdwe3v+Vh8V5k8v8oIrcgh1+/N7Bd", b_crlf);
let _ = sb.append_line("NiRsy1gFHBdu/he/KcDRT/9/acQFMPLQueGfZxUvU5As6pEONjtKX2MUg2fMF6Rc", b_crlf);
let _ = sb.append_line("sQVVrLzg0g7EcuHGfuPeKfD/716MvS8NU7rX+2soijCSQv/e18PJPMVDlcMXjnup", b_crlf);
let _ = sb.append_line("PPx1tStemesavFlj1okhS6UCAwEAAQ==", b_crlf);
let _ = sb.append_line("-----END PUBLIC KEY-----", b_crlf);
let pubkey = chilkat::PublicKey::new();
if pubkey.load_from_string(&sb.get_as_string().unwrap_or_default()).is_err() {
println!("{}", pubkey.last_error_text());
return;
}
let rsa = chilkat::Rsa::new();
if rsa.use_public_key(&pubkey).is_err() {
println!("{}", rsa.last_error_text());
return;
}
// 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)
rsa.set_encoding_mode("base64url");
let encrypted_json = rsa.encrypt_string_enc(&json.emit().unwrap_or_default(), false).unwrap_or_default();
// Build the URL
// Such as: https://portal.everyware.com/Account/LoginMenu?data={Base64Url_encrypted_JSON}
let sb_url = chilkat::StringBuilder::new();
let _ = sb_url.append("https://portal.everyware.com/Account/LoginMenu?data=");
let _ = sb_url.append(&encrypted_json);
println!("{}", sb_url.get_as_string().unwrap_or_default());