From df5f6836c474a689469e01554997bbf3108e2cb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20C=C3=A1ceres?= Date: Sun, 23 Jul 2023 21:02:59 +0000 Subject: [PATCH] std.crypto.Certificate: consistent param types for parseTimeDigits This commit changes the type of the first parameter of parseTimeDigits to *const [2]u8 for consistency with parseYear4 which uses *const [4]u8 as its first parameter. This is also more ergonomic for the caller since they don't need to dereference the array. --- lib/std/crypto/Certificate.zig | 38 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/lib/std/crypto/Certificate.zig b/lib/std/crypto/Certificate.zig index ca2d935706..f28894fc0d 100644 --- a/lib/std/crypto/Certificate.zig +++ b/lib/std/crypto/Certificate.zig @@ -538,12 +538,12 @@ pub fn parseTime(cert: Certificate, elem: der.Element) ParseTimeError!u64 { return error.CertificateTimeInvalid; return Date.toSeconds(.{ - .year = @as(u16, 2000) + try parseTimeDigits(bytes[0..2].*, 0, 99), - .month = try parseTimeDigits(bytes[2..4].*, 1, 12), - .day = try parseTimeDigits(bytes[4..6].*, 1, 31), - .hour = try parseTimeDigits(bytes[6..8].*, 0, 23), - .minute = try parseTimeDigits(bytes[8..10].*, 0, 59), - .second = try parseTimeDigits(bytes[10..12].*, 0, 59), + .year = @as(u16, 2000) + try parseTimeDigits(bytes[0..2], 0, 99), + .month = try parseTimeDigits(bytes[2..4], 1, 12), + .day = try parseTimeDigits(bytes[4..6], 1, 31), + .hour = try parseTimeDigits(bytes[6..8], 0, 23), + .minute = try parseTimeDigits(bytes[8..10], 0, 59), + .second = try parseTimeDigits(bytes[10..12], 0, 59), }); }, .generalized_time => { @@ -555,11 +555,11 @@ pub fn parseTime(cert: Certificate, elem: der.Element) ParseTimeError!u64 { return error.CertificateTimeInvalid; return Date.toSeconds(.{ .year = try parseYear4(bytes[0..4]), - .month = try parseTimeDigits(bytes[4..6].*, 1, 12), - .day = try parseTimeDigits(bytes[6..8].*, 1, 31), - .hour = try parseTimeDigits(bytes[8..10].*, 0, 23), - .minute = try parseTimeDigits(bytes[10..12].*, 0, 59), - .second = try parseTimeDigits(bytes[12..14].*, 0, 59), + .month = try parseTimeDigits(bytes[4..6], 1, 12), + .day = try parseTimeDigits(bytes[6..8], 1, 31), + .hour = try parseTimeDigits(bytes[8..10], 0, 23), + .minute = try parseTimeDigits(bytes[10..12], 0, 59), + .second = try parseTimeDigits(bytes[12..14], 0, 59), }); }, else => return error.CertificateFieldHasWrongDataType, @@ -613,8 +613,8 @@ const Date = struct { } }; -pub fn parseTimeDigits(nn_u8: @Vector(2, u8), min: u8, max: u8) !u8 { - const nn: @Vector(2, u16) = .{ nn_u8[0], nn_u8[1] }; +pub fn parseTimeDigits(text: *const [2]u8, min: u8, max: u8) !u8 { + const nn: @Vector(2, u16) = .{ text[0], text[1] }; const zero: @Vector(2, u16) = .{ '0', '0' }; const mm: @Vector(2, u16) = .{ 10, 1 }; const result = @reduce(.Add, (nn -% zero) *% mm); @@ -625,14 +625,14 @@ pub fn parseTimeDigits(nn_u8: @Vector(2, u8), min: u8, max: u8) !u8 { test parseTimeDigits { const expectEqual = std.testing.expectEqual; - try expectEqual(@as(u8, 0), try parseTimeDigits("00".*, 0, 99)); - try expectEqual(@as(u8, 99), try parseTimeDigits("99".*, 0, 99)); - try expectEqual(@as(u8, 42), try parseTimeDigits("42".*, 0, 99)); + try expectEqual(@as(u8, 0), try parseTimeDigits("00", 0, 99)); + try expectEqual(@as(u8, 99), try parseTimeDigits("99", 0, 99)); + try expectEqual(@as(u8, 42), try parseTimeDigits("42", 0, 99)); const expectError = std.testing.expectError; - try expectError(error.CertificateTimeInvalid, parseTimeDigits("13".*, 1, 12)); - try expectError(error.CertificateTimeInvalid, parseTimeDigits("00".*, 1, 12)); - try expectError(error.CertificateTimeInvalid, parseTimeDigits("Di".*, 0, 99)); + try expectError(error.CertificateTimeInvalid, parseTimeDigits("13", 1, 12)); + try expectError(error.CertificateTimeInvalid, parseTimeDigits("00", 1, 12)); + try expectError(error.CertificateTimeInvalid, parseTimeDigits("Di", 0, 99)); } pub fn parseYear4(text: *const [4]u8) !u16 {