Структура пространства имён sjcl

Библиотека sjcl организована вокруг единого глобального объекта sjcl, внутри которого размещены логически сгруппированные модули криптографических примитивов, вспомогательных функций и высокоуровневых интерфейсов. Такая структура позволяет изолировать функциональные области, минимизировать конфликты имён и обеспечить предсказуемую навигацию по API.

Основная идея архитектуры заключается в том, что вся функциональность представлена как дерево объектов. Корневым узлом выступает sjcl, а все алгоритмы и утилиты распределяются по специализированным подпространствам.

Каждое подпространство выполняет строго определённую роль:

  • криптографические алгоритмы (хэширование, шифрование)
  • математические структуры (большие числа, эллиптические кривые)
  • режимы работы блочных шифров
  • кодеки для преобразования данных
  • генерация и управление случайными числами
  • вспомогательные криптографические примитивы

Такой подход соответствует модульной модели, где каждый компонент может использоваться независимо, но при этом интегрирован в общую систему.

Корневой объект sjcl

Объект sjcl является точкой входа ко всей библиотеке. Он содержит ссылки на основные пространства имён и общие утилиты.

Внутри него располагаются:

  • криптографические модули
  • математическое ядро
  • механизмы кодирования
  • генераторы случайных чисел
  • вспомогательные функции и исключения

Структура корневого объекта обычно не перегружается логикой, а служит исключительно контейнером для модулей.

Пространство имён sjcl.hash

Модуль sjcl.hash объединяет алгоритмы криптографического хэширования. Каждый алгоритм реализован как отдельный конструктор с единым интерфейсом.

Типичная структура:

  • sjcl.hash.sha256
  • sjcl.hash.sha1
  • sjcl.hash.sha512

Каждый объект хэша реализует методы:

  • update(data) — добавление данных в поток
  • finalize() — получение итогового значения
  • reset() — сброс состояния

Хэш-функции используются как строительные блоки для более сложных конструкций: HMAC, цифровых подписей и KDF.

Пространство имён sjcl.cipher

В sjcl.cipher находятся реализации симметричных блочных шифров. Основной алгоритм — AES, представленный как конструктор с ключом.

Типичная структура:

  • sjcl.cipher.aes

Объекты шифров поддерживают операции:

  • шифрование блока данных
  • расшифрование блока данных

Архитектура предполагает работу с фиксированными блоками, обычно 128 бит, что соответствует стандарту AES.

Пространство имён sjcl.mode

Модуль sjcl.mode содержит режимы работы блочных шифров. Эти режимы определяют, как обрабатываются данные длиннее одного блока.

Основные реализации:

  • sjcl.mode.ccm
  • sjcl.mode.gcm
  • sjcl.mode.ocb2

Каждый режим представляет собой набор функций:

  • encrypt(cipher, data, iv, aad)
  • decrypt(cipher, data, iv, aad)

Режимы обеспечивают:

  • конфиденциальность данных
  • целостность (в зависимости от режима)
  • обработку дополнительных данных (AAD)

Архитектура отделяет алгоритм шифрования от способа его применения, что повышает гибкость.

Пространство имён sjcl.codec

sjcl.codec отвечает за преобразование данных между различными представлениями. Поскольку криптографические алгоритмы работают с битовыми массивами, кодеки обеспечивают совместимость с внешними форматами.

Основные кодеки:

  • sjcl.codec.hex
  • sjcl.codec.base64
  • sjcl.codec.utf8String
  • sjcl.codec.arrayBuffer

Каждый кодек реализует два ключевых метода:

  • fromBits(bits) — преобразование из внутреннего формата
  • toBits(data) — преобразование во внутренний формат

Внутренним стандартом представления данных является bitArray.

Пространство имён sjcl.bitArray

Модуль sjcl.bitArray является фундаментальным элементом библиотеки. Он реализует структуру для хранения произвольного количества бит.

Особенности представления:

  • массив 32-битных слов
  • отдельный счётчик бит в последнем элементе
  • операции побитовой обработки

Основные функции:

  • сложение массивов
  • XOR
  • конкатенация
  • извлечение подмассивов

bitArray используется всеми криптографическими модулями как универсальный формат обмена данными.

Пространство имён sjcl.misc

sjcl.misc объединяет вспомогательные криптографические конструкции, которые не относятся напрямую к шифрованию или хэшированию, но являются необходимыми для построения безопасных систем.

Основные компоненты:

  • sjcl.misc.hmac
  • sjcl.misc.pbkdf2
  • sjcl.misc.cachedPbkdf2

HMAC реализует механизм аутентификации сообщений на основе хэш-функций. PBKDF2 используется для получения ключей из паролей с применением итеративного хэширования.

Кешированная версия PBKDF2 оптимизирует повторные вычисления.

Пространство имён sjcl.random

Модуль sjcl.random отвечает за генерацию криптографически стойкой случайности. Он построен поверх пула энтропии и генератора псевдослучайных чисел.

Основные элементы:

  • пул энтропии
  • сбор событий (мышь, клавиатура, таймеры)
  • извлечение случайных бит
  • блокировка до накопления достаточной энтропии

Генератор не возвращает значения, пока не собрана минимально необходимая энтропия, что является важной особенностью криптографической устойчивости.

Пространство имён sjcl.prng

sjcl.prng реализует псевдослучайный генератор, используемый внутри sjcl.random.

Структура включает:

  • внутреннее состояние
  • функции добавления энтропии
  • генерацию блоков случайных данных

Генератор основан на криптографических примитивах и периодически пересеивается.

Пространство имён sjcl.ecc

Модуль sjcl.ecc содержит реализацию криптографии на эллиптических кривых.

Основные компоненты:

  • ключевые пары (приватный и публичный ключ)
  • операции умножения точек
  • алгоритмы ECDH и ECDSA

Структура включает:

  • sjcl.ecc.curves
  • sjcl.ecc.point
  • sjcl.ecc.elGamal (в некоторых конфигурациях)

Эллиптические кривые используются для асимметричного шифрования и цифровых подписей.

Пространство имён sjcl.bn

sjcl.bn представляет собой реализацию больших чисел (Big Numbers), необходимых для операций в асимметричной криптографии.

Особенности:

  • поддержка произвольной длины
  • операции сложения, умножения, возведения в степень
  • модульная арифметика

Большие числа используются в ECC и других алгоритмах, требующих высокой точности вычислений.

Пространство имён sjcl.exception

Модуль sjcl.exception содержит иерархию ошибок, возникающих при криптографических операциях.

Типичные классы:

  • общие криптографические ошибки
  • ошибки некорректного ввода
  • ошибки состояния генератора случайных чисел

Структура исключений позволяет унифицировать обработку ошибок на уровне всей библиотеки.

Взаимодействие пространств имён

Архитектура sjcl построена на взаимодействии модулей через единые типы данных и строгие интерфейсы.

Ключевые зависимости:

  • sjcl.cipher использует sjcl.bitArray
  • sjcl.mode зависит от sjcl.cipher
  • sjcl.misc опирается на sjcl.hash
  • sjcl.random поддерживает sjcl.prng
  • sjcl.ecc использует sjcl.bn и sjcl.random

Такое разделение обеспечивает низкую связность компонентов при высокой степени повторного использования.

Роль sjcl.json

Отдельное пространство имён sjcl.json предоставляет высокоуровневый интерфейс для шифрования и дешифрования структурированных данных.

Основные функции:

  • упаковка объектов в зашифрованный JSON
  • восстановление исходных данных
  • управление ключами и параметрами шифрования

Этот слой объединяет низкоуровневые криптографические примитивы в единый прикладной API.

Итоговая структура дерева sjcl

Иерархия пространства имён может быть представлена следующим образом:

  • sjcl

    • hash
    • cipher
    • mode
    • codec
    • bitArray
    • misc
    • random
    • prng
    • ecc
    • bn
    • exception
    • json

Каждый узел дерева представляет собой самостоятельный модуль, связанный с другими через стандартизированные типы данных и интерфейсы.