Jsrsasign представляет собой модульную криптографическую библиотеку, построенную вокруг единого глобального пространства имён и набора вложенных подмодулей. В отличие от современных ESM-библиотек, она исторически ориентирована на работу в браузере и поддерживает несколько моделей подключения: глобальную, CommonJS и AMD.
Основная идея структуры — объединение всех криптографических функций в иерархическое пространство объектов, где каждый уровень отвечает за отдельную предметную область: работа с ключами, ASN.1, подписи, хеширование, JWT и низкоуровневые утилиты.
После подключения библиотеки в среде браузера создаётся глобальный объект KJUR, который выступает корневым контейнером всех модулей.
Структура выглядит следующим образом:
KJUR.crypto — криптографические алгоритмы и
операцииKJUR.jws — работа с JSON Web SignatureKJUR.jwe — JSON Web Encryption (в расширенных
сборках)KJUR.asn1 — инструменты для работы с ASN.1KEYUTIL — утилиты для ключей (RSA, EC, PEM)X509 — работа с X.509 сертификатамиhextool — преобразования HEX, UTF-8 и бинарных
данныхТакой подход обеспечивает единый интерфейс без необходимости импортировать отдельные модули.
Структура Jsrsasign логически делится на несколько уровней:
Этот слой содержит вспомогательные функции, используемые всеми остальными компонентами:
Пример:
KJUR.crypto.Util.getRandomHexOfNBytes(16);
ASN.1 — ключевая часть библиотеки, обеспечивающая работу с бинарными структурами сертификатов и ключей.
Основные компоненты:
KJUR.asn1.ASN1ObjectKJUR.asn1.DERIntegerKJUR.asn1.DERSequenceKJUR.asn1.x509Этот слой используется при:
ASN.1 слой является фундаментом для всей PKI-логики библиотеки.
На уровне KJUR.crypto находятся основные алгоритмы:
Структура подмодулей:
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();
KEYUTIL является одним из наиболее используемых
компонентов. Он обеспечивает:
Структура не вложена в KJUR, но тесно интегрирована с
ним.
Основные методы:
KEYUTIL.getKey(pem)KEYUTIL.generateKeypair("RSA", 2048)KEYUTIL.getPEM(keyObj)Этот модуль выступает мостом между ASN.1 и криптографическим ядром.
X509 отвечает за работу с цифровыми сертификатами:
Структура:
X509 — основной классX509.getPublicKeyFromCertX509.pemToBase64Этот модуль активно использует ASN.1 слой для декодирования структуры сертификатов.
Один из наиболее практичных модулей библиотеки — работа с JSON Web Token.
Расположен в:
KJUR.jws.JWSФункциональность:
Пример структуры:
KJUR.jws.JWS.sign(null, header, payload, key);
JWT реализуется поверх JWS и не является отдельным низкоуровневым модулем, а логически расширяет его.
ECC-функциональность распределена между:
KJUR.crypto.ECDSAKJUR.crypto.ECDSAKeyKJUR.crypto.ECCurveЭтот слой отвечает за:
ECC тесно связан с JWS при использовании алгоритмов ES256 и ES384.
hextool — вспомогательный низкоуровневый модуль для
работы с бинарными данными.
Функции:
Пример:
hextool.hex2b64("deadbeef");
Он используется практически во всех слоях библиотеки как базовый инструмент.
Структура Jsrsasign не является изолированным набором компонентов. Каждый слой зависит от других:
Иерархия формирует цепочку:
ASN.1 → Crypto → KEYUTIL / X509 → JWS/JWT
Jsrsasign поддерживает несколько моделей подключения, что влияет на доступность модулей:
Все модули доступны через KJUR, KEYUTIL,
X509.
const jsrsasign = require("jsrsasign");
В этом режиме структура сохраняется, но доступ идёт через экспортированный объект.
Используется в старых браузерных системах модулей.
Архитектура Jsrsasign отличается рядом характерных особенностей:
Несмотря на это, логическая модульность остаётся чётко выраженной через иерархию объектов.
Объект KJUR выполняет роль единой точки входа для
большинства операций. Он объединяет:
Такая структура упрощает использование библиотеки в средах без модульной системы, но создаёт плотную связность между компонентами.