В библиотеке Jsrsasign значительная часть логики скрыта за слоем вспомогательных функций, которые обеспечивают унификацию работы с данными, преобразования форматов и упрощение криптографических операций. Эти функции не всегда документированы на высоком уровне, но играют ключевую роль в корректной работе API.
Внутренние утилиты решают несколько задач:
Большинство вспомогательных функций сосредоточено в следующих пространствах имен:
KJUR.lang.StringKJUR.lang.IntegerKJUR.crypto.UtilASN1HEXhextob64, b64tohex, utf8tohex
и аналогичные глобальные функцииЭти утилиты часто используются внутри классов вроде
KJUR.crypto.Signature или
KJUR.crypto.MessageDigest.
Одной из самых часто используемых операций является преобразование текстовых данных в шестнадцатеричное представление:
var hex = utf8tohex("example");
Обратное преобразование:
var text = hextoutf8(hex);
Особенности:
Для работы с сертификатами и токенами используются функции:
var b64 = hextob64(hex);
var hex = b64tohex(b64);
Для URL-безопасного варианта:
var b64u = hextob64u(hex);
var hex = b64utohex(b64u);
Ключевые отличия Base64URL:
+ заменяется на -/ заменяется на _=Модуль ASN1HEX предоставляет функции для разбора
ASN.1-структур в hex-формате.
var len = ASN1HEX.getVblen(hex, index);
var value = ASN1HEX.getV(hex, index);
var children = ASN1HEX.getChildIdx(hex, index);
Используется при разборе:
var hex = bigIntToHex(bigInteger);
var bi = new BigInteger(hex, 16);
Внутри библиотеки активно используется объект BigInteger
для:
Вспомогательная функция:
var hashHex = KJUR.crypto.Util.hashHex(hex, "sha256");
Поддерживаемые алгоритмы:
var randomHex = KJUR.crypto.Util.getRandomHexOfNbytes(16);
Особенности:
Внутренние функции позволяют извлекать параметры RSA:
var key = new RSAKey();
key.readPrivateKeyFromPEMString(pem);
Внутри происходит:
Библиотека предоставляет “короткие” функции без пространств имен:
hextorstrrstrtohexb64tob64ub64utob64Они используются для быстрого преобразования без необходимости обращаться к объектам.
Некоторые утилиты выполняют проверку корректности:
KJUR.lang.String.isHex(hexString);
KJUR.lang.String.isBase64(base64String);
Назначение:
var hex = pemtohex(pemString);
var pem = hextopem(hex, "CERTIFICATE");
Особенности:
Вспомогательные функции часто:
Такой подход объясняется тем, что:
Подготовка данных перед подписью:
Разбор сертификата:
Работа с JWT:
Генерация ключей:
Внутренние вспомогательные функции позволяют:
Именно через них раскрывается архитектура Jsrsasign: библиотека строится вокруг универсального представления данных в виде hex-строк и набора инструментов для их трансформации.