1bake.h(3)                  Library Functions Manual                  bake.h(3)
2
3
4

NAME

6       bake.h - Протоколы СТБ 34.101.66 (bake)
7
8

SYNOPSIS

10       #include 'bee2/defs.h'
11       #include 'bee2/crypto/bign.h'
12
13
14   Классы
15       struct bake_settings
16           Настройки bake.
17       struct bake_cert
18           Сертификат bake.
19
20   Макросы
21       #define bakeDH   bignDH
22           Построение общего ключа протокола Диффи -- Хеллмана
23
24   Определения типов
25       typedef err_t(* bake_certval_i) (octet pubkey[], const bign_params
26           *params, const octet *data, size_t len)
27           Проверка сертификата
28
29   Функции
30       err_t bakeKDF (octet key[32], const octet secret[], size_t secret_len,
31           const octet iv[], size_t iv_len, size_t num)
32           Построение ключа
33       err_t bakeSWU (octet pt[], const bign_params *params, const octet
34           msg[])
35           Построение точки эллиптической кривой
36       size_t bakeBMQV_keep (size_t l)
37           Длина состояния функций BMQV.
38       err_t bakeBMQVStart (void *state, const bign_params *params, const
39           bake_settings *settings, const octet privkey[], const bake_cert
40           *cert)
41           Инициализация протокола BMQV.
42       err_t bakeBMQVStep2 (octet out[], void *state)
43           Шаг 2 протокола BMQV.
44       err_t bakeBMQVStep3 (octet out[], const octet in[], const bake_cert
45           *certb, void *state)
46           Шаг 3 протокола BMQV.
47       err_t bakeBMQVStep4 (octet out[], const octet in[], const bake_cert
48           *certa, void *state)
49           Шаг 4 протокола BMQV.
50       err_t bakeBMQVStep5 (const octet in[8], void *state)
51           Шаг 5 протокола BMQV.
52       err_t bakeBMQVStepG (octet key[32], void *state)
53           Извлечение ключа протокола BMQV.
54       err_t bakeBMQVRunB (octet key[32], const bign_params *params, const
55           bake_settings *settings, const octet privkeyb[], const bake_cert
56           *certb, const bake_cert *certa, read_i read, write_i write, void
57           *file)
58           Выполнение BMQV стороной B.
59       err_t bakeBMQVRunA (octet key[32], const bign_params *params, const
60           bake_settings *settings, const octet privkeya[], const bake_cert
61           *certa, const bake_cert *certb, read_i read, write_i write, void
62           *file)
63           Выполнение BMQV стороной A.
64       size_t bakeBSTS_keep (size_t l)
65           Длина состояния функций BSTS.
66       err_t bakeBSTSStart (void *state, const bign_params *params, const
67           bake_settings *settings, const octet privkey[], const bake_cert
68           *cert)
69           Инициализация протокола BSTS.
70       err_t bakeBSTSStep2 (octet out[], void *state)
71           Шаг 2 протокола BSTS.
72       err_t bakeBSTSStep3 (octet out[], const octet in[], void *state)
73           Шаг 3 протокола BSTS.
74       err_t bakeBSTSStep4 (octet out[], const octet in[], size_t in_len,
75           bake_certval_i vala, void *state)
76           Шаг 4 протокола BSTS.
77       err_t bakeBSTSStep5 (const octet in[], size_t in_len, bake_certval_i
78           valb, void *state)
79           Шаг 5 протокола BSTS.
80       err_t bakeBSTSStepG (octet key[32], void *state)
81           Извлечение ключа протокола BSTS.
82       err_t bakeBSTSRunB (octet key[32], const bign_params *params, const
83           bake_settings *settings, const octet privkeyb[], const bake_cert
84           *certb, bake_certval_i vala, read_i read, write_i write, void
85           *file)
86           Выполнение BSTS стороной B.
87       err_t bakeBSTSRunA (octet key[32], const bign_params *params, const
88           bake_settings *settings, const octet privkeya[], const bake_cert
89           *certa, bake_certval_i valb, read_i read, write_i write, void
90           *file)
91           Выполнение BSTS стороной A.
92       size_t bakeBPACE_keep (size_t l)
93           Длина состояния функций BPACE.
94       err_t bakeBPACEStart (void *state, const bign_params *params, const
95           bake_settings *settings, const octet pwd[], size_t pwd_len)
96           Инициализация протокола BPACE.
97       err_t bakeBPACEStep2 (octet out[], void *state)
98           Шаг 2 протокола BPACE.
99       err_t bakeBPACEStep3 (octet out[], const octet in[], void *state)
100           Шаг 3 протокола BPACE.
101       err_t bakeBPACEStep4 (octet out[], const octet in[], void *state)
102           Шаг 4 протокола BPACE.
103       err_t bakeBPACEStep5 (octet out[], const octet in[], void *state)
104           Шаг 5 протокола BPACE.
105       err_t bakeBPACEStep6 (const octet in[8], void *state)
106           Шаг 6 протокола BPACE.
107       err_t bakeBPACEStepG (octet key[32], void *state)
108           Извлечение ключа протокола BPACE.
109       err_t bakeBPACERunB (octet key[32], const bign_params *params, const
110           bake_settings *settings, const octet pwd[], size_t pwd_len, read_i
111           read, write_i write, void *file)
112           Выполнение BPACE стороной B.
113       err_t bakeBPACERunA (octet key[32], const bign_params *params, const
114           bake_settings *settings, const octet pwd[], size_t pwd_len, read_i
115           read, write_i write, void *file)
116           Выполнение BPACE стороной A.
117

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

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

120       Реализованы протоколы и алгоритмы СТБ 34.101.66 (bake). При ссылках на
121       протоколы, таблицы, другие объекты подразумеваются разделы СТБ
122       34.101.66-2014, в которых эти объекты определены.
123
124       Долговременные параметры bake повторяют долговременные параметры bign и
125       задаются структурой типа bign_params, описанной в заголовочном файле
126       bign.h. Стандартные долговременные параметры можно получить с помощью
127       функции bignStdParams(), проверить --- с помощью функции
128       bignValParams().
129
130       На личные и открытые ключи распространяются соглашения bign. Генерацию
131       пары ключей можно выполнить с помощью функции bignGenKeypair(),
132       проверку открытого ключа --- с помощью функции bignValPubkey(),
133       построение открытого ключа по личному --- с помощью bignCalcPubkey().
134
135       Настройки протоколов описываются структурой типа bake_settings. В этих
136       настройках задаются:
137
138       • признак kca подтверждения ключа стороной A;
139
140       • признак kcb подтверждения ключа стороной B;
141
142       • приветственное сообщение [helloa_len]helloa стороны A;
143
144       • приветственное сообщение [hellob_len]hellob стороны B;
145
146       • генератор случайных чисел rng и его состояние rng_state.
147
148       В зависимости от флагов kca, kcb в протоколах BMQV, BPACE могут
149       меняться число пересылок и длины фрагментов.
150
151       Каждый из протоколов реализован набором низкоуровневых функций, которые
152       используют общее состояние и работают по схеме Start, Step2, Step3,....
153       Номера шагов указываются в соответствии со стандартом bake. В функцию
154       Start передаются приветственные сообщения и поэтому шаг 1 стандарта, на
155       котором происходит их пересылка, опускается.
156
157       Память для состояния готовится вызывающей программой. Длина состояния
158       задается функцией с суффиксом keep. Состояние включает указатели на
159       внутренние фрагменты памяти, и поэтому его нельзя копировать как
160       обычный блок памяти.
161
162       В описаниях низкоуровневых функций StepX фигурируют данные, которые
163       задаются в инициализирующей функции Start:
164
165       • уровень стойкости l из перечня долговременных параметров;
166
167       • флаги kca, kcb из перечня настроек;
168
169       • указатель cert на собственный сертификат стороны протокола.
170
171       Для каждого протокола имеются две высокоуровневые функции с суффиксами
172       RunA и RunB. В этих функциях реализовано полное выполнение протокола от
173       лица стороны A или B. В функции передается реализация канала передачи
174       сообщений между сторонами.
175
176       Ожидается [ERR_BAD_INPUT]
177           Все входные указатели, за исключением оговоренных случаев,
178           корректны.
179
180       Ожидается
181           При пошаговом выполнении протокола данные, переданные при
182           инициализации через указатели, остаются корректными и постоянными
183           на протяжении всего выполнения протокола.
184
185       Регулярность
186           todo
187

Сертификаты

189       В протоколах BMQV, BSTS используются сертификаты. Сертификат
190       распространяется в виде структуры типа bake_cert. В этой структуре
191       кроме собственно сертификата указывается функция его проверки.
192
193       Прим.
194           Функции проверки своего и чужого сертификатов у сторон протоколов
195           могут быть разными.
196

Протокол BMQV

Протокол BSTS

Протокол BPACE

Макросы

201   #define bakeDH   bignDH
202       Задается ссылка на функцию bignDH(), которая реализует базовый протокол
203       Диффи -- Хеллмана.
204
205       Прим.
206           Базовый протокол Диффи -- Хеллмана описан в приложении А.
207

Типы

209   typedef err_t(* bake_certval_i) (octet pubkey[], const bign_params *params,
210       const octet *data, size_t len)
211       Проверяется, что сертификат cert корректен и соответствует
212       долговременным параметрам params. Если pubkey != 0, то из сертификата
213       извлекается открытый ключ [l / 2]pubkey.
214
215       Ожидается
216           Параметры params корректны.
217
218       Возвращает
219           ERR_OK, если сертификат корректен, и код ошибки в противном случае.
220
221       Прим.
222           В функции интерфейса bake_certval_i можно не проверять, что pubkey
223           лежит на кривой, заданной params. Данная проверка обязательно
224           проводится при выполнении каждого из протоколов.
225
226       Аргументы
227           pubkey открытый ключ
228           params долговременные параметры
229           data данные сертификата
230           len длина data в октетах
231

Функции

233   size_t bakeBMQV_keep (size_t l)
234       Возвращается длина состояния (в октетах) функций протокола BMQV.
235
236       Возвращает
237           Длина состояния.
238
239       Аргументы
240           l уровень стойкости
241
242   err_t bakeBMQVRunA (octet key[32], const bign_params * params, const
243       bake_settings * settings, const octet privkeya[], const bake_cert *
244       certa, const bake_cert * certb, read_i read, write_i write, void *
245       file)
246       Протокол BMQV с параметрами params и настройками settings выполняется
247       от лица стороны A по каналу file с функциями чтения read и записи
248       write. Сторона A использует личный ключ [l / 4]privkeya,
249       соответствующий сертификат certa и сертификат certb стороны B. В
250       результате выполнения протокола определяется общий ключ key.
251
252       Ожидается
253           Повторяются условия функции bakeBMQVStart() (при замене privkeya на
254           privkey и certa на сеrt).
255
256       Возвращает
257           ERR_OK, если протокол успешно выполнен, и код ошибки в противном
258           случае.
259
260       Аргументы
261           key общий ключ
262           params долговременные параметры
263           settings настройки
264           privkeya личный ключ
265           certa сертификат стороны A
266           certb сертификат стороны B
267           read функция чтения
268           write функция записи
269           file канал связи
270
271   err_t bakeBMQVRunB (octet key[32], const bign_params * params, const
272       bake_settings * settings, const octet privkeyb[], const bake_cert *
273       certb, const bake_cert * certa, read_i read, write_i write, void *
274       file)
275       Протокол BMQV с параметрами params и настройками settings выполняется
276       от лица стороны B по каналу file с функциями чтения read и записи
277       write. Сторона B использует личный ключ [l / 4]privkeyb,
278       соответствующий сертификат certb и сертификат certa стороны A. В
279       результате выполнения протокола определяется общий ключ key.
280
281       Ожидается
282           Повторяются условия функции bakeBMQVStart() (при замене privkeyb на
283           privkey и certb на сеrt).
284
285       Возвращает
286           ERR_OK, если протокол успешно выполнен, и код ошибки в противном
287           случае.
288
289       Аргументы
290           key общий ключ
291           params долговременные параметры
292           settings настройки
293           privkeyb личный ключ стороны B
294           certb сертификат стороны B
295           certa сертификат стороны A
296           read функция чтения
297           write функция записи
298           file канал связи
299
300   err_t bakeBMQVStart (void * state, const bign_params * params, const
301       bake_settings * settings, const octet privkey[], const bake_cert *
302       cert)
303       По параметрам params, настройкам settings, личному ключу [l / 4]privkey
304       и сертификату cert соответствующего открытого ключа в state формируются
305       структуры данных, необходимые для выполнения протокола BMQV.
306
307       Предусловие
308           По адресу state зарезервировано bakeBMQV_keep() октетов.
309
310       Ожидается [ERR_BAD_PARAMS]
311           Параметры params корректны.
312
313       Ожидается [ERR_BAD_INPUT]
314           Указатель settings->helloa нулевой, либо буфер
315           [settings->helloa_len]settings->helloa корректен. Аналогичное
316           требование касается полей settings->hellob, settings->hellob_len.
317
318       Ожидается [ERR_BAD_RNG]
319           Генератор settings->rng (с состоянием settings->rng_state)
320           корректен.
321
322       Ожидается
323           Генератор settings->rng является криптографически стойким.
324
325       Ожидается [ERR_BAD_CERT]
326           Сертификат cert корректен.
327
328       Ожидается
329           Ключ privkey и сертификат cert согласованы. Если согласование
330           нарушено, то протокол будет завершен с ошибкой.
331
332       Возвращает
333           ERR_OK, если инициализация успешно выполнена, и код ошибки в
334           противном случае.
335
336       Аргументы
337           state состояние
338           params долговременные параметры
339           settings настройки
340           privkey личный ключ
341           cert сертификат
342
343   err_t bakeBMQVStep2 (octet out[], void * state)
344       Выполняется шаг 2 протокола BMQV с состоянием state. Сторона B
345       формирует сообщение M1 = [l / 2]out.
346
347       Ожидается
348           bakeBMQVStart() < bakeBMQVStep2().
349
350       Возвращает
351           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
352
353       Прим.
354           Приветственное сообщение и сертификат стороны B в M1 не передаются.
355
356       Аргументы
357           out выходное сообщение M1
358           state состояние
359
360   err_t bakeBMQVStep3 (octet out[], const octet in[], const bake_cert *
361       certb, void * state)
362       Выполняется шаг 3 протокола BMQV с состоянием state. Сторона A
363       обрабатывает сообщение M1 = [l / 2]in и формирует сообщение M2 = [l / 2
364       + (kca ? 8 : 0)]out. Используется сертификат certb стороны B.
365
366       Ожидается
367           bakeBMQVStart() < bakeBMQVStep3().
368
369       Ожидается
370           bakeBMQVStep2() << bakeBMQVStep3().
371
372       Возвращает
373           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
374
375       Прим.
376           Cертификат стороны A в M2 не передается.
377
378       Аргументы
379           out выходное сообщение M2
380           in входное сообщение M1
381           certb сертификат стороны B
382           state состояние
383
384   err_t bakeBMQVStep4 (octet out[], const octet in[], const bake_cert *
385       certa, void * state)
386       Выполняется шаг 4 протокола BMQV с состоянием state. Сторона B
387       обрабатывает сообщение M2 = [l / 2 + (kca ? 8 : 0)]in и формирует
388       сообщение M3 = [kcb ? 8 : 0]out. Используется сертификат certa стороны
389       A.
390
391       Ожидается
392           bakeBMQVStep2() < bakeBMQVStep4().
393
394       Ожидается
395           bakeBMQVStep3() << bakeBMQVStep4().
396
397       Возвращает
398           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
399
400       Аргументы
401           out выходное сообщение M3
402           in входное сообщение M2
403           certa сертификат стороны A
404           state состояние
405
406   err_t bakeBMQVStep5 (const octet in[8], void * state)
407       Выполняется шаг 5 протокола BMQV с состоянием state. Сторона A
408       обрабатывает сообщение M3 = [8]in. Шаг выполняется только тогда, когда
409       B подтверждает ключ (kcb == 0).
410
411       Ожидается
412           bakeBMQVStep5() < bakeBMQVStep3().
413
414       Ожидается
415           bakeBMQVStep4() << bakeBMQVStep5().
416
417       Возвращает
418           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
419
420       Аргументы
421           in входное сообщение M3
422           state состояние
423
424   err_t bakeBMQVStepG (octet key[32], void * state)
425       Определяется общий секретный ключ key, полученный с помощью протокола
426       BMQV с состоянием state.
427
428       Ожидается
429           bakeBMQVStep4() < bakeBMQVStepG().
430
431       Ожидается
432           Если сторона B не подтверждает ключ, то bakeBMQVStep3() <
433           bakeBMQVStepG(). Если подтверждает, то bakeBMQVStep5() <
434           bakeBMQVStepG().
435
436       Возвращает
437           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
438
439       Аргументы
440           key общий ключ
441           state состояние
442
443   size_t bakeBPACE_keep (size_t l)
444       Возвращается длина состояния (в октетах) функций протокола BPACE.
445
446       Возвращает
447           Длина состояния.
448
449       Аргументы
450           l уровень стойкости
451
452   err_t bakeBPACERunA (octet key[32], const bign_params * params, const
453       bake_settings * settings, const octet pwd[], size_t pwd_len, read_i
454       read, write_i write, void * file)
455       Протокол BPACE с параметрами params и настройками settings выполняется
456       от лица стороны A по каналу file с функциями чтения read и записи
457       write. Сторона A использует пароль [pwd_len]pwd. В результате
458       выполнения протокола определяется общий ключ key.
459
460       Ожидается
461           Повторяются условия функции bakeBPACEStart().
462
463       Возвращает
464           ERR_OK, если протокол успешно выполнен, и код ошибки в противном
465           случае.
466
467       Аргументы
468           key общий ключ
469           params долговременные параметры
470           settings настройки
471           pwd пароль
472           pwd_len длина пароля
473           read функция чтения
474           write функция записи
475           file канал связи
476
477   err_t bakeBPACERunB (octet key[32], const bign_params * params, const
478       bake_settings * settings, const octet pwd[], size_t pwd_len, read_i
479       read, write_i write, void * file)
480       Протокол BPACE с параметрами params и настройками settings выполняется
481       от лица стороны B по каналу file с функциями чтения read и записи
482       write. Сторона B использует пароль [pwd_len]pwd. В результате
483       выполнения протокола определяется общий ключ key.
484
485       Ожидается
486           Повторяются условия функции bakeBPACEStart().
487
488       Возвращает
489           ERR_OK, если протокол успешно выполнен, и код ошибки в противном
490           случае.
491
492       Аргументы
493           key общий ключ
494           params долговременные параметры
495           settings настройки
496           pwd пароль
497           pwd_len длина пароля
498           read функция чтения
499           write функция записи
500           file канал связи
501
502   err_t bakeBPACEStart (void * state, const bign_params * params, const
503       bake_settings * settings, const octet pwd[], size_t pwd_len)
504       По параметрам params, настройкам settings и паролю [pwd_len]pwd в state
505       формируются структуры данных, необходимые для выполнения протокола
506       BPACE.
507
508       Предусловие
509           По адресу state зарезервировано bakeBPACE_keep() октетов.
510
511       Ожидается [ERR_BAD_PARAMS]
512           Параметры params корректны.
513
514       Ожидается [ERR_BAD_INPUT]
515           Указатель settings->helloa нулевой, либо буфер
516           [settings->helloa_len]settings->helloa корректен. Аналогичное
517           требование касается полей settings->hellob, settings->hellob_len.
518
519       Ожидается [ERR_BAD_RNG]
520           Генератор settings->rng (с состоянием settings->rng_state)
521           корректен.
522
523       Ожидается
524           Генератор settings->rng является криптографически стойким.
525
526       Возвращает
527           ERR_OK, если инициализация успешно выполнена, и код ошибки в
528           противном случае.
529
530       Аргументы
531           state состояние
532           params долговременные параметры
533           settings настройки
534           pwd пароль
535           pwd_len длина пароля
536
537   err_t bakeBPACEStep2 (octet out[], void * state)
538       Выполняется шаг 2 протокола BPACE с состоянием state. Сторона B
539       формирует сообщение M1 = [l / 8]out.
540
541       Ожидается
542           bakeBPACEStart() < bakeBPACEStep2().
543
544       Возвращает
545           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
546
547       Прим.
548           Приветственное сообщение стороны B в M1 не передается.
549
550       Аргументы
551           out выходное сообщение M1
552           state состояние
553
554   err_t bakeBPACEStep3 (octet out[], const octet in[], void * state)
555       Выполняется шаг 3 протокола BPACE с состоянием state. Сторона A
556       обрабатывает сообщение M1 = [l / 8]in и формирует сообщение M2 = [5 * l
557       / 8]out.
558
559       Ожидается
560           bakeBPACEStart() < bakeBPACEStep3().
561
562       Ожидается
563           bakeBPACEStep2() << bakeBPACEStep3().
564
565       Возвращает
566           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
567
568       Аргументы
569           out выходное сообщение M2
570           in входное сообщение M1
571           state состояние
572
573   err_t bakeBPACEStep4 (octet out[], const octet in[], void * state)
574       Выполняется шаг 4 протокола BPACE с состоянием state. Сторона B
575       обрабатывает сообщение M2 = [5 * l / 8]in и формирует сообщение M3 = [4
576       * l / 8 + (kcb ? 8 : 0)]out.
577
578       Ожидается
579           bakeBPACEStep2() < bakeBPACEStep4().
580
581       Ожидается
582           bakeBPACEStep3() << bakeBPACEStep4().
583
584       Возвращает
585           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
586
587       Аргументы
588           out выходное сообщение M3
589           in входное сообщение M2
590           state состояние
591
592   err_t bakeBPACEStep5 (octet out[], const octet in[], void * state)
593       Выполняется шаг 5 протокола BPACE с состоянием state. Сторона A
594       обрабатывает сообщение M3 = [4 * l / 8 + (kcb ? 8 : 0)]in и формирует
595       сообщение M4 = [kca ? 8 : 0]out.
596
597       Ожидается
598           bakeBPACEStep3() < bakeBPACEStep5().
599
600       Ожидается
601           bakeBPACEStep4() << bakeBPACEStep5().
602
603       Возвращает
604           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
605
606       Аргументы
607           out выходное сообщение M4
608           in входное сообщение M3
609           state состояние
610
611   err_t bakeBPACEStep6 (const octet in[8], void * state)
612       Выполняется шаг 6 протокола BPACE с состоянием state. Сторона B
613       обрабатывает сообщение M4 = [8]in. Шаг выполняется только тогда, когда
614       A подтверждает ключ (kca == 0).
615
616       Ожидается
617           bakeBPACEStep4() < bakeBPACEStep6().
618
619       Ожидается
620           bakeBPACEStep5() << bakeBPACEStep6().
621
622       Возвращает
623           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
624
625       Аргументы
626           in входное сообщение M4
627           state состояние
628
629   err_t bakeBPACEStepG (octet key[32], void * state)
630       Определяется общий секретный ключ key, полученный с помощью протокола
631       BPACE с состоянием state.
632
633       Ожидается
634           bakeBPACEStep5() < bakeBPACEStepG().
635
636       Ожидается
637           Если сторона A не подтверждает ключ, то bakeBPACEStep4() <
638           bakeBPACEStepG(). Если подтверждает, то bakeBPACEStep6() <
639           bakeBPACEStepG().
640
641       Возвращает
642           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
643
644       Аргументы
645           key общий ключ
646           state состояние
647
648   size_t bakeBSTS_keep (size_t l)
649       Возвращается длина состояния (в октетах) функций протокола BSTS.
650
651       Возвращает
652           Длина состояния.
653
654       Аргументы
655           l уровень стойкости
656
657   err_t bakeBSTSRunA (octet key[32], const bign_params * params, const
658       bake_settings * settings, const octet privkeya[], const bake_cert *
659       certa, bake_certval_i valb, read_i read, write_i write, void * file)
660       Протокол BSTS с параметрами params и настройками settings выполняется
661       от лица стороны A по каналу file с функциями чтения read и записи
662       write. Сторона A использует личный ключ [l / 4]privkeya,
663       соответствующий сертификат certa и функцию valb проверки сертификата
664       стороны B. В результате выполнения протокола определяется общий ключ
665       key.
666
667       Ожидается
668           Повторяются условия функции bakeBSTSStart() (при замене privkeya на
669           privkey и certa на сеrt).
670
671       Возвращает
672           ERR_OK, если протокол успешно выполнен, и код ошибки в противном
673           случае.
674
675       Аргументы
676           key общий ключ
677           params долговременные параметры
678           settings настройки
679           privkeya личный ключ стороны A
680           certa сертификат стороны A
681           valb функция проверки сертификата B
682           read функция чтения
683           write функция записи
684           file канал связи
685
686   err_t bakeBSTSRunB (octet key[32], const bign_params * params, const
687       bake_settings * settings, const octet privkeyb[], const bake_cert *
688       certb, bake_certval_i vala, read_i read, write_i write, void * file)
689       Протокол BSTS с параметрами params и настройками settings выполняется
690       от лица стороны B по каналу file с функциями чтения read и записи
691       write. Сторона B использует личный ключ [l / 4]privkeyb,
692       соответствующий сертификат certb и функцию vala проверки сертификата
693       стороны A. В результате выполнения протокола определяется общий ключ
694       key.
695
696       Ожидается
697           Повторяются условия функции bakeBSTSStart() (при замене privkeyb на
698           privkey и certb на сеrt).
699
700       Возвращает
701           ERR_OK, если протокол успешно выполнен, и код ошибки в противном
702           случае.
703
704       Аргументы
705           key общий ключ
706           params долговременные параметры
707           settings настройки
708           privkeyb личный ключ стороны B
709           certb сертификат стороны B
710           vala функция проверки сертификата A
711           read функция чтения
712           write функция записи
713           file канал связи
714
715   err_t bakeBSTSStart (void * state, const bign_params * params, const
716       bake_settings * settings, const octet privkey[], const bake_cert *
717       cert)
718       По параметрам params, настройкам settings, личному ключу [l / 4]privkey
719       и сертификату cert соответствующего открытого ключа в state формируются
720       структуры данных, необходимые для выполнения протокола BSTS.
721
722       Предусловие
723           По адресу state зарезервировано bakeBSTS_keep() октетов.
724
725       Ожидается [ERR_BAD_PARAMS]
726           Параметры params корректны.
727
728       Ожидается [ERR_BAD_INPUT]
729           settings->kca == TRUE && settings->kcb == TRUE.
730
731       Ожидается [ERR_BAD_INPUT]
732           Указатель settings->helloa нулевой, либо буфер
733           [settings->helloa_len]settings->helloa корректен. Аналогичное
734           требование касается полей settings->hellob, settings->hellob_len.
735
736       Ожидается [ERR_BAD_RNG]
737           Генератор settings->rng (с состоянием settings->rng_state)
738           корректен.
739
740       Ожидается
741           Генератор settings->rng является криптографически стойким.
742
743       Ожидается [ERR_BAD_CERT]
744           Сертификат cert корректен.
745
746       Ожидается
747           Ключ privkey и сертификат cert согласованы. Если согласование
748           нарушено, то протокол будет завершен с ошибкой.
749
750       Возвращает
751           ERR_OK, если инициализация успешно выполнена, и код ошибки в
752           противном случае.
753
754       Аргументы
755           state состояние
756           params долговременные параметры
757           settings настройки
758           privkey личный ключ
759           cert сертификат
760
761   err_t bakeBSTSStep2 (octet out[], void * state)
762       Выполняется шаг 2 протокола BSTS с состоянием state. Сторона B
763       формирует сообщение M1 = [l / 2]out.
764
765       Ожидается
766           bakeBSTSStart() < bakeBSTSStep2().
767
768       Возвращает
769           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
770
771       Прим.
772           Приветственное сообщение стороны B в M1 не передаются.
773
774       Аргументы
775           out выходное сообщение M1
776           state состояние
777
778   err_t bakeBSTSStep3 (octet out[], const octet in[], void * state)
779       Выполняется шаг 3 протокола BSTS с состоянием state. Сторона A
780       обрабатывает сообщение M1 = [l / 2]in и формирует сообщение M2 = [3 * l
781       / 4 + cert->len + 8]out.
782
783       Ожидается
784           bakeBSTSStart() < bakeBSTSStep3().
785
786       Ожидается
787           bakeBSTSStep2() << bakeBSTSStep3().
788
789       Возвращает
790           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
791
792       Аргументы
793           out выходное сообщение M2
794           in входное сообщение M1
795           state состояние
796
797   err_t bakeBSTSStep4 (octet out[], const octet in[], size_t in_len,
798       bake_certval_i vala, void * state)
799       Выполняется шаг 4 протокола BSTS с состоянием state. Сторона B
800       обрабатывает сообщение M2 = [in_len]in и формирует сообщение M3 = [l /
801       4 + cert->len + 8]out. Сторона B проверяет присланный в M2 сертификат
802       стороны A с помощью функции vala.
803
804       Ожидается
805           bakeBSTSStep2() < bakeBSTSStep4().
806
807       Ожидается
808           bakeBSTSStep3() << bakeBSTSStep4().
809
810       Возвращает
811           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
812
813       Аргументы
814           out выходное сообщение M3
815           in входное сообщение M2
816           in_len длина in
817           vala функция проверки сертификата стороны A
818           state состояние
819
820   err_t bakeBSTSStep5 (const octet in[], size_t in_len, bake_certval_i valb,
821       void * state)
822       Выполняется шаг 5 протокола BSTS с состоянием state. Сторона A
823       обрабатывает сообщение M3 = [in_len]in. Сторона A проверяет присланный
824       в M3 сертификат стороны B с помощью функции valb.
825
826       Ожидается
827           bakeBSTSStep5() < bakeBSTSStep3().
828
829       Ожидается
830           bakeBSTSStep4() << bakeBSTSStep5().
831
832       Возвращает
833           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
834
835       Аргументы
836           in входное сообщение M3
837           in_len длина in
838           valb функция проверки сертификата стороны B
839           state состояние
840
841   err_t bakeBSTSStepG (octet key[32], void * state)
842       Определяется общий секретный ключ key, полученный с помощью протокола
843       BSTS с состоянием state.
844
845       Ожидается
846           bakeBSTSStep4() < bakeBSTSStepG().
847
848       Ожидается
849           Если сторона B не подтверждает ключ, то bakeBSTSStep3() <
850           bakeBSTSStepG(). Если подтверждает, то bakeBSTSStep5() <
851           bakeBSTSStepG().
852
853       Возвращает
854           ERR_OK, если шаг успешно выполнен, и код ошибки в противном случае.
855
856       Аргументы
857           key общий ключ
858           state состояние
859
860   err_t bakeKDF (octet key[32], const octet secret[], size_t secret_len,
861       const octet iv[], size_t iv_len, size_t num)
862       По секретному слову [secret_len]secret, дополнительному слову
863       [iv_len]iv и номеру num строится ключ key.
864
865       Возвращает
866           ERR_OK, если ключ успешно построен, и код ошибки в противном
867           случае.
868
869       Прим.
870           Реализован алгоритм 6.1.3.
871
872       Аргументы
873           key ключ
874           secret секретное слово
875           secret_len длина secret
876           iv дополнительное слово
877           iv_len длина iv
878           num номер ключа
879
880   err_t bakeSWU (octet pt[], const bign_params * params, const octet msg[])
881       При долговременных параметрах params по сообщению [l / 4]msg строится
882       точка [l / 2]pt эллиптической кривой, описываемой params.
883
884       Ожидается [ERR_BAD_PARAMS]
885           Параметры params корректны.
886
887       Возвращает
888           ERR_OK, если точка успешно построена, и код ошибки в противном
889           случае.
890
891       Прим.
892           Реализован алгоритм 6.2.3.
893
894       Аргументы
895           pt точка
896           params долговременные параметры
897           msg сообщение
898

Автор

900       Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
901
902
903
904Библиотека Bee2                 Пт 23 Июн 2023                       bake.h(3)
Impressum