Zig Requires Chilkat v11.0.0+
Zig
Verify an RSA Signature Against the Signed String
See more Apple Keychain Examples
Demonstrates how to validate an RSA Signature against the string that was signed.Chilkat Zig Downloads
const std = @import("std");
const chilkat = @import("chilkat");
pub fn main(init: std.process.Init) !void {
const alloc = init.arena.allocator();
var success: bool = false;
// Create the same string we previously signed in this example:
// RSA Sign utf-8 Bytes of String to get Base64 RSA Signature
const sb = try chilkat.StringBuilder.init();
defer sb.deinit();
const crlf_line_ending = true;
var i: i32 = 0;
i = 0;
while (i <= 10) : (i += 1) {
sb.appendLine("This is a test.", crlf_line_ending) catch {};
}
const base64_rsa_sig = "gWgpEXQqvXN6wh0MuFXPiw2xCb8cnmdizBT1TD1Tpm2GlJ8gnD59DGSj35GGXk1tM+mCOvMa2uW/9gmz8p6A90JLbn918i/2wKGvcde4wXnzPO7JADSNn2UwYzf3rp4/q/JrHv1GZETRJhABSFqTxOgdmdbEJQE/zijOSctCtQAM2CTb6t2BO8uHKSSUAwPH2cbeWxqsaVRLT4ruk5nZOxhoLgLMSjupiSzbE8zSTkkFOEHD+Mbb2xwg85AI0E4DsUnp+hLwwtS0blesgSyvtBY8oJODJeFcJsR7JDOTPdzHQHgJRl/2A4ij5xT91TpXy7ok43jhT6O9j7Q3qrafIQ==";
// Get the public key to be used for signature verification.
const pub_key = try chilkat.PublicKey.init();
defer pub_key.deinit();
success = if (pub_key.loadFromFile("rsaKeys/chilkat-rsa-2048.pem")) true else |_| false;
if (!success) {
std.debug.print("{s}\n", .{try pub_key.getLastErrorText(alloc)});
return;
}
const rsa = try chilkat.Rsa.init();
defer rsa.deinit();
success = if (rsa.usePublicKey(pub_key)) true else |_| false;
if (!success) {
std.debug.print("{s}\n", .{try rsa.getLastErrorText(alloc)});
return;
}
// Verify the string against the signature.
// We signed the utf-8 byte representation of the string, so we must indicate
// to also validate against the utf-8 byte representation.
rsa.setCharset("utf-8");
rsa.setEncodingMode("base64");
const signed_string = try sb.getAsString(alloc);
success = if (rsa.verifyStringENC(signed_string, "sha256", base64_rsa_sig)) true else |_| false;
if (!success) {
std.debug.print("{s}\n", .{try rsa.getLastErrorText(alloc)});
std.debug.print("Signature invalid.\n", .{});
} else {
std.debug.print("Signature valid.\n", .{});
}
}