KJUR.asn1.DERTaggedObject представляет собой механизм формирования ASN.1 тегированных структур в кодировке DER, используемый в библиотеке jsrsasign для построения сложных криптографических данных, соответствующих стандартам X.509, PKCS и другим спецификациям ASN.1.
Тегированные объекты ASN.1 позволяют оборачивать существующие структуры данных в дополнительный уровень идентификации, расширяя семантику без изменения внутреннего содержимого. В DER-кодировке такие конструкции используются для явного или неявного уточнения типа данных внутри последовательностей (SEQUENCE), выборок (CHOICE) и других контейнеров.
Класс KJUR.asn1.DERTaggedObject реализует оба варианта тегирования:
Эти режимы определяют, будет ли исходный объект вложен как самостоятельная ASN.1 структура или его тег будет заменять исходный тип на уровне кодировки.
ASN.1 (Abstract Syntax Notation One) определяет способ описания структурированных данных. В этом контексте тегирование используется для:
DER (Distinguished Encoding Rules) накладывает строгие правила кодирования ASN.1, где каждая структура имеет однозначное бинарное представление.
Тегированные объекты в ASN.1 записываются в форме:
где n — числовой тег.
KJUR.asn1.DERTaggedObject формирует именно такие конструкции.
Базовая сигнатура:
new KJUR.asn1.DERTaggedObject(params)
или в устаревшем стиле:
new KJUR.asn1.DERTaggedObject(tagNo, explicit, obj)
В современном использовании чаще применяется объектная форма параметров, где поля передаются через словарь.
При явном тегировании исходный объект полностью сохраняется внутри новой ASN.1 обёртки.
Структура:
[Tag]
└── Original ASN.1 Object
Это означает дополнительный уровень вложенности. В DER-кодировке сохраняется исходный тип объекта.
Применение:
При неявном тегировании исходный тип заменяется тегом.
Структура:
[Tag] (содержимое оригинального объекта без явного типа)
В этом случае тип внутреннего объекта не кодируется явно, а заменяется контекстным тегом.
Применение:
KJUR.asn1.DERTaggedObject хранит:
Объект obj может быть любым ASN.1 типом:
Основная функция класса заключается в формировании корректного DER-представления.
Процесс кодирования включает:
В результате создаётся корректная ASN.1 структура, совместимая с криптографическими стандартами X.509 и CMS.
KJUR.asn1.DERTaggedObject часто используется внутри более сложных конструкций:
Типичный сценарий — формирование альтернативных полей внутри SEQUENCE, где конкретный элемент определяется тегом.
var obj = new KJUR.asn1.DERInteger({int: 123});
var tagged = new KJUR.asn1.DERTaggedObject({
tagNo: 2,
explicit: true,
obj: obj
});
Результирующая структура будет содержать дополнительный уровень вложенности, где INTEGER сохраняет собственный тип внутри тега [2].
var obj = new KJUR.asn1.DERInteger({int: 123});
var tagged = new KJUR.asn1.DERTaggedObject({
tagNo: 2,
explicit: false,
obj: obj
});
В этом случае тип INTEGER не кодируется явно, а заменяется контекстным тегом [2], а значение остаётся в сыром виде.
DERTaggedObject может содержать сложные ASN.1 деревья:
При множественном тегировании важно учитывать порядок обработки:
Хотя класс в основном используется как структурный контейнер, он наследует функциональность базовых ASN.1 объектов jsrsasign.
Возвращает DER-представление объекта в шестнадцатеричном формате.
Используется для:
Используются для человекочитаемого представления структуры ASN.1 дерева.
Отображают:
В X.509 сертификатах tagged objects применяются для:
Например, поля AuthorityKeyIdentifier или SubjectAlternativeName могут содержать контекстно-зависимые ASN.1 структуры, где DERTaggedObject играет ключевую роль.
Класс интегрирован в пространство KJUR.asn1 и работает совместно с другими DER-классами:
DERTaggedObject не является самостоятельной структурой данных, а служит модификатором ASN.1 представления.
При вызове кодирования:
Различие explicit/implicit влияет на наличие внутреннего type tag в финальной структуре.
Некорректное применение DERTaggedObject обычно связано с:
Особенно критично несоответствие тегов при взаимодействии с внешними криптографическими системами.
ASN.1 спецификации часто определяют tagged fields как:
fieldName [0] EXPLICIT INTEGER OPTIONAL
KJUR.asn1.DERTaggedObject напрямую реализует подобные конструкции, позволяя программно формировать ASN.1 схемы без ручного построения бинарного представления.