| ... | ... | @@ -538,12 +538,12 @@ pub fn parseTime(cert: Certificate, elem: der.Element) ParseTimeError!u64 { |
| 538 | 538 | return error.CertificateTimeInvalid; |
| 539 | 539 | |
| 540 | 540 | return Date.toSeconds(.{ |
| 541 | | .year = @as(u16, 2000) + try parseTimeDigits(bytes[0..2].*, 0, 99), |
| 542 | | .month = try parseTimeDigits(bytes[2..4].*, 1, 12), |
| 543 | | .day = try parseTimeDigits(bytes[4..6].*, 1, 31), |
| 544 | | .hour = try parseTimeDigits(bytes[6..8].*, 0, 23), |
| 545 | | .minute = try parseTimeDigits(bytes[8..10].*, 0, 59), |
| 546 | | .second = try parseTimeDigits(bytes[10..12].*, 0, 59), |
| 541 | .year = @as(u16, 2000) + try parseTimeDigits(bytes[0..2], 0, 99), |
| 542 | .month = try parseTimeDigits(bytes[2..4], 1, 12), |
| 543 | .day = try parseTimeDigits(bytes[4..6], 1, 31), |
| 544 | .hour = try parseTimeDigits(bytes[6..8], 0, 23), |
| 545 | .minute = try parseTimeDigits(bytes[8..10], 0, 59), |
| 546 | .second = try parseTimeDigits(bytes[10..12], 0, 59), |
| 547 | 547 | }); |
| 548 | 548 | }, |
| 549 | 549 | .generalized_time => { |
| ... | ... | @@ -555,11 +555,11 @@ pub fn parseTime(cert: Certificate, elem: der.Element) ParseTimeError!u64 { |
| 555 | 555 | return error.CertificateTimeInvalid; |
| 556 | 556 | return Date.toSeconds(.{ |
| 557 | 557 | .year = try parseYear4(bytes[0..4]), |
| 558 | | .month = try parseTimeDigits(bytes[4..6].*, 1, 12), |
| 559 | | .day = try parseTimeDigits(bytes[6..8].*, 1, 31), |
| 560 | | .hour = try parseTimeDigits(bytes[8..10].*, 0, 23), |
| 561 | | .minute = try parseTimeDigits(bytes[10..12].*, 0, 59), |
| 562 | | .second = try parseTimeDigits(bytes[12..14].*, 0, 59), |
| 558 | .month = try parseTimeDigits(bytes[4..6], 1, 12), |
| 559 | .day = try parseTimeDigits(bytes[6..8], 1, 31), |
| 560 | .hour = try parseTimeDigits(bytes[8..10], 0, 23), |
| 561 | .minute = try parseTimeDigits(bytes[10..12], 0, 59), |
| 562 | .second = try parseTimeDigits(bytes[12..14], 0, 59), |
| 563 | 563 | }); |
| 564 | 564 | }, |
| 565 | 565 | else => return error.CertificateFieldHasWrongDataType, |
| ... | ... | @@ -613,8 +613,8 @@ const Date = struct { |
| 613 | 613 | } |
| 614 | 614 | }; |
| 615 | 615 | |
| 616 | | pub fn parseTimeDigits(nn_u8: @Vector(2, u8), min: u8, max: u8) !u8 { |
| 617 | | const nn: @Vector(2, u16) = .{ nn_u8[0], nn_u8[1] }; |
| 616 | pub fn parseTimeDigits(text: *const [2]u8, min: u8, max: u8) !u8 { |
| 617 | const nn: @Vector(2, u16) = .{ text[0], text[1] }; |
| 618 | 618 | const zero: @Vector(2, u16) = .{ '0', '0' }; |
| 619 | 619 | const mm: @Vector(2, u16) = .{ 10, 1 }; |
| 620 | 620 | const result = @reduce(.Add, (nn -% zero) *% mm); |
| ... | ... | @@ -625,14 +625,14 @@ pub fn parseTimeDigits(nn_u8: @Vector(2, u8), min: u8, max: u8) !u8 { |
| 625 | 625 | |
| 626 | 626 | test parseTimeDigits { |
| 627 | 627 | const expectEqual = std.testing.expectEqual; |
| 628 | | try expectEqual(@as(u8, 0), try parseTimeDigits("00".*, 0, 99)); |
| 629 | | try expectEqual(@as(u8, 99), try parseTimeDigits("99".*, 0, 99)); |
| 630 | | try expectEqual(@as(u8, 42), try parseTimeDigits("42".*, 0, 99)); |
| 628 | try expectEqual(@as(u8, 0), try parseTimeDigits("00", 0, 99)); |
| 629 | try expectEqual(@as(u8, 99), try parseTimeDigits("99", 0, 99)); |
| 630 | try expectEqual(@as(u8, 42), try parseTimeDigits("42", 0, 99)); |
| 631 | 631 | |
| 632 | 632 | const expectError = std.testing.expectError; |
| 633 | | try expectError(error.CertificateTimeInvalid, parseTimeDigits("13".*, 1, 12)); |
| 634 | | try expectError(error.CertificateTimeInvalid, parseTimeDigits("00".*, 1, 12)); |
| 635 | | try expectError(error.CertificateTimeInvalid, parseTimeDigits("Di".*, 0, 99)); |
| 633 | try expectError(error.CertificateTimeInvalid, parseTimeDigits("13", 1, 12)); |
| 634 | try expectError(error.CertificateTimeInvalid, parseTimeDigits("00", 1, 12)); |
| 635 | try expectError(error.CertificateTimeInvalid, parseTimeDigits("Di", 0, 99)); |
| 636 | 636 | } |
| 637 | 637 | |
| 638 | 638 | pub fn parseYear4(text: *const [4]u8) !u16 { |