ASN.1 структура TimeStampResp определена в RFC 3161 и представляет собой ответ службы штампов времени (TSA). Основное назначение структуры — передача результата обработки запроса на временную метку, включая статус выполнения операции и, при успешной обработке, криптографический токен временной метки.
SEQUENCE TimeStampResp содержит два ключевых компонента:
В библиотеке jsrsasign данная структура реализована через класс KJUR.asn1.tsp.TimeStampResp, входящий в модуль ASN.1 инструментов для работы с криптографическими протоколами.
Класс используется для формирования, кодирования и интерпретации ASN.1 DER-структур, соответствующих ответу TSA-сервера.
Формальное описание:
TimeStampResp ::= SEQUENCE {
status PKIStatusInfo,
timeStampToken TimeStampToken OPTIONAL
}
PKIStatusInfo содержит:
TimeStampToken представляет собой CMS ContentInfo, внутри которого находится подписанный объект SignedData, содержащий временную метку.
В jsrsasign класс KJUR.asn1.tsp.TimeStampResp наследует общую модель ASN.1 объектов библиотеки и предназначен для построения DER-структур.
Типичное создание объекта осуществляется через передачу параметров в виде JavaScript-структуры:
var resp = new KJUR.asn1.tsp.TimeStampResp({
status: {
status: 0
},
timeStampToken: cmsContentInfoObject
});
где:
Поле status является обязательным и определяет итог обработки запроса TSA.
Основные значения:
В jsrsasign структура задаётся как вложенный объект:
status: {
status: 0,
statusString: ["Operation successful"]
}
timeStampToken содержит криптографически подписанный ответ, формируемый на основе CMS (Cryptographic Message Syntax).
Структура включает:
В jsrsasign это обычно объект:
timeStampToken: new KJUR.asn1.cms.ContentInfo({
contentType: "signed-data",
content: signedDataObject
})
Если статус не равен “granted”, поле timeStampToken может отсутствовать.
Класс KJUR.asn1.tsp.TimeStampResp поддерживает кодирование в DER-формат, используемый в ASN.1-структурах.
Процесс кодирования:
Типичный вызов:
var hex = resp.getEncodedHex();
Результатом является шестнадцатеричная строка DER-представления структуры TimeStampResp.
При создании объект формирует дерево:
TimeStampResp
├── status (PKIStatusInfo)
└── timeStampToken (ContentInfo, optional)
Каждый узел соответствует ASN.1 типу, реализованному через KJUR.asn1.ASN1Object.
В jsrsasign отсутствует единый универсальный парсер для всех ASN.1 TSP структур, однако используется подход:
Пример декодирования:
var asn1 = ASN1HEX.parse(hexString);
Далее осуществляется навигация по узлам:
timeStampToken тесно связан с модулем CMS библиотеки jsrsasign.
Внутри содержится:
Для работы с токеном часто используется цепочка:
TimeStampResp → ContentInfo → SignedData → TSTInfo
TSTInfo содержит:
var statusInfo = {
status: 0,
statusString: ["OK"]
};
var tsToken = new KJUR.asn1.cms.ContentInfo({
contentType: "signed-data",
content: signedData
});
var tsResp = new KJUR.asn1.tsp.TimeStampResp({
status: statusInfo,
timeStampToken: tsToken
});
var derHex = tsResp.getEncodedHex();
При формировании ответа особое значение имеет корректная установка status:
Пример отказа:
{
status: 2,
statusString: ["Invalid request"]
}
Класс KJUR.asn1.tsp.TimeStampResp:
Особенность библиотеки заключается в том, что структура не абстрагирует TSA-протокол, а отражает его ASN.1 представление напрямую, что требует точного соблюдения схемы данных при формировании объектов.
Структура TimeStampResp используется в системах:
В jsrsasign объект применяется как низкоуровневое представление TSA-ответа, интегрируемое с CMS и X.509 модулями библиотеки.