Zig
Zig
Get RSA Public Key in JWK Format (JSON Web Key)
See more JSON Web Signatures (JWS) Examples
Demonstrates how to get an RSA public key in JWK (JSON Web Key) format.Note: This example requires Chilkat v9.5.0.66 or later.
Chilkat Zig Downloads
const std = @import("std");
const chilkat = @import("chilkat");
pub fn main(init: std.process.Init) !void {
const alloc = init.arena.allocator();
// Note: This example requires Chilkat v9.5.0.66 or later.
// Load a PEM file into memory.
const sb_pem = try chilkat.StringBuilder.init();
defer sb_pem.deinit();
sb_pem.loadFile("qa_data/pem/rsa_public.pem", "utf-8") catch {
std.debug.print("Failed to load PEM file.\n", .{});
return;
};
// Load the PEM into a public key object.
const pub_key = try chilkat.PublicKey.init();
defer pub_key.deinit();
pub_key.loadFromString(try sb_pem.getAsString(alloc)) catch {
std.debug.print("{s}\n", .{try pub_key.getLastErrorText(alloc)});
return;
};
// Get the public key in JWK format:
const jwk = try pub_key.getJwk(alloc);
// The GetJwk method will return the JWK in the most compact JSON format possible,
// as a single line with no extra whitespace. To get a more human-readable JWK (for this example),
// load into a Chilkat JSON object and emit non-compact:
const json = try chilkat.JsonObject.init();
defer json.deinit();
json.load(jwk) catch {};
json.setEmitCompact(false);
std.debug.print("RSA Public Key in JWK format:\n", .{});
std.debug.print("{s}\n", .{try json.emit(alloc)});
// Sample output:
// {
// "kty": "RSA",
// "n": "33TqqLR3eeUmDtHS89qF3p4MP7Wfqt2Zjj3lZjLjjCGDvwr9cJNlNDiuKboODgUiT4ZdPWbOiMAfDcDzlOxA04DDnEFGAf-kDQiNSe2ZtqC7bnIc8-KSG_qOGQIVaay4Ucr6ovDkykO5Hxn7OU7sJp9TP9H0JH8zMQA6YzijYH9LsupTerrY3U6zyihVEDXXOv08vBHk50BMFJbE9iwFwnxCsU5-UZUZYw87Uu0n4LPFS9BT8tUIvAfnRXIEWCha3KbFWmdZQZlyrFw0buUEf0YN3_Q0auBkdbDR_ES2PbgKTJdkjc_rEeM0TxvOUf7HuUNOhrtAVEN1D5uuxE1WSw",
// "e": "AQAB"
// }
// Additional information can be added like this:
json.appendString("use", "enc") catch {};
json.appendString("kid", "123ABC") catch {};
// Now examine the JSON:
std.debug.print("{s}\n", .{try json.emit(alloc)});
// {
// "kty": "RSA",
// "n": "33TqqLR3eeUmDtHS89qF3p4MP7Wfqt2Zjj3lZjLjjCGDvwr9cJNlNDiuKboODgUiT4ZdPWbOiMAfDcDzlOxA04DDnEFGAf-kDQiNSe2ZtqC7bnIc8-KSG_qOGQIVaay4Ucr6ovDkykO5Hxn7OU7sJp9TP9H0JH8zMQA6YzijYH9LsupTerrY3U6zyihVEDXXOv08vBHk50BMFJbE9iwFwnxCsU5-UZUZYw87Uu0n4LPFS9BT8tUIvAfnRXIEWCha3KbFWmdZQZlyrFw0buUEf0YN3_Q0auBkdbDR_ES2PbgKTJdkjc_rEeM0TxvOUf7HuUNOhrtAVEN1D5uuxE1WSw",
// "e": "AQAB",
// "use": "enc",
// "kid": "123ABC"
// }
}