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 g12sStdParams (g12s_params *params, const char *name)
Загрузка стандартных долговременных параметров
err_t g12sValParams (const g12s_params *params)
Проверка долговременных параметров
err_t g12sGenKeypair (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 g12sGenKeypair (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 состояние генератора

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 состояние генератора

err_t g12sStdParams (g12s_params * params, const char * name)

В params загружаются стандартные долговременные параметры с именем name. Поддерживаются следующие имена:

·

·

·

·

·

·

·

·

Прим.

Параметры и их имена (идентификаторы) взяты из следующих источников:

  • файл 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 g12sValParams (const g12s_params * params)

Проверяется корректность долговременных параметров params.

Возвращает

ERR_OK, если параметры корректны, и код ошибки в противном случае.

Аргументы

params параметры

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 из исходного текста.

Info

Вт 23 Янв 2024 00:00:00 Библиотека Bee2