bake.h - Man Page

Протоколы СТБ 34.101.66 (bake)

Synopsis

#include 'bee2/defs.h'
#include 'bee2/crypto/bign.h'

Классы

struct bake_settings
Настройки bake.
struct bake_cert
Сертификат bake.

Макросы

#define bakeDH   bignDH
Построение общего ключа протокола Диффи -- Хеллмана

Определения типов

typedef err_t(* bake_certval_i) (octet pubkey[], const bign_params *params, const octet *data, size_t len)
Проверка сертификата

Функции

err_t bakeKDF (octet key[32], const octet secret[], size_t secret_len, const octet iv[], size_t iv_len, size_t num)
Построение ключа
err_t bakeSWU (octet pt[], const bign_params *params, const octet msg[])
Построение точки эллиптической кривой
size_t bakeBMQV_keep (size_t l)
Длина состояния функций BMQV.
err_t bakeBMQVStart (void *state, const bign_params *params, const bake_settings *settings, const octet privkey[], const bake_cert *cert)
Инициализация протокола BMQV.
err_t bakeBMQVStep2 (octet out[], void *state)
Шаг 2 протокола BMQV.
err_t bakeBMQVStep3 (octet out[], const octet in[], const bake_cert *certb, void *state)
Шаг 3 протокола BMQV.
err_t bakeBMQVStep4 (octet out[], const octet in[], const bake_cert *certa, void *state)
Шаг 4 протокола BMQV.
err_t bakeBMQVStep5 (const octet in[8], void *state)
Шаг 5 протокола BMQV.
err_t bakeBMQVStepG (octet key[32], void *state)
Извлечение ключа протокола BMQV.
err_t bakeBMQVRunB (octet key[32], const bign_params *params, const bake_settings *settings, const octet privkeyb[], const bake_cert *certb, const bake_cert *certa, read_i read, write_i write, void *file)
Выполнение BMQV стороной B.
err_t bakeBMQVRunA (octet key[32], const bign_params *params, const bake_settings *settings, const octet privkeya[], const bake_cert *certa, const bake_cert *certb, read_i read, write_i write, void *file)
Выполнение BMQV стороной A.
size_t bakeBSTS_keep (size_t l)
Длина состояния функций BSTS.
err_t bakeBSTSStart (void *state, const bign_params *params, const bake_settings *settings, const octet privkey[], const bake_cert *cert)
Инициализация протокола BSTS.
err_t bakeBSTSStep2 (octet out[], void *state)
Шаг 2 протокола BSTS.
err_t bakeBSTSStep3 (octet out[], const octet in[], void *state)
Шаг 3 протокола BSTS.
err_t bakeBSTSStep4 (octet out[], const octet in[], size_t in_len, bake_certval_i vala, void *state)
Шаг 4 протокола BSTS.
err_t bakeBSTSStep5 (const octet in[], size_t in_len, bake_certval_i valb, void *state)
Шаг 5 протокола BSTS.
err_t bakeBSTSStepG (octet key[32], void *state)
Извлечение ключа протокола BSTS.
err_t bakeBSTSRunB (octet key[32], const bign_params *params, const bake_settings *settings, const octet privkeyb[], const bake_cert *certb, bake_certval_i vala, read_i read, write_i write, void *file)
Выполнение BSTS стороной B.
err_t bakeBSTSRunA (octet key[32], const bign_params *params, const bake_settings *settings, const octet privkeya[], const bake_cert *certa, bake_certval_i valb, read_i read, write_i write, void *file)
Выполнение BSTS стороной A.
size_t bakeBPACE_keep (size_t l)
Длина состояния функций BPACE.
err_t bakeBPACEStart (void *state, const bign_params *params, const bake_settings *settings, const octet pwd[], size_t pwd_len)
Инициализация протокола BPACE.
err_t bakeBPACEStep2 (octet out[], void *state)
Шаг 2 протокола BPACE.
err_t bakeBPACEStep3 (octet out[], const octet in[], void *state)
Шаг 3 протокола BPACE.
err_t bakeBPACEStep4 (octet out[], const octet in[], void *state)
Шаг 4 протокола BPACE.
err_t bakeBPACEStep5 (octet out[], const octet in[], void *state)
Шаг 5 протокола BPACE.
err_t bakeBPACEStep6 (const octet in[8], void *state)
Шаг 6 протокола BPACE.
err_t bakeBPACEStepG (octet key[32], void *state)
Извлечение ключа протокола BPACE.
err_t bakeBPACERunB (octet key[32], const bign_params *params, const bake_settings *settings, const octet pwd[], size_t pwd_len, read_i read, write_i write, void *file)
Выполнение BPACE стороной B.
err_t bakeBPACERunA (octet key[32], const bign_params *params, const bake_settings *settings, const octet pwd[], size_t pwd_len, read_i read, write_i write, void *file)
Выполнение BPACE стороной A.

Подробное описание

СТБ 34.101.66 (bake): Общие положения

Реализованы протоколы и алгоритмы СТБ 34.101.66 (bake). При ссылках на протоколы, таблицы, другие объекты подразумеваются разделы СТБ 34.101.66-2014, в которых эти объекты определены.

Долговременные параметры bake повторяют долговременные параметры bign и задаются структурой типа bign_params, описанной в заголовочном файле bign.h. Стандартные долговременные параметры можно получить с помощью функции bignStdParams(), проверить --- с помощью функции bignValParams().

На личные и открытые ключи распространяются соглашения bign. Генерацию пары ключей можно выполнить с помощью функции bignGenKeypair(), проверку открытого ключа --- с помощью функции bignValPubkey(), построение открытого ключа по личному --- с помощью bignCalcPubkey().

Настройки протоколов описываются структурой типа bake_settings. В этих настройках задаются:

В зависимости от флагов kca, kcb в протоколах BMQV, BPACE могут меняться число пересылок и длины фрагментов.

Каждый из протоколов реализован набором низкоуровневых функций, которые используют общее состояние и работают по схеме Start, Step2, Step3,.... Номера шагов указываются в соответствии со стандартом bake. В функцию Start передаются приветственные сообщения и поэтому шаг 1 стандарта, на котором происходит их пересылка, опускается.

Память для состояния готовится вызывающей программой. Длина состояния задается функцией с суффиксом keep. Состояние включает указатели на внутренние фрагменты памяти, и поэтому его нельзя копировать как обычный блок памяти.

В описаниях низкоуровневых функций StepX фигурируют данные, которые задаются в инициализирующей функции Start:

Для каждого протокола имеются две высокоуровневые функции с суффиксами RunA и RunB. В этих функциях реализовано полное выполнение протокола от лица стороны A или B. В функции передается реализация канала передачи сообщений между сторонами.

Ожидается [ERR_BAD_INPUT]

Все входные указатели, за исключением оговоренных случаев, корректны.

Ожидается

При пошаговом выполнении протокола данные, переданные при инициализации через указатели, остаются корректными и постоянными на протяжении всего выполнения протокола.

Регулярность

todo

Сертификаты

В протоколах BMQV, BSTS используются сертификаты. Сертификат распространяется в виде структуры типа bake_cert. В этой структуре кроме собственно сертификата указывается функция его проверки.

Прим.

Функции проверки своего и чужого сертификатов у сторон протоколов могут быть разными.

Протокол BMQV

Протокол BSTS

Протокол BPACE

Макросы

#define bakeDH   bignDH

Задается ссылка на функцию bignDH(), которая реализует базовый протокол Диффи -- Хеллмана.

Прим.

Базовый протокол Диффи -- Хеллмана описан в приложении А.

Типы

typedef err_t(* bake_certval_i) (octet pubkey[], const bign_params *params, const octet *data, size_t len)

Проверяется, что сертификат cert корректен и соответствует долговременным параметрам params. Если pubkey != 0, то из сертификата извлекается открытый ключ [l / 2]pubkey.

Ожидается

Параметры params корректны.

Возвращает

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

Прим.

В функции интерфейса bake_certval_i можно не проверять, что pubkey лежит на кривой, заданной params. Данная проверка обязательно проводится при выполнении каждого из протоколов.

Аргументы

pubkey открытый ключ  
params долговременные параметры  
data данные сертификата  
len длина data в октетах

Функции

size_t bakeBMQV_keep (size_t l)

Возвращается длина состояния (в октетах) функций протокола BMQV.

Возвращает

Длина состояния.

Аргументы

l уровень стойкости

err_t bakeBMQVRunA (octet key[32], const bign_params * params, const bake_settings * settings, const octet privkeya[], const bake_cert * certa, const bake_cert * certb, read_i read, write_i write, void * file)

Протокол BMQV с параметрами params и настройками settings выполняется от лица стороны A по каналу file с функциями чтения read и записи write. Сторона A использует личный ключ [l / 4]privkeya, соответствующий сертификат certa и сертификат certb стороны B. В результате выполнения протокола определяется общий ключ key.

Ожидается

Повторяются условия функции bakeBMQVStart() (при замене privkeya на privkey и certa на сеrt).

Возвращает

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

Аргументы

key общий ключ  
params долговременные параметры  
settings настройки  
privkeya личный ключ  
certa сертификат стороны A  
certb сертификат стороны B  
read функция чтения  
write функция записи  
file канал связи

err_t bakeBMQVRunB (octet key[32], const bign_params * params, const bake_settings * settings, const octet privkeyb[], const bake_cert * certb, const bake_cert * certa, read_i read, write_i write, void * file)

Протокол BMQV с параметрами params и настройками settings выполняется от лица стороны B по каналу file с функциями чтения read и записи write. Сторона B использует личный ключ [l / 4]privkeyb, соответствующий сертификат certb и сертификат certa стороны A. В результате выполнения протокола определяется общий ключ key.

Ожидается

Повторяются условия функции bakeBMQVStart() (при замене privkeyb на privkey и certb на сеrt).

Возвращает

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

Аргументы

key общий ключ  
params долговременные параметры  
settings настройки  
privkeyb личный ключ стороны B  
certb сертификат стороны B  
certa сертификат стороны A  
read функция чтения  
write функция записи  
file канал связи

err_t bakeBMQVStart (void * state, const bign_params * params, const bake_settings * settings, const octet privkey[], const bake_cert * cert)

По параметрам params, настройкам settings, личному ключу [l / 4]privkey и сертификату cert соответствующего открытого ключа в state формируются структуры данных, необходимые для выполнения протокола BMQV.

Предусловие

По адресу state зарезервировано bakeBMQV_keep() октетов.

Ожидается [ERR_BAD_PARAMS]

Параметры params корректны.

Ожидается [ERR_BAD_INPUT]

Указатель settings->helloa нулевой, либо буфер [settings->helloa_len]settings->helloa корректен. Аналогичное требование касается полей settings->hellob, settings->hellob_len.

Ожидается [ERR_BAD_RNG]

Генератор settings->rng (с состоянием settings->rng_state) корректен.

Ожидается

Генератор settings->rng является криптографически стойким.

Ожидается [ERR_BAD_CERT]

Сертификат cert корректен.

Ожидается

Ключ privkey и сертификат cert согласованы. Если согласование нарушено, то протокол будет завершен с ошибкой.

Возвращает

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

Аргументы

state состояние  
params долговременные параметры  
settings настройки  
privkey личный ключ  
cert сертификат

err_t bakeBMQVStep2 (octet out[], void * state)

Выполняется шаг 2 протокола BMQV с состоянием state. Сторона B формирует сообщение M1 = [l / 2]out.

Ожидается

bakeBMQVStart() < bakeBMQVStep2().

Возвращает

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

Прим.

Приветственное сообщение и сертификат стороны B в M1 не передаются.

Аргументы

out выходное сообщение M1  
state состояние

err_t bakeBMQVStep3 (octet out[], const octet in[], const bake_cert * certb, void * state)

Выполняется шаг 3 протокола BMQV с состоянием state. Сторона A обрабатывает сообщение M1 = [l / 2]in и формирует сообщение M2 = [l / 2 + (kca ? 8 : 0)]out. Используется сертификат certb стороны B.

Ожидается

bakeBMQVStart() < bakeBMQVStep3().

Ожидается

bakeBMQVStep2() << bakeBMQVStep3().

Возвращает

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

Прим.

Cертификат стороны A в M2 не передается.

Аргументы

out выходное сообщение M2  
in входное сообщение M1  
certb сертификат стороны B  
state состояние

err_t bakeBMQVStep4 (octet out[], const octet in[], const bake_cert * certa, void * state)

Выполняется шаг 4 протокола BMQV с состоянием state. Сторона B обрабатывает сообщение M2 = [l / 2 + (kca ? 8 : 0)]in и формирует сообщение M3 = [kcb ? 8 : 0]out. Используется сертификат certa стороны A.

Ожидается

bakeBMQVStep2() < bakeBMQVStep4().

Ожидается

bakeBMQVStep3() << bakeBMQVStep4().

Возвращает

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

Аргументы

out выходное сообщение M3  
in входное сообщение M2  
certa сертификат стороны A  
state состояние

err_t bakeBMQVStep5 (const octet in[8], void * state)

Выполняется шаг 5 протокола BMQV с состоянием state. Сторона A обрабатывает сообщение M3 = [8]in. Шаг выполняется только тогда, когда B подтверждает ключ (kcb == 0).

Ожидается

bakeBMQVStep5() < bakeBMQVStep3().

Ожидается

bakeBMQVStep4() << bakeBMQVStep5().

Возвращает

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

Аргументы

in входное сообщение M3  
state состояние

err_t bakeBMQVStepG (octet key[32], void * state)

Определяется общий секретный ключ key, полученный с помощью протокола BMQV с состоянием state.

Ожидается

bakeBMQVStep4() < bakeBMQVStepG().

Ожидается

Если сторона B не подтверждает ключ, то bakeBMQVStep3() < bakeBMQVStepG(). Если подтверждает, то bakeBMQVStep5() < bakeBMQVStepG().

Возвращает

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

Аргументы

key общий ключ  
state состояние

size_t bakeBPACE_keep (size_t l)

Возвращается длина состояния (в октетах) функций протокола BPACE.

Возвращает

Длина состояния.

Аргументы

l уровень стойкости

err_t bakeBPACERunA (octet key[32], const bign_params * params, const bake_settings * settings, const octet pwd[], size_t pwd_len, read_i read, write_i write, void * file)

Протокол BPACE с параметрами params и настройками settings выполняется от лица стороны A по каналу file с функциями чтения read и записи write. Сторона A использует пароль [pwd_len]pwd. В результате выполнения протокола определяется общий ключ key.

Ожидается

Повторяются условия функции bakeBPACEStart().

Возвращает

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

Аргументы

key общий ключ  
params долговременные параметры  
settings настройки  
pwd пароль  
pwd_len длина пароля  
read функция чтения  
write функция записи  
file канал связи

err_t bakeBPACERunB (octet key[32], const bign_params * params, const bake_settings * settings, const octet pwd[], size_t pwd_len, read_i read, write_i write, void * file)

Протокол BPACE с параметрами params и настройками settings выполняется от лица стороны B по каналу file с функциями чтения read и записи write. Сторона B использует пароль [pwd_len]pwd. В результате выполнения протокола определяется общий ключ key.

Ожидается

Повторяются условия функции bakeBPACEStart().

Возвращает

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

Аргументы

key общий ключ  
params долговременные параметры  
settings настройки  
pwd пароль  
pwd_len длина пароля  
read функция чтения  
write функция записи  
file канал связи

err_t bakeBPACEStart (void * state, const bign_params * params, const bake_settings * settings, const octet pwd[], size_t pwd_len)

По параметрам params, настройкам settings и паролю [pwd_len]pwd в state формируются структуры данных, необходимые для выполнения протокола BPACE.

Предусловие

По адресу state зарезервировано bakeBPACE_keep() октетов.

Ожидается [ERR_BAD_PARAMS]

Параметры params корректны.

Ожидается [ERR_BAD_INPUT]

Указатель settings->helloa нулевой, либо буфер [settings->helloa_len]settings->helloa корректен. Аналогичное требование касается полей settings->hellob, settings->hellob_len.

Ожидается [ERR_BAD_RNG]

Генератор settings->rng (с состоянием settings->rng_state) корректен.

Ожидается

Генератор settings->rng является криптографически стойким.

Возвращает

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

Аргументы

state состояние  
params долговременные параметры  
settings настройки  
pwd пароль  
pwd_len длина пароля

err_t bakeBPACEStep2 (octet out[], void * state)

Выполняется шаг 2 протокола BPACE с состоянием state. Сторона B формирует сообщение M1 = [l / 8]out.

Ожидается

bakeBPACEStart() < bakeBPACEStep2().

Возвращает

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

Прим.

Приветственное сообщение стороны B в M1 не передается.

Аргументы

out выходное сообщение M1  
state состояние

err_t bakeBPACEStep3 (octet out[], const octet in[], void * state)

Выполняется шаг 3 протокола BPACE с состоянием state. Сторона A обрабатывает сообщение M1 = [l / 8]in и формирует сообщение M2 = [5 * l / 8]out.

Ожидается

bakeBPACEStart() < bakeBPACEStep3().

Ожидается

bakeBPACEStep2() << bakeBPACEStep3().

Возвращает

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

Аргументы

out выходное сообщение M2  
in входное сообщение M1  
state состояние

err_t bakeBPACEStep4 (octet out[], const octet in[], void * state)

Выполняется шаг 4 протокола BPACE с состоянием state. Сторона B обрабатывает сообщение M2 = [5 * l / 8]in и формирует сообщение M3 = [4 * l / 8 + (kcb ? 8 : 0)]out.

Ожидается

bakeBPACEStep2() < bakeBPACEStep4().

Ожидается

bakeBPACEStep3() << bakeBPACEStep4().

Возвращает

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

Аргументы

out выходное сообщение M3  
in входное сообщение M2  
state состояние

err_t bakeBPACEStep5 (octet out[], const octet in[], void * state)

Выполняется шаг 5 протокола BPACE с состоянием state. Сторона A обрабатывает сообщение M3 = [4 * l / 8 + (kcb ? 8 : 0)]in и формирует сообщение M4 = [kca ? 8 : 0]out.

Ожидается

bakeBPACEStep3() < bakeBPACEStep5().

Ожидается

bakeBPACEStep4() << bakeBPACEStep5().

Возвращает

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

Аргументы

out выходное сообщение M4  
in входное сообщение M3  
state состояние

err_t bakeBPACEStep6 (const octet in[8], void * state)

Выполняется шаг 6 протокола BPACE с состоянием state. Сторона B обрабатывает сообщение M4 = [8]in. Шаг выполняется только тогда, когда A подтверждает ключ (kca == 0).

Ожидается

bakeBPACEStep4() < bakeBPACEStep6().

Ожидается

bakeBPACEStep5() << bakeBPACEStep6().

Возвращает

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

Аргументы

in входное сообщение M4  
state состояние

err_t bakeBPACEStepG (octet key[32], void * state)

Определяется общий секретный ключ key, полученный с помощью протокола BPACE с состоянием state.

Ожидается

bakeBPACEStep5() < bakeBPACEStepG().

Ожидается

Если сторона A не подтверждает ключ, то bakeBPACEStep4() < bakeBPACEStepG(). Если подтверждает, то bakeBPACEStep6() < bakeBPACEStepG().

Возвращает

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

Аргументы

key общий ключ  
state состояние

size_t bakeBSTS_keep (size_t l)

Возвращается длина состояния (в октетах) функций протокола BSTS.

Возвращает

Длина состояния.

Аргументы

l уровень стойкости

err_t bakeBSTSRunA (octet key[32], const bign_params * params, const bake_settings * settings, const octet privkeya[], const bake_cert * certa, bake_certval_i valb, read_i read, write_i write, void * file)

Протокол BSTS с параметрами params и настройками settings выполняется от лица стороны A по каналу file с функциями чтения read и записи write. Сторона A использует личный ключ [l / 4]privkeya, соответствующий сертификат certa и функцию valb проверки сертификата стороны B. В результате выполнения протокола определяется общий ключ key.

Ожидается

Повторяются условия функции bakeBSTSStart() (при замене privkeya на privkey и certa на сеrt).

Возвращает

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

Аргументы

key общий ключ  
params долговременные параметры  
settings настройки  
privkeya личный ключ стороны A  
certa сертификат стороны A  
valb функция проверки сертификата B  
read функция чтения  
write функция записи  
file канал связи

err_t bakeBSTSRunB (octet key[32], const bign_params * params, const bake_settings * settings, const octet privkeyb[], const bake_cert * certb, bake_certval_i vala, read_i read, write_i write, void * file)

Протокол BSTS с параметрами params и настройками settings выполняется от лица стороны B по каналу file с функциями чтения read и записи write. Сторона B использует личный ключ [l / 4]privkeyb, соответствующий сертификат certb и функцию vala проверки сертификата стороны A. В результате выполнения протокола определяется общий ключ key.

Ожидается

Повторяются условия функции bakeBSTSStart() (при замене privkeyb на privkey и certb на сеrt).

Возвращает

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

Аргументы

key общий ключ  
params долговременные параметры  
settings настройки  
privkeyb личный ключ стороны B  
certb сертификат стороны B  
vala функция проверки сертификата A  
read функция чтения  
write функция записи  
file канал связи

err_t bakeBSTSStart (void * state, const bign_params * params, const bake_settings * settings, const octet privkey[], const bake_cert * cert)

По параметрам params, настройкам settings, личному ключу [l / 4]privkey и сертификату cert соответствующего открытого ключа в state формируются структуры данных, необходимые для выполнения протокола BSTS.

Предусловие

По адресу state зарезервировано bakeBSTS_keep() октетов.

Ожидается [ERR_BAD_PARAMS]

Параметры params корректны.

Ожидается [ERR_BAD_INPUT]

settings->kca == TRUE && settings->kcb == TRUE.

Ожидается [ERR_BAD_INPUT]

Указатель settings->helloa нулевой, либо буфер [settings->helloa_len]settings->helloa корректен. Аналогичное требование касается полей settings->hellob, settings->hellob_len.

Ожидается [ERR_BAD_RNG]

Генератор settings->rng (с состоянием settings->rng_state) корректен.

Ожидается

Генератор settings->rng является криптографически стойким.

Ожидается [ERR_BAD_CERT]

Сертификат cert корректен.

Ожидается

Ключ privkey и сертификат cert согласованы. Если согласование нарушено, то протокол будет завершен с ошибкой.

Возвращает

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

Аргументы

state состояние  
params долговременные параметры  
settings настройки  
privkey личный ключ  
cert сертификат

err_t bakeBSTSStep2 (octet out[], void * state)

Выполняется шаг 2 протокола BSTS с состоянием state. Сторона B формирует сообщение M1 = [l / 2]out.

Ожидается

bakeBSTSStart() < bakeBSTSStep2().

Возвращает

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

Прим.

Приветственное сообщение стороны B в M1 не передаются.

Аргументы

out выходное сообщение M1  
state состояние

err_t bakeBSTSStep3 (octet out[], const octet in[], void * state)

Выполняется шаг 3 протокола BSTS с состоянием state. Сторона A обрабатывает сообщение M1 = [l / 2]in и формирует сообщение M2 = [3 * l / 4 + cert->len + 8]out.

Ожидается

bakeBSTSStart() < bakeBSTSStep3().

Ожидается

bakeBSTSStep2() << bakeBSTSStep3().

Возвращает

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

Аргументы

out выходное сообщение M2  
in входное сообщение M1  
state состояние

err_t bakeBSTSStep4 (octet out[], const octet in[], size_t in_len, bake_certval_i vala, void * state)

Выполняется шаг 4 протокола BSTS с состоянием state. Сторона B обрабатывает сообщение M2 = [in_len]in и формирует сообщение M3 = [l / 4 + cert->len + 8]out. Сторона B проверяет присланный в M2 сертификат стороны A с помощью функции vala.

Ожидается

bakeBSTSStep2() < bakeBSTSStep4().

Ожидается

bakeBSTSStep3() << bakeBSTSStep4().

Возвращает

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

Аргументы

out выходное сообщение M3  
in входное сообщение M2  
in_len длина in  
vala функция проверки сертификата стороны A  
state состояние

err_t bakeBSTSStep5 (const octet in[], size_t in_len, bake_certval_i valb, void * state)

Выполняется шаг 5 протокола BSTS с состоянием state. Сторона A обрабатывает сообщение M3 = [in_len]in. Сторона A проверяет присланный в M3 сертификат стороны B с помощью функции valb.

Ожидается

bakeBSTSStep5() < bakeBSTSStep3().

Ожидается

bakeBSTSStep4() << bakeBSTSStep5().

Возвращает

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

Аргументы

in входное сообщение M3  
in_len длина in  
valb функция проверки сертификата стороны B  
state состояние

err_t bakeBSTSStepG (octet key[32], void * state)

Определяется общий секретный ключ key, полученный с помощью протокола BSTS с состоянием state.

Ожидается

bakeBSTSStep4() < bakeBSTSStepG().

Ожидается

Если сторона B не подтверждает ключ, то bakeBSTSStep3() < bakeBSTSStepG(). Если подтверждает, то bakeBSTSStep5() < bakeBSTSStepG().

Возвращает

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

Аргументы

key общий ключ  
state состояние

err_t bakeKDF (octet key[32], const octet secret[], size_t secret_len, const octet iv[], size_t iv_len, size_t num)

По секретному слову [secret_len]secret, дополнительному слову [iv_len]iv и номеру num строится ключ key.

Возвращает

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

Прим.

Реализован алгоритм 6.1.3.

Аргументы

key ключ  
secret секретное слово  
secret_len длина secret  
iv дополнительное слово  
iv_len длина iv  
num номер ключа

err_t bakeSWU (octet pt[], const bign_params * params, const octet msg[])

При долговременных параметрах params по сообщению [l / 4]msg строится точка [l / 2]pt эллиптической кривой, описываемой params.

Ожидается [ERR_BAD_PARAMS]

Параметры params корректны.

Возвращает

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

Прим.

Реализован алгоритм 6.2.3.

Аргументы

pt точка  
params долговременные параметры  
msg сообщение

Автор

Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.

Info

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