UNPKG

asn1-ts

Version:

ASN.1 encoding and decoding, including BER, CER, and DER.

25 lines (24 loc) 1.15 kB
import convertBytesToText from "../../../utils/convertBytesToText.mjs"; import * as errors from "../../../errors.mjs"; import validateDateTime from "../../../validators/validateDateTime.mjs"; const DER_UTC_TIME_LENGTH = "920521000000Z".length; export default function decodeUTCTime(value) { if (value.length !== DER_UTC_TIME_LENGTH) { throw new errors.ASN1Error("Malformed DER UTCTime string: not a valid length"); } const dateString = convertBytesToText(value); if (!dateString.endsWith("Z")) { throw new errors.ASN1Error("Malformed DER UTCTime string: not UTC timezone"); } let year = Number(dateString.slice(0, 2)); const month = (Number(dateString.slice(2, 4)) - 1); const date = Number(dateString.slice(4, 6)); const hours = Number(dateString.slice(6, 8)); const minutes = Number(dateString.slice(8, 10)); const seconds = Number(dateString.slice(10, 12)); year = (year <= 49) ? (2000 + year) : (1900 + year); validateDateTime("UTCTime", year, month, date, hours, minutes, seconds); return new Date(Date.UTC(year, month, date, hours, minutes, seconds)); }