|
| 1 | +# Анализ поведения (Тесты): tdd-https-vpn-ciphersuite-ru |
| 2 | + |
| 3 | +> Версия: 1.0 |
| 4 | +> Статус: DRAFT |
| 5 | +> Последнее обновление: 2026-05-11 |
| 6 | +
|
| 7 | +Этот документ описывает ожидаемое поведение системы через набор тестовых сценариев. Дизайн системы вытекает из этих случаев. |
| 8 | + |
| 9 | +## Сценарии поведения |
| 10 | + |
| 11 | +### 1. Регистрация провайдера |
| 12 | +**Описание**: Провайдер "ru" должен быть доступен в глобальном реестре после импорта. |
| 13 | + |
| 14 | +- **Case 1.1: Успешное получение провайдера** |
| 15 | + - **Given**: Пакет `crypto/ru` импортирован. |
| 16 | + - **When**: Вызывается `crypto.Get("ru")`. |
| 17 | + - **Then**: Возвращается объект провайдера и `ok == true`. |
| 18 | + - **Success Criteria**: Провайдер не nil, имя соответствует "ru". |
| 19 | + |
| 20 | +### 2. Конфигурация TLS |
| 21 | +**Описание**: Провайдер должен корректно настраивать `tls.Config` для использования алгоритмов ГОСТ. |
| 22 | + |
| 23 | +- **Case 2.1: Установка версии TLS** |
| 24 | + - **Given**: Новый `tls.Config`. |
| 25 | + - **When**: Вызывается `provider.ConfigureTLS(cfg)`. |
| 26 | + - **Then**: `MinVersion` должна быть не ниже TLS 1.2 (согласно RFC 9189). |
| 27 | + |
| 28 | +- **Case 2.2: Настройка Cipher Suites** |
| 29 | + - **Given**: `tls.Config`. |
| 30 | + - **When**: Вызывается `provider.ConfigureTLS(cfg)`. |
| 31 | + - **Then**: В списке `CipherSuites` должны присутствовать идентификаторы ГОСТ (например, `0xC100`). |
| 32 | + |
| 33 | +### 3. Криптографические примитивы (ГОСТ) |
| 34 | +**Описание**: Алгоритмы должны выдавать корректные результаты согласно тестовым векторам стандартов. |
| 35 | + |
| 36 | +- **Case 3.1: Хеширование Стрибог (256/512)** |
| 37 | + - **Given**: Известная входная строка. |
| 38 | + - **When**: Вычисляется хеш. |
| 39 | + - **Then**: Результат совпадает с контрольным значением из ГОСТ Р 34.11-2012. |
| 40 | + |
| 41 | +- **Case 3.2: Шифрование Кузнечик/Магма** |
| 42 | + - **Given**: Открытый текст и ключ. |
| 43 | + - **When**: Выполняется шифрование в режиме MGM или CTR. |
| 44 | + - **Then**: Зашифрованный текст совпадает с тестовым вектором ГОСТ Р 34.12-2015. |
| 45 | + |
| 46 | +### 4. Обработка сертификатов |
| 47 | +**Описание**: Система должна правильно определять тип сертификата для выбора провайдера. |
| 48 | + |
| 49 | +- **Case 4.1: Детекция ГОСТ сертификата** |
| 50 | + - **Given**: Сертификат с алгоритмом подписи ГОСТ. |
| 51 | + - **When**: Вызывается функция детекции провайдера. |
| 52 | + - **Then**: Возвращается строка "ru". |
| 53 | + |
| 54 | +## Граничные условия и ошибки |
| 55 | + |
| 56 | +- **Case E.1: Неподдерживаемый Cipher Suite** |
| 57 | + - **When**: В конфиге указан несуществующий ГОСТ-набор. |
| 58 | + - **Then**: Система должна выдать ошибку при инициализации. |
| 59 | + |
| 60 | +- **Case E.2: Невалидный ключ ГОСТ** |
| 61 | + - **When**: Попытка загрузки поврежденного приватного ключа ГОСТ. |
| 62 | + - **Then**: Ошибка `failed to load certificate`. |
0 commit comments