Function parseTime [src]
Returns number of seconds since epoch.
Prototype
pub fn parseTime(cert: Certificate, elem: der.Element) ParseTimeError!u64
Parameters
cert: Certificate
elem: der.Element
Possible Errors
Source
pub fn parseTime(cert: Certificate, elem: der.Element) ParseTimeError!u64 {
const bytes = cert.contents(elem);
switch (elem.identifier.tag) {
.utc_time => {
// Example: "YYMMDD000000Z"
if (bytes.len != 13)
return error.CertificateTimeInvalid;
if (bytes[12] != 'Z')
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),
});
},
.generalized_time => {
// Examples:
// "19920521000000Z"
// "19920622123421Z"
// "19920722132100.3Z"
if (bytes.len < 15)
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),
});
},
else => return error.CertificateFieldHasWrongDataType,
}
}