Криптографические библиотеки предъявляют повышенные требования к тестированию: ошибка в реализации алгоритма приводит не к деградации функциональности, а к компрометации безопасности. Для Stanford JavaScript Crypto Library (SJCL) автоматизация тестирования в CI/CD должна учитывать детерминированность вычислений, кросс-платформенность JavaScript-окружений и необходимость проверки стандартных криптографических векторов.
Ключевая цель CI/CD в контексте SJCL — гарантировать идентичность результатов между Node.js, браузерными окружениями и различными сборками библиотеки при любых изменениях кода.
Тестирование SJCL обычно разделяется на несколько уровней:
Проверяются базовые операции:
Каждый тест опирается на фиксированные входные данные и заранее известные выходные значения.
Особое значение имеют тестовые векторы:
SJCL использует собственный генератор случайных чисел
(sjcl.random). В CI/CD среде его поведение должно быть
строго контролируемым.
Для тестов применяются подходы:
Ключевое требование: любая криптографическая операция в тестах должна быть воспроизводимой.
Node.js используется как основная среда быстрых проверок.
Типичный сценарий:
Особое внимание уделяется:
SJCL исторически ориентирован на браузер, поэтому CI/CD обязательно включает headless-окружение.
Используются подходы:
Проверяются:
CI/CD пайплайн обычно строится вокруг нескольких этапов:
name: sjcl-tests
on:
push:
pull_request:
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20]
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint
- name: Unit tests
run: npm test
- name: Coverage
run: npm run coverage
- name: Browser tests
run: npm run test:browser
Основой корректности SJCL являются фиксированные входы и выходы.
Пример структуры теста:
Любое отклонение считается критической ошибкой.
Особое внимание уделяется:
Фаззинг применяется для проверки устойчивости к неожиданным входным данным:
Цель фаззинга не только обнаружение падений, но и предотвращение:
SJCL должен работать одинаково в:
CI/CD проверяет:
Дополнительно в pipeline включаются проверки:
Особое правило: любые изменения в криптографических модулях требуют полного прогрева всех тестов, а не частичного запуска.
Каждое изменение SJCL должно проходить регрессионный набор:
Регрессия в криптографии рассматривается как критическая ошибка уровня безопасности.