Sample code for 30+ languages & platforms
Zig Requires Chilkat v11.0.0+

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

Zig
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", .{});
    }
}