Библиотека jsrsasign представляет собой монолитный JavaScript-пакет криптографических инструментов, собранных вокруг реализации стандартов PKI, X.509, JWT/JWS/JWE, ASN.1 и базовых криптографических операций. Архитектурно пакет не следует модульной ES6-структуре с дроблением на отдельные импортируемые части в классическом современном смысле, а поставляется как набор готовых сборок и пространств имён, объединённых в единый глобальный объект.
Основная идея организации заключается в предоставлении единого
API-пространства KJUR, внутри которого сгруппированы
функциональные области: криптография, работа с сертификатами, подписи,
ключи и кодирование структур ASN.1.
В составе npm-пакета и CDN-дистрибутива присутствует несколько ключевых сборок, отличающихся степенью объединения и предназначением:
Файл вида:
jsrsasign-all-min.jsjsrsasign-all-min.js.mapпредставляет собой минимизированную версию всей библиотеки. Именно он чаще всего используется в браузере через CDN.
Особенности:
jsrsasign-all-src.jsпредставляет не минифицированную версию для отладки и изучения внутренней структуры.
Используется:
В некоторых версиях пакета присутствуют разделённые модули (внутренние файлы), однако они не являются полноценными ES-модулями и чаще всего используются только внутри сборочного процесса.
При подключении через <script> основная точка
входа формирует глобальный объект:
KJURKEYUTILX509ASN1HEXПосле загрузки библиотеки все основные функции становятся доступны через глобальную область видимости.
Пример структуры после загрузки:
KJUR.cryptoKJUR.jwsKJUR.jws.JWSKJUR.asn1KEYUTILТипичный сценарий использования:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsrsasign/x.x.x/jsrsasign-all-min.js"></script>
После загрузки библиотека автоматически инициализирует глобальные пространства имён без необходимости явной инициализации.
Библиотека использует UMD-подход, обеспечивая совместимость с:
При этом в браузере приоритет отдан глобальному объекту, а не модульной системе.
Основной способ использования:
const jsrsasign = require("jsrsasign");
или частичное извлечение:
const { KJUR, KEYUTIL } = require("jsrsasign");
Внутри Node.js пакет также создаёт те же глобальные структуры, что и в браузере, но с возможностью локального использования через экспорт.
Экспорт в Node.js реализован через CommonJS-модель:
module.exports = ...Это означает, что:
Ключевой архитектурный элемент jsrsasign — это иерархия глобальных объектов.
Центральное пространство имён:
Структура:
KJUR.cryptoKJUR.jwsKJUR.jweKJUR.asn1Утилиты для работы с ключами:
Модуль для работы с сертификатами X.509:
Низкоуровневые операции с ASN.1:
KJUR.crypto содержит:
KJUR.jws.JWS реализует:
KJUR.jwe.JWE обеспечивает:
KJUR.asn1:
Несмотря на монолитный вид, библиотека логически разделена на слои:
Библиотека исторически развивалась до стандартизации ES Modules, поэтому:
Главная особенность структуры:
Архитектура ориентирована на:
window.KJURПоведение:
Компоненты связаны через общий namespace, а не через импортные зависимости:
KJUR.crypto используется в KJUR.jwsASN1 используется в X509KEYUTIL связывает криптографические операции с
сертификатамиТакой подход формирует плотную внутреннюю связанность без явного модульного графа зависимостей.
Архитектура jsrsasign строится вокруг следующих принципов: