Общая структура модулей

Jsrsasign представляет собой модульную криптографическую библиотеку, построенную вокруг единого глобального пространства имён и набора вложенных подмодулей. В отличие от современных ESM-библиотек, она исторически ориентирована на работу в браузере и поддерживает несколько моделей подключения: глобальную, CommonJS и AMD.

Основная идея структуры — объединение всех криптографических функций в иерархическое пространство объектов, где каждый уровень отвечает за отдельную предметную область: работа с ключами, ASN.1, подписи, хеширование, JWT и низкоуровневые утилиты.


Глобальное пространство имён

После подключения библиотеки в среде браузера создаётся глобальный объект KJUR, который выступает корневым контейнером всех модулей.

Структура выглядит следующим образом:

  • KJUR.crypto — криптографические алгоритмы и операции
  • KJUR.jws — работа с JSON Web Signature
  • KJUR.jwe — JSON Web Encryption (в расширенных сборках)
  • KJUR.asn1 — инструменты для работы с ASN.1
  • KEYUTIL — утилиты для ключей (RSA, EC, PEM)
  • X509 — работа с X.509 сертификатами
  • hextool — преобразования HEX, UTF-8 и бинарных данных

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


Слои архитектуры

Структура Jsrsasign логически делится на несколько уровней:

1. Базовый слой утилит

Этот слой содержит вспомогательные функции, используемые всеми остальными компонентами:

  • преобразования строк и байтов
  • кодировки (UTF-8, Base64, Hex)
  • математические операции для больших чисел
  • генерация случайных значений

Пример:

KJUR.crypto.Util.getRandomHexOfNBytes(16);

2. ASN.1 слой

ASN.1 — ключевая часть библиотеки, обеспечивающая работу с бинарными структурами сертификатов и ключей.

Основные компоненты:

  • KJUR.asn1.ASN1Object
  • KJUR.asn1.DERInteger
  • KJUR.asn1.DERSequence
  • KJUR.asn1.x509

Этот слой используется при:

  • генерации сертификатов
  • разборе X.509
  • работе с приватными ключами в DER-формате

ASN.1 слой является фундаментом для всей PKI-логики библиотеки.


3. Криптографическое ядро

На уровне KJUR.crypto находятся основные алгоритмы:

  • RSA
  • ECDSA
  • SHA-1, SHA-256, SHA-512
  • HMAC
  • PBKDF2
  • AES (в некоторых сборках)

Структура подмодулей:

  • KJUR.crypto.RSAKey — реализация RSA ключей
  • KJUR.crypto.ECDSA — алгоритм цифровой подписи
  • KJUR.crypto.MessageDigest — хеширование
  • KJUR.crypto.Cipher — симметричное шифрование

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

var md = new KJUR.crypto.MessageDigest({alg: "sha256"});
md.updateString("data");
var hash = md.digest();

4. Модуль управления ключами (KEYUTIL)

KEYUTIL является одним из наиболее используемых компонентов. Он обеспечивает:

  • импорт PEM ключей
  • экспорт ключей
  • преобразование RSA/EC структур
  • генерацию ключевых пар

Структура не вложена в KJUR, но тесно интегрирована с ним.

Основные методы:

  • KEYUTIL.getKey(pem)
  • KEYUTIL.generateKeypair("RSA", 2048)
  • KEYUTIL.getPEM(keyObj)

Этот модуль выступает мостом между ASN.1 и криптографическим ядром.


5. Модуль сертификатов X.509

X509 отвечает за работу с цифровыми сертификатами:

  • парсинг сертификатов
  • извлечение публичных ключей
  • проверка подписей
  • чтение полей Subject / Issuer

Структура:

  • X509 — основной класс
  • X509.getPublicKeyFromCert
  • X509.pemToBase64

Этот модуль активно использует ASN.1 слой для декодирования структуры сертификатов.


6. JWS и JWT слой

Один из наиболее практичных модулей библиотеки — работа с JSON Web Token.

JWS (JSON Web Signature)

Расположен в:

  • KJUR.jws.JWS

Функциональность:

  • создание подписанных токенов
  • верификация подписи
  • поддержка алгоритмов RS256, HS256, ES256

Пример структуры:

KJUR.jws.JWS.sign(null, header, payload, key);

JWT

JWT реализуется поверх JWS и не является отдельным низкоуровневым модулем, а логически расширяет его.


7. Подсистема ECC (Elliptic Curve Cryptography)

ECC-функциональность распределена между:

  • KJUR.crypto.ECDSA
  • KJUR.crypto.ECDSAKey
  • KJUR.crypto.ECCurve

Этот слой отвечает за:

  • генерацию EC ключей
  • цифровую подпись ECDSA
  • поддержку кривых secp256r1, secp256k1

ECC тесно связан с JWS при использовании алгоритмов ES256 и ES384.


8. Модуль hextool

hextool — вспомогательный низкоуровневый модуль для работы с бинарными данными.

Функции:

  • преобразование HEX ⇄ байты
  • UTF-8 кодирование
  • Base64 операции

Пример:

hextool.hex2b64("deadbeef");

Он используется практически во всех слоях библиотеки как базовый инструмент.


Взаимодействие модулей

Структура Jsrsasign не является изолированным набором компонентов. Каждый слой зависит от других:

  • ASN.1 слой формирует структуру данных для криптографии
  • криптографическое ядро использует ASN.1 для ключей
  • KEYUTIL связывает PEM и внутренние структуры
  • X509 опирается на ASN.1 и crypto
  • JWS использует crypto + KEYUTIL
  • ECC интегрирован в crypto и JWS

Иерархия формирует цепочку:

ASN.1 → Crypto → KEYUTIL / X509 → JWS/JWT


Способы загрузки модулей

Jsrsasign поддерживает несколько моделей подключения, что влияет на доступность модулей:

Глобальный режим

Все модули доступны через KJUR, KEYUTIL, X509.

CommonJS

const jsrsasign = require("jsrsasign");

В этом режиме структура сохраняется, но доступ идёт через экспортированный объект.

AMD

Используется в старых браузерных системах модулей.


Особенности модульной организации

Архитектура Jsrsasign отличается рядом характерных особенностей:

  • отсутствие строгого разделения на пакеты
  • использование глобального namespace
  • тесная связность модулей
  • историческая эволюция структуры без полной переработки

Несмотря на это, логическая модульность остаётся чётко выраженной через иерархию объектов.


Роль KJUR как центрального контейнера

Объект KJUR выполняет роль единой точки входа для большинства операций. Он объединяет:

  • криптографию
  • подписи
  • ASN.1
  • JWT
  • утилиты

Такая структура упрощает использование библиотеки в средах без модульной системы, но создаёт плотную связность между компонентами.