g12s.h - Man Page
Алгоритмы ГОСТ Р 34.10-94 (Россия)
Synopsis
#include 'bee2/defs.h'
Классы
struct g12s_params
Долговременные параметры g12s.
Определения типов
typedef struct g12s_params g12s_params
Долговременные параметры g12s.
Функции
err_t g12sParamsStd (g12s_params *params, const char *name)
Загрузка стандартных долговременных параметров
err_t g12sParamsVal (const g12s_params *params)
Проверка долговременных параметров
err_t g12sKeypairGen (octet privkey[], octet pubkey[], const g12s_params *params, gen_i rng, void *rng_state)
Генерация пары ключей
err_t g12sSign (octet sig[], const g12s_params *params, const octet hash[], const octet privkey[], gen_i rng, void *rng_state)
Выработка ЭЦП
err_t g12sVerify (const g12s_params *params, const octet hash[], const octet sig[], const octet pubkey[])
Проверка ЭЦП
Подробное описание
ГОСТ Р 34.10-2012: Общие положения
Реализованы алгоритмы ГОСТ Р 34.10-2012 (g12s). При ссылках на алгоритмы, таблицы, другие объекты подразумеваются разделы ГОСТ Р 34.10-2012, в которых эти объекты определены.
Ожидается [ERR_BAD_INPUT]
Все входные указатели корректны.
- Регулярность
todo
Управление долговременными параметрами
Структура g12s_params описывает долговременные параметры g12s. Поля структуры обозначаются также, как в п. 5.2.
Максимальные размерности G12S_FIELD_SIZE, G12S_ORDER_SIZE соответствуют уровню стойкости l == 512.
При g12s_params::l == 256 в полях g12s_params::p и g12s_params::q используется только первая половина октетов. При g12s_params::l == 512 используются все октеты.
В полях g12s_params::a, g12s_params::b, g12s_params::xP, g12s_params::yP используется no октетов, где no --- длина g12s_params::p в октетах: no = memNonZeroSize(g12s_params::p, G12S_FIELD_SIZE * g12s_params::l / 512).
Неиспользуемые октеты могут быть заданы произвольным образом.
Все поля структуры g12s_params, за исключением поля g12s_params::n, кодируют определенные числа. При кодировании используются правила little-endian.
Управление ключами
Ключи распространяются вместе с долговременными параметрами. Долговременный параметр l определяет длину личного ключа (privkey): ключ состоит из l / 4 октетов. Открытый ключ (pubkey) состоит из 2 * no октетов, где no --- длина модуля p в октетах.
Буфер privkey и половинки буфера pubkey представляют собой кодовые представления определенных чисел. При кодировании используются правила little-endian. Первая половинка pubkey кодирует x-координату открытого ключа, вторая половинка -- y-координату.
Электронная цифровая подпись (ЭЦП)
Данные, которые используются при выработке / проверке подписи, распространяются вместе с долговременными параметрами. Долговременный параметр l определяет длину хэш-значения hash и подписи sig в октетах: hash состоит из l / 8 октетов, sig -- из l / 4 октетов.
Буфер hash и половинки буфера sig являются кодовыми представлениями определенных чисел. При кодировании используются правила big-endian (см. формулы (14), (19) и шаг 6 алгоритма выработки ЭЦП). Первая половинка sig кодирует число r, вторая половинка -- число s.
Функции
err_t g12sKeypairGen (octet privkey[], octet pubkey[], const g12s_params * params, gen_i rng, void * rng_state)
Для заданных долговременных параметров params генерируются личный privkey и открытый pubkey ключи. При генерации используется генератор rng и его состояние rng_state.
Ожидается [ERR_BAD_PARAMS]
Параметры params корректны.
Ожидается [ERR_BAD_RNG]
Генератор rng (с состоянием rng_state) корректен.
Ожидается
Используется криптографически стойкий генератор rng.
- Возвращает
ERR_OK, если ключи сгенерированы, и код ошибки в противном случае.
- Аргументы
privkey личный ключ
pubkey открытый ключ
params долговременные параметры
rng генератор случайных чисел
rng_state [in,out] состояние генератора
err_t g12sParamsStd (g12s_params * params, const char * name)
В params загружаются стандартные долговременные параметры с именем name. Поддерживаются следующие имена:
- "1.2.643.2.2.35.0" (параметры проверочного примера A.1, l == 256);
- "1.2.643.2.2.35.1" (параметры КриптоПро, набор A, l == 256);
- "1.2.643.2.2.35.2" (параметры КриптоПро, набор B, l == 256);
- "1.2.643.2.2.35.3" (параметры КриптоПро, набор C, l == 256);
- "1.2.643.2.9.1.8.1" (параметры КриптоКом, l == 256);
- "1.2.643.7.1.2.1.2.0" (параметры проверочного примера A.2, l == 512);
- "1.2.643.7.1.2.1.2.1" (рабочие параметры paramsetA, l == 512);
- "1.2.643.7.1.2.1.2.2" (рабочие параметры paramsetB, l == 512).
Прим.
Параметры и их имена (идентификаторы) взяты из следующих источников:
- файл gost_params.c, который является частью OpenSSL;
- проект "Методические рекомендации по заданию параметров эллиптических
кривых в соответствии с ГОСТ Р 34.10-2012" (http://www.tc26.ru, октябрь 2013 г.); - документ "Идентификаторы объектов технического комитета по
стандартизации "Криптографическая защита информации" (ТК26)" (http://www.tc26.ru/metodiki/OID_TK_26/index.php, апрель 2014 г.).
- Возвращает
ERR_OK, если параметры успешно загружены, и код ошибки в противном случае.
- Аргументы
params стандартные параметры
name имя параметров
err_t g12sParamsVal (const g12s_params * params)
Проверяется корректность долговременных параметров params.
- Возвращает
ERR_OK, если параметры корректны, и код ошибки в противном случае.
- Аргументы
params параметры
err_t g12sSign (octet sig[], const g12s_params * params, const octet hash[], const octet privkey[], gen_i rng, void * rng_state)
Вырабатывается подпись sig сообщения с хэш-значением hash. Подпись вырабатывается на личном ключе privkey. При выработке ЭЦП используются долговременные параметры params и генератор rng с состоянием rng_state.
Ожидается [ERR_BAD_PARAMS]
Параметры params корректны.
Ожидается [ERR_BAD_PRIVKEY]
Личный ключ privkey корректен.
Ожидается [ERR_BAD_RNG]
Генератор rng (с состоянием rng_state) корректен.
Ожидается
Генератор rng является криптографически стойким.
- Возвращает
ERR_OK, если подпись выработана, и код ошибки в противном случае.
- Аргументы
sig подпись
params долговременные параметры
hash хэш-значение
privkey личный ключ
rng генератор случайных чисел
rng_state [in,out] состояние генератора
err_t g12sVerify (const g12s_params * params, const octet hash[], const octet sig[], const octet pubkey[])
Проверяется ЭЦП sig сообщения с хэш-значением hash. При проверке используются долговременные параметры params и открытый ключ pubkey.
Ожидается [ERR_BAD_PARAMS]
Параметры params корректны.
Ожидается [ERR_BAD_PUBKEY]
Открытый ключ pubkey корректен.
- Возвращает
ERR_OK, если подпись корректна, и код ошибки в противном случае.
Прим.
При нарушении ограничений на ЭЦП возвращается код ERR_BAD_SIG.
- Аргументы
params долговременные параметры
hash хэш-значение
sig подпись
pubkey открытый ключ
Автор
Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.