Класс KJUR.asn1.DERIA5String

Класс KJUR.asn1.DERIA5String реализует ASN.1 тип данных IA5String в формате DER (Distinguished Encoding Rules). IA5String представляет собой строку, ограниченную набором символов IA5 (International Alphabet No. 5), фактически соответствующую ASCII-кодировке. Этот тип используется в криптографических структурах, где требуется строгая совместимость с ASCII без поддержки расширенных символов Unicode.

IA5String активно применяется в X.509 сертификатах, CRL, атрибутах PKCS и других ASN.1-структурах, где важно фиксированное и предсказуемое представление текстовых данных.


Назначение и область применения

DERIA5String используется для кодирования строковых значений, которые по стандарту должны содержать только символы диапазона IA5:

  • латинские буквы
  • цифры
  • базовые символы ASCII
  • ограниченные управляющие символы

Типичные сценарии:

  • email-адреса в сертификатах
  • DNS-имена в альтернативных субъектах (Subject Alternative Name)
  • идентификаторы и метаданные в PKI-структурах
  • поля, требующие строгой ASCII-совместимости

Ограничения IA5String

IA5String отличается строгими ограничениями:

  • допустим только 7-битный ASCII
  • символы вне диапазона 0x00–0x7F недопустимы
  • отсутствие поддержки кириллицы, эмодзи и Unicode-символов

При попытке передать недопустимые символы поведение зависит от реализации библиотеки: возможна ошибка или некорректное кодирование.


ASN.1 представление

В ASN.1 IA5String имеет универсальный тег:

  • Tag Number: 22 (0x16)

DER-кодирование включает:

  1. Тег IA5String
  2. Длину
  3. Байтовое представление ASCII строки

Конструктор класса

В Jsrsasign объект создаётся через конструктор вида:

new KJUR.asn1.DERIA5String(params)

Параметры

Основные параметры объекта:

  • str — строка IA5String (обязательный параметр)
  • prv или внутренние опции DER-объектов (используются для наследуемых свойств ASN1Object)
  • ext — расширенные настройки сериализации (в зависимости от версии библиотеки)

Внутреннее поведение

При создании экземпляра происходит:

  1. Проверка входной строки

  2. Валидация символов на соответствие IA5 (ASCII)

  3. Преобразование строки в байтовый массив UTF-8/ASCII (фактически 1 байт на символ)

  4. Формирование DER-структуры:

    • тег IA5String (0x16)
    • длина
    • значение

Наследование и структура

KJUR.asn1.DERIA5String входит в иерархию ASN.1 классов библиотеки Jsrsasign и наследует базовую функциональность строковых DER-типов.

Типичная цепочка наследования:

  • KJUR.asn1.ASN1Object

    • KJUR.asn1.DERAbstractString

      • KJUR.asn1.DERIA5String

Благодаря этому доступны общие методы:

  • генерация DER-кода
  • получение HEX-представления
  • сериализация в байтовый формат

Кодирование DER

Процесс формирования DER-последовательности включает:

1. Определение тега

IA5String всегда использует:

0x16

2. Длина строки

Длина кодируется в DER-формате:

  • short form (если ≤ 127 байт)
  • long form (если > 127 байт)

3. Значение

Каждый символ строки преобразуется в ASCII байт.


Пример использования

var ia5 = new KJUR.asn1.DERIA5String({
    str: "example@test.com"
});

var hex = ia5.getEncodedHex();

Результатом будет DER-кодированная последовательность IA5String.


Использование в ASN.1 структурах

DERIA5String часто применяется внутри сложных ASN.1 объектов:

Subject Alternative Name

{
  dNSName: new KJUR.asn1.DERIA5String({ str: "example.com" })
}

Email в сертификате

emailAddress: new KJUR.asn1.DERIA5String({
    str: "user@example.org"
})

Отличие от других строковых типов ASN.1

UTF8String

  • поддерживает Unicode
  • тег 0x0C
  • используется по умолчанию в современных сертификатах

PrintableString

  • ограниченный набор символов (буквы, цифры, некоторые знаки)
  • более строгий, чем IA5String

IA5String

  • строго ASCII
  • используется там, где требуется максимальная совместимость со старыми системами

Валидация данных

При работе с DERIA5String важно учитывать:

  • недопустимость символов с кодами > 127
  • необходимость предварительной нормализации строк
  • отсутствие автоматической конвертации Unicode

Пример потенциальной проблемы:

new KJUR.asn1.DERIA5String({
    str: "тест@example.com"
});

Такой ввод выходит за пределы IA5 и может привести к ошибке или некорректному результату.


Внутренние методы сериализации

Класс использует стандартные механизмы Jsrsasign:

  • toHexString() — преобразование в HEX DER
  • getEncodedHex() — получение итоговой DER-последовательности
  • toString() — текстовое представление (отладочное)

Производственные особенности

IA5String остаётся важным типом в криптографии по причинам:

  • обратная совместимость с ранними стандартами X.500/X.509
  • компактность кодирования
  • предсказуемость байтового представления
  • отсутствие неоднозначностей Unicode

Роль в экосистеме Jsrsasign

KJUR.asn1.DERIA5String является одним из базовых строительных блоков для формирования ASN.1 деревьев. Он используется в составе:

  • сертификатов X.509
  • PKCS#10 запросов
  • CRL структур
  • расширений сертификатов

Его поведение строго детерминировано, что делает его пригодным для криптографических операций, где важна точная бинарная совместимость между реализациями.