From f1c68f9abc97751be37a7bb0ffdb89521f4a13a8 Mon Sep 17 00:00:00 2001 From: Meghan Date: Sat, 9 Jan 2021 17:02:21 -0800 Subject: [PATCH] util: dry up validate_hash --- src/util/funcs.zig | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/src/util/funcs.zig b/src/util/funcs.zig index 5819b582b9561b5165f9edffa9cb9ec12b00dd39..6267909f297b1c4bfa69ed998c90202f336e81bb 100644 --- a/src/util/funcs.zig +++ b/src/util/funcs.zig @@ -261,27 +261,20 @@ pub fn validate_hash(input: []const u8, file_path: []const u8) !bool { const file = try std.fs.cwd().openFile(file_path, .{}); defer file.close(); const data = try file.reader().readAllAlloc(gpa, gb); - return std.mem.eql(u8, hash.string, switch (hash.id) { - .blake3 => blk: { - const h = &std.crypto.hash.Blake3.init(.{}); - var out: [32]u8 = undefined; - h.update(data); - h.final(&out); - break :blk try std.fmt.allocPrint(gpa, "{x}", .{out}); - }, - .sha256 => blk: { - const h = &std.crypto.hash.sha2.Sha256.init(.{}); - var out: [32]u8 = undefined; - h.update(data); - h.final(&out); - break :blk try std.fmt.allocPrint(gpa, "{x}", .{out}); - }, - .sha512 => blk: { - const h = &std.crypto.hash.sha2.Sha512.init(.{}); - var out: [64]u8 = undefined; - h.update(data); - h.final(&out); - break :blk try std.fmt.allocPrint(gpa, "{x}", .{out}); - }, - }); + const expected = hash.string; + const actual = switch (hash.id) { + .blake3 => try do_hash(std.crypto.hash.Blake3, data), + .sha256 => try do_hash(std.crypto.hash.sha2.Sha256, data), + .sha512 => try do_hash(std.crypto.hash.sha2.Sha512, data), + }; + return std.mem.eql(u8, expected, actual); +} + +pub fn do_hash(comptime algo: type, data: []const u8) ![]const u8 { + const h = &algo.init(.{}); + var out: [algo.digest_length]u8 = undefined; + h.update(data); + h.final(&out); + const hex = try std.fmt.allocPrint(gpa, "{x}", .{out}); + return hex; } -- 2.54.0