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. Стандартные долговременные параметры можно получить с помощью функции bignParamsStd(), проверить --- с помощью функции bignValParams().
На личные и открытые ключи распространяются соглашения bign. Генерацию пары ключей можно выполнить с помощью функции bignKeypairGen(), проверку открытого ключа --- с помощью функции bignPubkeyVal(), построение открытого ключа по личному --- с помощью bignPubkeyCalc().
Настройки протоколов описываются структурой типа bake_settings. В этих настройках задаются:
- признак kca подтверждения ключа стороной A;
- признак kcb подтверждения ключа стороной B;
- приветственное сообщение [helloa_len]helloa стороны A;
- приветственное сообщение [hellob_len]hellob стороны B;
- генератор случайных чисел rng и его состояние rng_state.
В зависимости от флагов kca, kcb в протоколах BMQV, BPACE могут меняться число пересылок и длины фрагментов.
Каждый из протоколов реализован набором низкоуровневых функций, которые используют общее состояние и работают по схеме Start, Step2, Step3,.... Номера шагов указываются в соответствии со стандартом bake. В функцию Start передаются приветственные сообщения и поэтому шаг 1 стандарта, на котором происходит их пересылка, опускается.
Память для состояния готовится вызывающей программой. Длина состояния задается функцией с суффиксом keep. Состояние включает указатели на внутренние фрагменты памяти, и поэтому его нельзя копировать как обычный блок памяти.
В описаниях низкоуровневых функций StepX фигурируют данные, которые задаются в инициализирующей функции Start:
- уровень стойкости l из перечня долговременных параметров;
- флаги kca, kcb из перечня настроек;
- указатель cert на собственный сертификат стороны протокола.
Для каждого протокола имеются две высокоуровневые функции с суффиксами 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 [in,out] канал связи
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 [in,out] канал связи
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 [in,out] состояние
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 [in,out] состояние
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 [in,out] состояние
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 [in,out] состояние
err_t bakeBMQVStepG (octet key[32], void * state)
Определяется общий секретный ключ key, полученный с помощью протокола BMQV с состоянием state.
- Ожидается
bakeBMQVStep4() < bakeBMQVStepG().
Ожидается
Если сторона B не подтверждает ключ, то bakeBMQVStep3() < bakeBMQVStepG(). Если подтверждает, то bakeBMQVStep5() < bakeBMQVStepG().
- Возвращает
ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
- Аргументы
key общий ключ
state [in,out] состояние
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 [in,out] канал связи
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 [in,out] канал связи
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 [in,out] состояние
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 [in,out] состояние
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 [in,out] состояние
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 [in,out] состояние
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 [in,out] состояние
err_t bakeBPACEStepG (octet key[32], void * state)
Определяется общий секретный ключ key, полученный с помощью протокола BPACE с состоянием state.
- Ожидается
bakeBPACEStep5() < bakeBPACEStepG().
Ожидается
Если сторона A не подтверждает ключ, то bakeBPACEStep4() < bakeBPACEStepG(). Если подтверждает, то bakeBPACEStep6() < bakeBPACEStepG().
- Возвращает
ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
- Аргументы
key общий ключ
state [in,out] состояние
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 [in,out] канал связи
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 [in,out] канал связи
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 [in,out] состояние
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 [in,out] состояние
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 [in,out] состояние
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 [in,out] состояние
err_t bakeBSTSStepG (octet key[32], void * state)
Определяется общий секретный ключ key, полученный с помощью протокола BSTS с состоянием state.
- Ожидается
bakeBSTSStep4() < bakeBSTSStepG().
Ожидается
Если сторона B не подтверждает ключ, то bakeBSTSStep3() < bakeBSTSStepG(). Если подтверждает, то bakeBSTSStep5() < bakeBSTSStepG().
- Возвращает
ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
- Аргументы
key общий ключ
state [in,out] состояние
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 из исходного текста.