Библиотека sjcl организована вокруг единого глобального объекта
sjcl, внутри которого размещены логически сгруппированные
модули криптографических примитивов, вспомогательных функций и
высокоуровневых интерфейсов. Такая структура позволяет изолировать
функциональные области, минимизировать конфликты имён и обеспечить
предсказуемую навигацию по API.
Основная идея архитектуры заключается в том, что вся функциональность
представлена как дерево объектов. Корневым узлом выступает
sjcl, а все алгоритмы и утилиты распределяются по
специализированным подпространствам.
Каждое подпространство выполняет строго определённую роль:
Такой подход соответствует модульной модели, где каждый компонент может использоваться независимо, но при этом интегрирован в общую систему.
Объект sjcl является точкой входа ко всей библиотеке. Он
содержит ссылки на основные пространства имён и общие утилиты.
Внутри него располагаются:
Структура корневого объекта обычно не перегружается логикой, а служит исключительно контейнером для модулей.
Модуль sjcl.hash объединяет алгоритмы криптографического
хэширования. Каждый алгоритм реализован как отдельный конструктор с
единым интерфейсом.
Типичная структура:
sjcl.hash.sha256sjcl.hash.sha1sjcl.hash.sha512Каждый объект хэша реализует методы:
update(data) — добавление данных в потокfinalize() — получение итогового значенияreset() — сброс состоянияХэш-функции используются как строительные блоки для более сложных конструкций: HMAC, цифровых подписей и KDF.
В sjcl.cipher находятся реализации симметричных блочных
шифров. Основной алгоритм — AES, представленный как конструктор с
ключом.
Типичная структура:
sjcl.cipher.aesОбъекты шифров поддерживают операции:
Архитектура предполагает работу с фиксированными блоками, обычно 128 бит, что соответствует стандарту AES.
Модуль sjcl.mode содержит режимы работы блочных шифров.
Эти режимы определяют, как обрабатываются данные длиннее одного
блока.
Основные реализации:
sjcl.mode.ccmsjcl.mode.gcmsjcl.mode.ocb2Каждый режим представляет собой набор функций:
encrypt(cipher, data, iv, aad)decrypt(cipher, data, iv, aad)Режимы обеспечивают:
Архитектура отделяет алгоритм шифрования от способа его применения, что повышает гибкость.
sjcl.codec отвечает за преобразование данных между
различными представлениями. Поскольку криптографические алгоритмы
работают с битовыми массивами, кодеки обеспечивают совместимость с
внешними форматами.
Основные кодеки:
sjcl.codec.hexsjcl.codec.base64sjcl.codec.utf8Stringsjcl.codec.arrayBufferКаждый кодек реализует два ключевых метода:
fromBits(bits) — преобразование из внутреннего
форматаtoBits(data) — преобразование во внутренний форматВнутренним стандартом представления данных является
bitArray.
Модуль sjcl.bitArray является фундаментальным элементом
библиотеки. Он реализует структуру для хранения произвольного количества
бит.
Особенности представления:
Основные функции:
bitArray используется всеми криптографическими модулями
как универсальный формат обмена данными.
sjcl.misc объединяет вспомогательные криптографические
конструкции, которые не относятся напрямую к шифрованию или хэшированию,
но являются необходимыми для построения безопасных систем.
Основные компоненты:
sjcl.misc.hmacsjcl.misc.pbkdf2sjcl.misc.cachedPbkdf2HMAC реализует механизм аутентификации сообщений на основе хэш-функций. PBKDF2 используется для получения ключей из паролей с применением итеративного хэширования.
Кешированная версия PBKDF2 оптимизирует повторные вычисления.
Модуль sjcl.random отвечает за генерацию
криптографически стойкой случайности. Он построен поверх пула энтропии и
генератора псевдослучайных чисел.
Основные элементы:
Генератор не возвращает значения, пока не собрана минимально необходимая энтропия, что является важной особенностью криптографической устойчивости.
sjcl.prng реализует псевдослучайный генератор,
используемый внутри sjcl.random.
Структура включает:
Генератор основан на криптографических примитивах и периодически пересеивается.
Модуль sjcl.ecc содержит реализацию криптографии на
эллиптических кривых.
Основные компоненты:
Структура включает:
sjcl.ecc.curvessjcl.ecc.pointsjcl.ecc.elGamal (в некоторых конфигурациях)Эллиптические кривые используются для асимметричного шифрования и цифровых подписей.
sjcl.bn представляет собой реализацию больших чисел (Big
Numbers), необходимых для операций в асимметричной криптографии.
Особенности:
Большие числа используются в ECC и других алгоритмах, требующих высокой точности вычислений.
Модуль sjcl.exception содержит иерархию ошибок,
возникающих при криптографических операциях.
Типичные классы:
Структура исключений позволяет унифицировать обработку ошибок на уровне всей библиотеки.
Архитектура sjcl построена на взаимодействии модулей через единые типы данных и строгие интерфейсы.
Ключевые зависимости:
sjcl.cipher использует sjcl.bitArraysjcl.mode зависит от sjcl.ciphersjcl.misc опирается на sjcl.hashsjcl.random поддерживает sjcl.prngsjcl.ecc использует sjcl.bn и
sjcl.randomТакое разделение обеспечивает низкую связность компонентов при высокой степени повторного использования.
Отдельное пространство имён sjcl.json предоставляет
высокоуровневый интерфейс для шифрования и дешифрования
структурированных данных.
Основные функции:
Этот слой объединяет низкоуровневые криптографические примитивы в единый прикладной API.
Иерархия пространства имён может быть представлена следующим образом:
sjcl
Каждый узел дерева представляет собой самостоятельный модуль, связанный с другими через стандартизированные типы данных и интерфейсы.