Библиотека Jsrsasign предоставляет модуль ASN1HEX для низкоуровневого разбора ASN.1 структур, представленных в виде HEX-строк. Такой формат используется при работе с сертификатами X.509, ключами, подписями и другими криптографическими объектами, где данные кодируются в DER.
ASN1HEX не выполняет высокоуровневую декодировку в JavaScript-объекты. Его задача — предоставить инструменты для точной навигации по TLV-структурам (Tag-Length-Value), извлечения значений и анализа вложенных узлов.
ASN.1 в DER-представлении всегда строится по принципу:
ASN1HEX оперирует строкой HEX и индексами внутри неё. Почти все методы принимают:
hex — ASN.1 структура в HEXidx — позиция начала узлаПроверяет, является ли строка валидной ASN.1 HEX-структурой.
Поведение:
Возвращает полный TLV-узел, начиная с позиции idx.
Используется для:
Возвращает длину полного TLV-блока (включая Tag и Length).
Полезно при ручной итерации по структуре.
Возвращает только значение V без Tag и Length.
Применяется, когда нужно получить «сырые» данные узла.
Аналогично getHexOfV, но может использоваться в более
старых сценариях API.
Декодирует значение ASN.1 STRING-типа в строку JavaScript.
Поддерживает:
Извлекает INTEGER значение в HEX-представлении.
Используется для:
Извлекает OID (Object Identifier) в HEX-форме.
Далее OID обычно декодируется в строковый вид через другие утилиты Jsrsasign.
ASN.1 структура часто вложенная, поэтому ключевая часть ASN1HEX — навигация по дереву.
Возвращает массив позиций всех дочерних элементов узла.
Используется для обхода SEQUENCE или SET.
Типичный сценарий:
Возвращает позицию N-го дочернего элемента.
Позволяет обращаться к структуре как к массиву узлов.
Возвращает индекс первого дочернего элемента.
Используется как точка входа для обхода вложенной структуры.
Находит следующий соседний ASN.1 элемент на том же уровне вложенности.
Применяется при линейном обходе SEQUENCE.
Возвращает длину значения V без учета Tag и Length.
Важно при работе с вложенными структурами фиксированной длины.
Определяет длину BER-encoded элемента.
Используется для совместимости с BER, где длины могут быть неопределёнными.
Возвращает длину поля Length (L1), то есть сколько байт занимает описание длины.
Генерирует текстовое представление ASN.1 структуры.
Вывод включает:
Применяется для:
Извлекает значение узла по пути индексов.
nthList — массив индексов, описывающий путь по
дереву.
Пример логики:
Возвращает значение V по заданному пути.
Отличается от предыдущего метода тем, что возвращает только значение, а не узел.
Расширенная версия getVbyList.
Добавляет:
Хотя ASN1HEX не выполняет полную типизацию, некоторые методы помогают интерпретировать данные.
Преобразует HEX OID в строковый формат вида:
1.2.840.113549
Определяет тип INTEGER и возвращает его строковое представление.
Используется редко, в основном в отладочных сценариях.
Возвращает индекс узла по пути вложенности.
Является базовым методом навигации, используемым внутри других функций.
Ищет подстроку HEX внутри ASN.1 структуры.
Применяется для:
ASN1HEX активно используется для обхода структур SEQUENCE.
Типичный алгоритм:
getPosArrayOfChildrenSEQUENCE является основой:
ASN1HEX использует абсолютные индексы в HEX-строке, а не байтовые смещения.
Это означает:
При работе с вложенными структурами важно:
Модуль не строит дерево объектов. Вместо этого:
Это делает его: