1bake.h(3) Library Functions Manual bake.h(3)
2
3
4
6 bake.h - Протоколы СТБ 34.101.66 (bake)
7
8
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
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
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 Ср 19 Июл 2023 00:00:00 bake.h(3)