KJUR представляет собой глобальный объект, через который в библиотеке jsrsasign организован доступ ко всем основным криптографическим, ASN.1 и криптографическим протоколам. Архитектура построена на строгом разделении функциональности по пространствам имён, что позволяет изолировать компоненты и упрощает навигацию по API при работе с различными криптографическими задачами.
Вся библиотека jsrsasign структурирована вокруг единственного
глобального контейнера KJUR. Он формируется при загрузке
библиотеки в среде выполнения JavaScript и содержит вложенные модули,
сгруппированные по функциональному назначению.
Основная идея заключается в том, что криптографические операции, работа с ASN.1 структурами и реализация протоколов (JWT, JWS, PKCS) не смешиваются в одном пространстве, а распределяются по подпространствам:
KJUR.crypto — криптографические примитивы и
алгоритмыKJUR.asn1 — генерация и разбор ASN.1 структурKJUR.jws — работа с JSON Web SignatureKJUR.jws.JWS — реализация JWS операцийKJUR.jws.JWT — операции с JWTТакая структура позволяет воспринимать библиотеку как набор независимых, но согласованных подсистем.
KJUR.crypto содержит реализацию криптографических
алгоритмов и механизмов, используемых для подписания, шифрования и
генерации ключей.
Ключевые компоненты:
Основной класс для создания и проверки цифровых подписей.
const sig = new KJUR.crypto.Signature({ "alg": "SHA256withRSA" });
sig.init(privateKeyPem);
sig.updateString("data to sign");
const signature = sig.sign();
Поддерживаются алгоритмы:
Хотя формально находится на верхнем уровне, тесно связан с
KJUR.crypto. Используется для импорта и экспорта
ключей.
const key = KEYUTIL.getKey(privateKeyPem);
Поддерживает:
Обеспечивает симметричное шифрование.
const encrypted = KJUR.crypto.Cipher.encrypt("plaintext", key, "AES");
Поддерживаемые алгоритмы:
Низкоуровневые реализации алгоритмов:
KJUR.crypto.RSAKey — работа с RSA-ключамиKJUR.crypto.ECDSA — операции на эллиптических
кривыхKJUR.crypto.DSA — алгоритм DSAЭти классы редко используются напрямую, так как обычно обёрнуты в
Signature, однако доступны для тонкой настройки.
KJUR.asn1 реализует работу с ASN.1 — структурированным
форматом, используемым в сертификатах X.509, PKCS и криптографических
сообщениях.
ASN.1 представляется в виде дерева объектов, где каждый элемент имеет тип и значение.
Представление целого числа в DER-формате.
const int = new KJUR.asn1.DERInteger({ int: 123 });
Последовательность ASN.1 объектов.
const seq = new KJUR.asn1.DERSequence({
array: [
new KJUR.asn1.DERInteger({ int: 1 }),
new KJUR.asn1.DERUTF8String({ str: "test" })
]
});
Используется для представления битовых строк, например, публичных ключей.
Подмодуль для работы с X.509 сертификатами:
KJUR.jws реализует работу с JSON Web Signature (JWS),
стандартом цифровой подписи JSON-данных.
Создание подписанного JWT/JWS:
const header = { alg: "HS256", typ: "JWT" };
const payload = { sub: "1234567890", name: "John Doe" };
const token = KJUR.jws.JWS.sign(
"HS256",
JSON.stringify(header),
JSON.stringify(payload),
"secret"
);
Проверка подписи:
const result = KJUR.jws.JWS.verify(token, "secret", ["HS256"]);
Возвращает true или false.
Более высокоуровневая абстракция над JWS, ориентированная на работу с JWT.
Основные функции:
const parsed = KJUR.jws.JWT.parse(token);
Результат включает:
Архитектура KJUR построена иерархически:
KJUR.crypto предоставляет базовые алгоритмыKJUR.asn1 использует криптографические примитивы для
кодирования ключей и сертификатовKJUR.jws опирается на KJUR.crypto для
подписи и проверкиKJUR.jws.JWT использует KJUR.jws как
нижний уровеньТакая структура позволяет менять внутренние реализации криптографии без изменения верхнеуровневых API.
В браузерной среде объект KJUR появляется в глобальном
пространстве после подключения библиотеки:
<script src="jsrsasign-all-min.js"></script>
После этого доступ становятся доступны:
KJUR.crypto
KJUR.asn1
KJUR.jws
В Node.js используется импорт:
const jsrsasign = require("jsrsasign");
При этом структура остаётся идентичной, включая вложенные пространства имён.
Ключевые принципы, заложенные в KJUR:
KJUR.<domain>.<module>Комбинация криптографии, ASN.1 и JWS:
const key = KEYUTIL.getKey(privateKeyPem);
const sig = new KJUR.crypto.Signature({ alg: "SHA256withRSA" });
sig.init(key);
sig.updateString("message");
const signature = sig.sign();
const asn1 = new KJUR.asn1.DERSequence({
array: [
new KJUR.asn1.DERUTF8String({ str: "signature" }),
new KJUR.asn1.DEROctetString({ hex: signature })
]
});
const token = KJUR.jws.JWS.sign(
"RS256",
JSON.stringify({ alg: "RS256" }),
JSON.stringify({ data: "example" }),
key
);
Ключевая роль в архитектуре отведена объектам ключей, которые используются всеми пространствами имён:
KJUR.crypto.SignatureKJUR.jws.JWSKJUR.asn1.x509Импорт и унификация выполняется через KEYUTIL, который
связывает PEM, DER и JWK форматы в единую модель представления.
KJUR выступает центральной точкой доступа ко всем возможностям библиотеки:
Единая точка входа позволяет использовать библиотеку как монолитный криптографический фреймворк, сохраняя при этом модульную структуру внутри.