Zig Requires Chilkat v11.0.0+
Zig
Verify an RSA Signature Against the Signed Hash
See more Apple Keychain Examples
Demonstrates how to validate an RSA Signature against the hash 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;
const bd = try chilkat.BinData.init();
defer bd.deinit();
var i: i32 = 0;
i = 0;
while (i <= 100) : (i += 1) {
bd.appendEncoded("000102030405060708090A0B0C0D0E0F", "hex") catch {};
}
const sha256_base64 = try bd.getHash(alloc, "sha256", "base64");
std.debug.print("sha256 hash in base64 format: {s}\n", .{sha256_base64});
const base64_rsa_sig = "AwF2BbOvL6jA5DwmMAc9n6J2Cc8PI6Rj5W079+aKJcIEtPWRzHor0Bvc3aftGM3Jbgj6SXlIC3M3RYS7UZOnfiHKFNZgbxaNT5WwsWooK42ZkC8DBZl0p7OunBUKd5SciUo+TKilioeUkriN3L1Zl9hwi3HVDVqgVo3XXskwIftSqLSFlepTLTmOWj9Y93dp8J4D9RyLtNgFQBc0WB22tyJTsuY56mLcWe1AMF3LizB9OrbwjynF2u16xWlrJdugccz795fJBUV9aQSD+8S3KeqwQhoi8RK1uhD68aGCyaSpBq0NZ8COAkn7MXaF4POxrAAt8udfHM+PRfSOptcH/w==";
// 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 hash against the signature.
rsa.setEncodingMode("base64");
success = if (rsa.verifyHashENC(sha256_base64, "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", .{});
}
}