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

NAME

6       belt.h - Алгоритмы СТБ 34.101.31 (belt)
7
8

SYNOPSIS

10       #include 'bee2/defs.h'
11
12
13   Макросы
14       #define beltCTRStepD   beltCTRStepE
15           Расшифрование фрагмента в режиме CTR.
16
17
18
19
20   Функции
21       const octet * beltH ()
22           Блок подстановки H.
23       void beltKeyExpand (octet key_[32], const octet key[], size_t len)
24           Расширение ключа
25       void beltKeyExpand2 (u32 key_[8], const octet key[], size_t len)
26           Расширение и форматирование ключа
27       void beltBlockEncr (octet block[16], const u32 key[8])
28           Зашифрование блока
29       void beltBlockEncr2 (u32 block[4], const u32 key[8])
30           Зашифрование форматированного блока
31       void beltBlockEncr3 (u32 *a, u32 *b, u32 *c, u32 *d, const u32 key[8])
32           Зашифрование блока из четверки слов
33       void beltBlockDecr (octet block[16], const u32 key[8])
34           Расшифрование блока
35       void beltBlockDecr2 (u32 block[4], const u32 key[8])
36           Расшифрование форматированного блока
37       void beltBlockDecr3 (u32 *a, u32 *b, u32 *c, u32 *d, const u32 key[8])
38           Расшифрование блока из четверки слов
39       size_t beltWBL_keep ()
40           Длина состояния функций WBL.
41       void beltWBLStart (void *state, const octet key[], size_t len)
42           Инициализация функций WBL.
43       void beltWBLStepE (void *buf, size_t count, void *state)
44           Зашифрование в режиме WBL.
45       void beltWBLStepD (void *buf, size_t count, void *state)
46           Расшифрование в режиме WBL.
47       void beltWBLStepD2 (void *buf1, void *buf2, size_t count, void *state)
48           Расшифрование в режиме WBL с двумя частями
49       void beltWBLStepR (void *buf, size_t count, void *state)
50           Продолженное зашифрование в режиме WBL.
51       size_t beltCompr_deep ()
52           Глубина стека функций сжатия
53       void beltCompr (u32 h[8], const u32 X[8], void *stack)
54           Сжатие форматированных данных
55       void beltCompr2 (u32 s[4], u32 h[8], const u32 X[8], void *stack)
56           Сжатие форматированных данных со сложением
57       size_t beltECB_keep ()
58           Длина состояния функций ECB.
59       void beltECBStart (void *state, const octet key[], size_t len)
60           Инициализация шифрования в режиме ECB.
61       void beltECBStepE (void *buf, size_t count, void *state)
62           Зашифрование фрагмента в режиме ECB.
63       void beltECBStepD (void *buf, size_t count, void *state)
64           Расшифрование в режиме ECB.
65       err_t beltECBEncr (void *dest, const void *src, size_t count, const
66           octet key[], size_t len)
67           Зашифрование в режиме ECB.
68       err_t beltECBDecr (void *dest, const void *src, size_t count, const
69           octet key[], size_t len)
70           Расшифрование в режиме ECB.
71       size_t beltCBC_keep ()
72           Длина состояния функций CBC.
73       void beltCBCStart (void *state, const octet key[], size_t len, const
74           octet iv[16])
75           Инициализация шифрования в режиме CBC.
76       void beltCBCStepE (void *buf, size_t count, void *state)
77           Зашифрование в режиме CBC.
78       void beltCBCStepD (void *buf, size_t count, void *state)
79           Расшифрование в режиме CBC.
80       err_t beltCBCEncr (void *dest, const void *src, size_t count, const
81           octet key[], size_t len, const octet iv[16])
82           Зашифрование в режиме CBC.
83       err_t beltCBCDecr (void *dest, const void *src, size_t count, const
84           octet key[], size_t len, const octet iv[16])
85           Расшифрование в режиме CBC.
86       size_t beltCFB_keep ()
87           Длина состояния функций CFB.
88       void beltCFBStart (void *state, const octet key[], size_t len, const
89           octet iv[16])
90           Инициализация шифрования в режиме CFB.
91       void beltCFBStepE (void *buf, size_t count, void *state)
92           Зашифрование в режиме CFB.
93       void beltCFBStepD (void *buf, size_t count, void *state)
94           Расшифрование в режиме CFB.
95       err_t beltCFBEncr (void *dest, const void *src, size_t count, const
96           octet key[], size_t len, const octet iv[16])
97           Зашифрование в режиме CFB.
98       err_t beltCFBDecr (void *dest, const void *src, size_t count, const
99           octet key[], size_t len, const octet iv[16])
100           Расшифрование в режиме CFB.
101       size_t beltCTR_keep ()
102           Длина состояния функций CTR.
103       void beltCTRStart (void *state, const octet key[], size_t len, const
104           octet iv[16])
105           Инициализация шифрования в режиме CTR.
106       void beltCTRStepE (void *buf, size_t count, void *state)
107           Зашифрование фрагмента в режиме CTR.
108       err_t beltCTR (void *dest, const void *src, size_t count, const octet
109           key[], size_t len, const octet iv[16])
110           Шифрование в режиме CTR.
111       size_t beltMAC_keep ()
112           Длина состояния функций MAC.
113       void beltMACStart (void *state, const octet key[], size_t len)
114           Инициализация функций MAC.
115       void beltMACStepA (const void *buf, size_t count, void *state)
116           Имитозащита фрагмента данных в режиме MAC.
117       void beltMACStepG (octet mac[8], void *state)
118           Определение имитовставки в режиме MAC.
119       void beltMACStepG2 (octet mac[], size_t mac_len, void *state)
120           Определение усеченной имитовставки в режиме MAC.
121       bool_t beltMACStepV (const octet mac[8], void *state)
122           Проверка имитовставки в режиме MAC.
123       bool_t beltMACStepV2 (const octet mac[], size_t mac_len, void *state)
124           Проверка усеченной имитовставки
125       err_t beltMAC (octet mac[8], const void *src, size_t count, const octet
126           key[], size_t len)
127           Имитозащита в режиме MAC.
128       size_t beltDWP_keep ()
129           Длина состояния функций DWP.
130       void beltDWPStart (void *state, const octet key[], size_t len, const
131           octet iv[16])
132           Инициализация функций DWP.
133       void beltDWPStepE (void *buf, size_t count, void *state)
134           Зашифрование критического фрагмента в режиме DWP.
135       void beltDWPStepI (const void *buf, size_t count, void *state)
136           Имитозащита открытого фрагмента в режиме DWP.
137       void beltDWPStepA (const void *buf, size_t count, void *state)
138           Имитозащита критического фрагмента в режиме DWP.
139       void beltDWPStepG (octet mac[8], void *state)
140           Определение имитовставки в режиме DWP.
141       bool_t beltDWPStepV (const octet mac[8], void *state)
142           Проверка имитовставки в режиме DWP.
143       void beltDWPStepD (void *buf, size_t count, void *state)
144           Расшифрование критического фрагмента в режиме DWP.
145       err_t beltDWPWrap (void *dest, octet mac[8], const void *src1, size_t
146           count1, const void *src2, size_t count2, const octet key[], size_t
147           len, const octet iv[16])
148           Установка защиты в режиме DWP.
149       err_t beltDWPUnwrap (void *dest, const void *src1, size_t count1, const
150           void *src2, size_t count2, const octet mac[8], const octet key[],
151           size_t len, const octet iv[16])
152           Снятие защиты в режиме DWP.
153       size_t beltCHE_keep ()
154           Длина состояния функций CHE.
155       void beltCHEStart (void *state, const octet key[], size_t len, const
156           octet iv[16])
157           Инициализация функций CHE.
158       void beltCHEStepE (void *buf, size_t count, void *state)
159           Зашифрование критического фрагмента в режиме CHE.
160       void beltCHEStepI (const void *buf, size_t count, void *state)
161           Имитозащита открытого фрагмента в режиме CHE.
162       void beltCHEStepA (const void *buf, size_t count, void *state)
163           Имитозащита критического фрагмента в режиме CHE.
164       void beltCHEStepG (octet mac[8], void *state)
165           Определение имитовставки в режиме CHE.
166       bool_t beltCHEStepV (const octet mac[8], void *state)
167           Проверка имитовставки в режиме CHE.
168       void beltCHEStepD (void *buf, size_t count, void *state)
169           Расшифрование критического фрагмента в режиме CHE.
170       err_t beltCHEWrap (void *dest, octet mac[8], const void *src1, size_t
171           count1, const void *src2, size_t count2, const octet key[], size_t
172           len, const octet iv[16])
173           Установка защиты в режиме CHE.
174       err_t beltCHEUnwrap (void *dest, const void *src1, size_t count1, const
175           void *src2, size_t count2, const octet mac[8], const octet key[],
176           size_t len, const octet iv[16])
177           Снятие защиты в режиме CHE.
178       err_t beltKWPWrap (octet dest[], const octet src[], size_t count, const
179           octet header[16], const octet key[], size_t len)
180           Установка защиты в режиме KWP.
181       err_t beltKWPUnwrap (octet dest[], const octet src[], size_t count,
182           const octet header[16], const octet key[], size_t len)
183           Снятие защиты в режиме KWP.
184       size_t beltHash_keep ()
185           Длина состояния функции хэширования
186       void beltHashStart (void *state)
187           Инициализация функции хэширования
188       void beltHashStepH (const void *buf, size_t count, void *state)
189           Хэширование фрагмента данных
190       void beltHashStepG (octet hash[32], void *state)
191           Определение хэш-значения
192       void beltHashStepG2 (octet hash[], size_t hash_len, void *state)
193           Определение усеченного хэш-значения
194       bool_t beltHashStepV (const octet hash[32], void *state)
195           Проверка хэш-значения
196       bool_t beltHashStepV2 (const octet hash[], size_t hash_len, void
197           *state)
198           Проверка усеченного хэш-значения
199       err_t beltHash (octet hash[32], const void *src, size_t count)
200           Хэширование
201       size_t beltBDE_keep ()
202           Длина состояния функций BDE.
203       void beltBDEStart (void *state, const octet key[], size_t len, const
204           octet iv[16])
205           Инициализация шифрования в режиме BDE.
206       void beltBDEStepE (void *buf, size_t count, void *state)
207           Шаг зашифрования в режиме BDE.
208       void beltBDEStepD (void *buf, size_t count, void *state)
209           Шаг расшифрования в режиме BDE.
210       err_t beltBDEEncr (void *dest, const void *src, size_t count, const
211           octet key[], size_t len, const octet iv[16])
212           Зашифрование в режиме BDE.
213       err_t beltBDEDecr (void *dest, const void *src, size_t count, const
214           octet key[], size_t len, const octet iv[16])
215           Расшифрование в режиме BDE.
216       size_t beltSDE_keep ()
217           Длина состояния функций SDE.
218       void beltSDEStart (void *state, const octet key[], size_t len)
219           Инициализация шифрования в режиме SDE.
220       void beltSDEStepE (void *buf, size_t count, const octet iv[16], void
221           *state)
222           Шаг зашифрования в режиме SDE.
223       void beltSDEStepD (void *buf, size_t count, const octet iv[16], void
224           *state)
225           Шаг расшифрования в режиме SDE.
226       err_t beltSDEEncr (void *dest, const void *src, size_t count, const
227           octet key[], size_t len, const octet iv[16])
228           Зашифрование в режиме SDE.
229       err_t beltSDEDecr (void *dest, const void *src, size_t count, const
230           octet key[], size_t len, const octet iv[16])
231           Расшифрование в режиме SDE.
232       size_t beltFMT_keep (u32 mod, size_t count)
233           Длина состояния функций FMT.
234       void beltFMTStart (void *state, u32 mod, size_t count, const octet
235           key[], size_t len)
236           Инициализация шифрования в режиме FMT.
237       void beltFMTStepE (u16 buf[], const octet iv[16], void *state)
238           Шаг зашифрования в режиме FMT.
239       void beltFMTStepD (u16 buf[], const octet iv[16], void *state)
240           Шаг расшифрования в режиме FMT.
241       err_t beltFMTEncr (u16 dest[], u32 mod, const u16 src[], size_t count,
242           const octet key[], size_t len, const octet iv[16])
243           Зашифрование в режиме FMT.
244       err_t beltFMTDecr (u16 dest[], u32 mod, const u16 src[], size_t count,
245           const octet key[], size_t len, const octet iv[16])
246           Расшифрование в режиме FMT.
247       size_t beltKRP_keep ()
248           Длина состояния функций преобразования ключа
249       void beltKRPStart (void *state, const octet key[], size_t len, const
250           octet level[12])
251           Инициализация функций преобразования ключа
252       void beltKRPStepG (octet key_[], size_t key_len, const octet
253           header[16], void *state)
254           Тиражирование ключа
255       err_t beltKRP (octet dest[], size_t m, const octet src[], size_t n,
256           const octet level[12], const octet header[16])
257           Преобразование ключа
258       size_t beltHMAC_keep ()
259           Длина состояния функций HMAC.
260       void beltHMACStart (void *state, const octet key[], size_t len)
261           Инициализация функций HMAC.
262       void beltHMACStepA (const void *buf, size_t count, void *state)
263           Имитозащита фрагмента данных в режиме HMAC.
264       void beltHMACStepG (octet mac[32], void *state)
265           Определение имитовставки в режиме HMAC.
266       void beltHMACStepG2 (octet mac[], size_t mac_len, void *state)
267           Определение усеченной имитовставки в режиме HMAC.
268       bool_t beltHMACStepV (const octet mac[32], void *state)
269           Проверка имитовставки в режиме HMAC.
270       bool_t beltHMACStepV2 (const octet mac[], size_t mac_len, void *state)
271           Проверка усеченной имитовставки
272       err_t beltHMAC (octet mac[32], const void *src, size_t count, const
273           octet key[], size_t len)
274           Имитозащита в режиме HMAC.
275       err_t beltPBKDF2 (octet key[32], const octet pwd[], size_t pwd_len,
276           size_t iter, const octet salt[], size_t salt_len)
277           Построение ключа по паролю
278

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

280       Реализованы алгоритмы СТБ 34.101.31 (belt). Дополнительно реализованы
281       алгоритм ключезависимого хэширования (HMAC), основанный на функции
282       хэширования belt-hash, и алгоритм построения ключа по паролю,
283       основанный на HMAC[belt-hash]. Эти алгоритмы определены соответственно
284       в СТБ 34.101.47 и в СТБ 34.101.45.
285
286       Основные алгоритмы объединяются в группы, которые определяют следующие
287       криптографические механизмы:
288
289       • ECB --- шифрование в режиме простой замены;
290
291       • CBC --- шифрование в режиме сцепления блоков;
292
293       • CFB --- шифрование в режиме гаммирования с обратной связью;
294
295       • CTR --- шифрование в режиме счетчика;
296
297       • MAC --- имитозащита на основе шифрования;
298
299       • DWP --- аутентифицированное шифрование данных, схема DWP;
300
301       • CHE --- аутентифицированное шифрование данных, схема CHE;
302
303       • KWP --- аутентифицированное шифрование ключей;
304
305       • Hash --- хэширование;
306
307       • BDE --- блоковое дисковое шифрование;
308
309       • SDE --- секторное дисковое шифрование;
310
311       • FMT --- шифрование с сохранением формата;
312
313       • KRP --- преобразование ключей;
314
315       • HMAC --- имитозащита на основе хэширования.
316
317       Механизмы построены на базовых криптографических алгоритмах шифрования
318       блока (Block), шифрования широкого блока (WBL) и сжатия (Compr).
319       Механизм WBL определен в новой редакции СТБ 34.101.31 и представляет
320       собой ядро KWP.
321
322       В механизмах ECB, CBC, CFB, CTR, MAC, DWP, CHE, KWP, BDE, SDE, FMT, KRP
323       используется ключ из 32 октетов. Ключ такой длины может быть построен
324       по ключу из 16 или 24 октетов с помощью функции beltExpand().
325
326       В механизме HMAC используется ключ произвольной длины. Рекомендуется
327       использовать ключ из 32 октетов.
328
329       В механизмах ECB, CBC, CFB, CTR, MAC, DWP, CHE, KWP, BDE данные
330       обрабатываются блоками по 16 октетов.
331
332       В механизмах Hash, HMAC данные обрабатываются блоками по 32 октета.
333
334       В механизме SDE обрабатываются секторы. Сектор состоит из двух или
335       более полных 16-октетных блоков.
336
337       В механизме FMT обрабатываются строки длины count в алфавите ZZ_mod =
338       {0, 1,..., mod - 1}. Здесь mod -- размер алфавита или модуль. Должны
339       выполняться следующие ограничения:
340
341       • 2 <= mod && mod <= 65536;
342
343       • 2 <= count && count <= 600. Последнее ограничение -- ограничение
344         реализации.
345
346       На вход основных и вспомогательных функций данные и ключи подаются либо
347       как void-массивы (неформатированные данные, по умолчанию), либо как
348       массивы u32 (форматированные данные). Внутри функций неформатированные
349       данные форматируются перед использованием. На платформах с соглашениями
350       BIG_ENDIAN форматирование требует дополнительного времени.
351
352       Каждый механизм реализуется связкой из нескольких функций. Эти функции
353       используют общее состояние, указатель на которое передается в функции
354       как дополнительный параметр. Имеются функция определения объема памяти
355       для состояния (_keep). Память для состояния готовит вызывающая
356       программа и она же отвечает за очистку памяти.
357
358       Состояние можно копировать как фрагмент памяти.
359
360       В связке обязательно имеется функция инициализации механизма (Start) и
361       одна или несколько функций обработки фрагментов данных и получения
362       результатов обработки (StepX).
363
364       Логика суффиксов функций StepX:
365
366       • E -- encrypt (зашифровать);
367
368       • D -- decrypt (расшифровать);
369
370       • A -- authenticate (имитозащита);
371
372       • I -- имитозащита открытых данных в режиме DWP;
373
374       • H -- hashing (хэширование);
375
376       • G -- get (получить имитовставку, хэш-значение или новый ключ);
377
378       • V -- verify (проверить хэш-значение, имитовставку);
379
380       • R -- random (псевдослучайная генерация).
381
382       Функции связки спроектированы как максимально простые и эффективные. В
383       частности, в этих функциях не проверяются входные данные.
384
385       Каждая связка покрывается высокоуровневой функцией, которая
386       обрабатывает все данные целиком. В высокоуровневых функциях есть
387       проверка входных данных.
388
389       Механизмы MAC, Hash, HMAC, DWP, CHE реализованы с поддержкой принципа
390       get-then-continue. Это означает, что после обработки определенной
391       порции данных можно вызвать функцию типа StepG, а затем продолжить
392       обработку.
393
394       Ожидается
395           Общее состояние связки функций не изменяется вне этих функций.
396
397       Ожидается [ERR_BAD_INPUT]
398           Все входные указатели высокоуровневых функций действительны.
399
400       Предусловие
401           Все входные указатели низкоуровневых функций действительны.
402
403           Если не оговорено противное, то входные буферы функций связки не
404           пересекаются.
405

Макросы

407   #define beltCTRStepD   beltCTRStepE
408       Прим.
409           Зашифрование в режиме CTR не отличается от расшифрования.
410
411   #define beltKWP_keep   beltWBL_keep
412       Прим.
413           Повторяются функции механизма WBL.
414

Функции

416   size_t beltBDE_keep ()
417       Возвращается длина состояния (в октетах) функций шифрования в режиме
418       BDE.
419
420       Возвращает
421           Длина состояние.
422
423   err_t beltBDEDecr (void * dest, const void * src, size_t count, const octet
424       key[], size_t len, const octet iv[16])
425       Буфер [count]src расшифровывается на ключе [len]key с использованием
426       синхропосылки iv. Результат расшифрования размещается в буфере
427       [count]dest.
428
429       Ожидается [ERR_BAD_INPUT]
430
431
432           • len == 16 || len == 24 || len == 32;
433
434           • count % 16 == 0 && count >= 16.
435
436       Возвращает
437           ERR_OK, если данные успешно расшифрованы, и код ошибки в противном
438           случае.
439
440       Прим.
441           Буферы могут пересекаться.
442
443       Аргументы
444           dest открытый текст
445           src шифртекст
446           count число октетов текста
447           key ключ
448           len длина ключа
449           iv синхропосылка
450
451   err_t beltBDEEncr (void * dest, const void * src, size_t count, const octet
452       key[], size_t len, const octet iv[16])
453       Буфер [count]src зашифровывается на ключе [len]key с использованием
454       синхропосылки iv. Результат зашифрования размещается в буфере
455       [count]dest.
456
457       Ожидается [ERR_BAD_INPUT]
458
459
460           • len == 16 || len == 24 || len == 32;
461
462           • count % 16 == 0 && count >= 16.
463
464       Возвращает
465           ERR_OK, если данные успешно зашифрованы, и код ошибки в противном
466           случае.
467
468       Прим.
469           Буферы могут пересекаться.
470
471       Аргументы
472           dest шифртекст
473           src открытый текст
474           count число октетов текста
475           key ключ
476           len длина ключа
477           iv синхропосылка
478
479   void beltBDEStart (void * state, const octet key[], size_t len, const octet
480       iv[16])
481       По ключу [len]key и синхропосылке iv в state формируются структуры
482       данных, необходимые для шифрования в режиме BDE.
483
484       Предусловие
485           len == 16 || len == 24 || len == 32.
486
487           По адресу state зарезервировано beltBDE_keep() октетов.
488
489       Прим.
490           Буферы key и state могут пересекаться.
491
492       Аргументы
493           state состояние
494           key ключ
495           len длина ключа в октетах
496           iv синхропосылка
497
498   void beltBDEStepD (void * buf, size_t count, void * state)
499       Буфер [count]buf расшифровывается в режиме BDE на ключе, размещенном в
500       state.
501
502       Предусловие
503           count % 16 == 0.
504
505       Ожидается
506           beltBDEStart() < beltBDEStepD()*.
507
508       Аргументы
509           buf шифртекст / открытый текст
510           count число октетов текста
511           state состояние
512
513   void beltBDEStepE (void * buf, size_t count, void * state)
514       Буфер [count]buf зашифровывается в режиме BDE на ключе, размещенном в
515       state.
516
517       Предусловие
518           count % 16 == 0.
519
520       Ожидается
521           beltBDEStart() < beltBDEStepE()*.
522
523       Аргументы
524           buf открытый текст / шифртекст
525           count число октетов текста
526           state состояние
527
528   void beltBlockDecr (octet block[16], const u32 key[8])
529       Выполняется расшифрование блока данных block на форматированном ключе
530       key. Результат расшифрования возвращается по адресу block.
531
532       Аргументы
533           block блок
534           key ключ
535
536   void beltBlockDecr2 (u32 block[4], const u32 key[8])
537       Выполняется расшифрование форматированного блока данных block на
538       форматированном ключе key. Результат расшифрования возвращается по
539       адресу block.
540
541       Аргументы
542           block блок
543           key ключ
544
545   void beltBlockDecr3 (u32 * a, u32 * b, u32 * c, u32 * d, const u32 key[8])
546       Выполняется расшифрование форматированного блока (a, b, c, d),
547       заданного четверкой последовательных 32-разрядных слов, на
548       форматированном ключе key. Результат расшифрования возвращается через
549       входные слова.
550
551       Аргументы
552           a слово a
553           b слово b
554           c слово c
555           d слово d
556           key ключ
557
558   void beltBlockEncr (octet block[16], const u32 key[8])
559       Выполняется зашифрование блока данных block на форматированном ключе
560       key. Результат зашифрования возвращается по адресу block.
561
562       Аргументы
563           block блок
564           key ключ
565
566   void beltBlockEncr2 (u32 block[4], const u32 key[8])
567       Выполняется зашифрование форматированного блока данных block на
568       форматированном ключе key. Результат зашифрования возвращается по
569       адресу block.
570
571       Аргументы
572           block блок
573           key ключ
574
575   void beltBlockEncr3 (u32 * a, u32 * b, u32 * c, u32 * d, const u32 key[8])
576       Выполняется зашифрование форматированного блока (a, b, c, d), заданного
577       четверкой последовательных 32-разрядных слов, на форматированном ключе
578       key. Результат зашифрования возвращается через входные слова.
579
580       Аргументы
581           a слово a
582           b слово b
583           c слово c
584           d слово d
585           key ключ
586
587   size_t beltCBC_keep ()
588       Возвращается длина состояния (в октетах) функций шифрования в режиме
589       CBC.
590
591       Возвращает
592           Длина состояние.
593
594   err_t beltCBCDecr (void * dest, const void * src, size_t count, const octet
595       key[], size_t len, const octet iv[16])
596       Буфер [count]src расшифровывается на ключе [len]key с использованием
597       синхропосылки iv. Результат расшифрования размещается в буфере
598       [count]dest.
599
600       Ожидается [ERR_BAD_INPUT]
601
602
603           • len == 16 || len == 24 || len == 32;
604
605           • count >= 16.
606
607       Возвращает
608           ERR_OK, если данные успешно расшифрованы, и код ошибки в противном
609           случае.
610
611       Прим.
612           Буферы могут пересекаться.
613
614       Аргументы
615           dest открытый текст
616           src шифртекст
617           count число октетов текста
618           key ключ
619           len длина ключа
620           iv синхропосылка
621
622   err_t beltCBCEncr (void * dest, const void * src, size_t count, const octet
623       key[], size_t len, const octet iv[16])
624       Буфер [count]src зашифровывается на ключе [len]key с использованием
625       синхропосылки iv. Результат зашифрования размещается в буфере
626       [count]dest.
627
628       Ожидается [ERR_BAD_INPUT]
629
630
631           • len == 16 || len == 24 || len == 32;
632
633           • count >= 16.
634
635       Возвращает
636           ERR_OK, если данные успешно зашифрованы, и код ошибки в противном
637           случае.
638
639       Прим.
640           Буферы могут пересекаться.
641
642       Аргументы
643           dest шифртекст
644           src открытый текст
645           count число октетов текста
646           key ключ
647           len длина ключа
648           iv синхропосылка
649
650   void beltCBCStart (void * state, const octet key[], size_t len, const octet
651       iv[16])
652       По ключу [len]key и синхропосылке iv в state формируются структуры
653       данных, необходимые для шифрования в режиме CBC.
654
655       Предусловие
656           len == 16 || len == 24 || len == 32.
657
658           По адресу state зарезервировано beltCBC_keep() октетов.
659
660       Прим.
661           Буферы key и state могут пересекаться.
662
663       Аргументы
664           state состояние
665           key ключ
666           len длина ключа в октетах
667           iv синхропосылка
668
669   void beltCBCStepD (void * buf, size_t count, void * state)
670       Буфер [count]buf расшифровывается в режиме CBC на ключе, размещенном в
671       state.
672
673       Предусловие
674           count >= 16.
675
676       Ожидается
677           beltCBCStart() < beltCBCStepD()*.
678
679       Прим.
680           Сохраняются замечания по функции beltCBCStepE().
681
682       Аргументы
683           buf шифртекст / открытый текст
684           count число октетов текста
685           state состояние
686
687   void beltCBCStepE (void * buf, size_t count, void * state)
688       Буфер [count]buf зашифровывается в режиме CBC на ключе, размещенном в
689       state.
690
691       Предусловие
692           count >= 16.
693
694       Ожидается
695           beltCBCStart() < beltCBCStepE()*.
696
697       Прим.
698           К функции можно обратиться несколько раз, передавая buf из полных
699           блоков. Неполный блок можно передать только при последнем
700           обращении. В этом случае выполняется 'кража' блока (ciphertext
701           stealing, CTS).
702
703           При организации последовательных обращений к функции следует
704           учитывать, что буфер buf должен содержать не менее одного блока.
705           Например для зашифрования 33 октетов можно зашифровать сначала 16
706           октетов, а затем еще 17. Но нельзя зашифровать сначала 32 октета, а
707           затем еще 1.
708
709       Аргументы
710           buf открытый текст / шифртекст
711           count число октетов текста
712           state состояние
713
714   size_t beltCFB_keep ()
715       Возвращается длина состояния (в октетах) функций шифрования в режиме
716       CFB.
717
718       Возвращает
719           Длина состояния.
720
721   err_t beltCFBDecr (void * dest, const void * src, size_t count, const octet
722       key[], size_t len, const octet iv[16])
723       Буфер [count]src расшифровывается на ключе [len]key с использованием
724       синхропосылки iv. Результат расшифрования размещается в буфере
725       [count]dest.
726
727       Ожидается [ERR_BAD_INPUT]
728           len == 16 || len == 24 || len == 32.
729
730       Возвращает
731           ERR_OK, если данные успешно расшифрованы, и код ошибки в противном
732           случае.
733
734       Прим.
735           Буферы могут пересекаться.
736
737       Аргументы
738           dest открытый текст
739           src шифртекст
740           count число октетов текста
741           key ключ
742           len длина ключа
743           iv синхропосылка
744
745   err_t beltCFBEncr (void * dest, const void * src, size_t count, const octet
746       key[], size_t len, const octet iv[16])
747       Буфер [count]src зашифровывается на ключе [len]key с использованием
748       синхропосылки iv. Результат зашифрования размещается в буфере
749       [count]dest.
750
751       Ожидается [ERR_BAD_INPUT]
752           len == 16 || len == 24 || len == 32.
753
754       Возвращает
755           ERR_OK, если данные успешно зашифрованы, и код ошибки в противном
756           случае.
757
758       Прим.
759           Буферы могут пересекаться.
760
761       Аргументы
762           dest шифртекст
763           src открытый текст
764           count число октетов текста
765           key ключ
766           len длина ключа
767           iv синхропосылка
768
769   void beltCFBStart (void * state, const octet key[], size_t len, const octet
770       iv[16])
771       По ключу [len]key и синхропосылке iv в state формируются структуры
772       данных, необходимые для шифрования в режиме CFB.
773
774       Предусловие
775           len == 16 || len == 24 || len == 32.
776
777           По адресу state зарезервировано beltCFB_keep() октетов.
778
779       Прим.
780           Буферы key и state могут пересекаться.
781
782       Аргументы
783           state состояние
784           key ключ
785           len длина ключа в октетах
786           iv синхропосылка
787
788   void beltCFBStepD (void * buf, size_t count, void * state)
789       Буфер [count]buf расшифровывается в режиме CFB на ключе, размещенном в
790       state.
791
792       Ожидается
793           beltCFBStart() < beltCFBStepD()*.
794
795       Аргументы
796           buf шифртекст / открытый текст
797           count число октетов текста
798           state состояние
799
800   void beltCFBStepE (void * buf, size_t count, void * state)
801       Буфер [count]buf зашифровывается в режиме CFB на ключе, размещенном в
802       state.
803
804       Ожидается
805           beltCFBStart() < beltCFBStepE()*.
806
807       Аргументы
808           buf открытый текст / шифртекст
809           count число октетов текста
810           state состояние
811
812   size_t beltCHE_keep ()
813       Возвращается длина состояния (в октетах) функций CHE.
814
815       Возвращает
816           Длина состояния.
817
818   void beltCHEStart (void * state, const octet key[], size_t len, const octet
819       iv[16])
820       По ключу [len]key и синхропосылке iv в state формируются структуры
821       данных, необходимые для аутентифицированного шифрования в режиме CHE.
822
823       Предусловие
824           len == 16 || len == 24 || len == 32.
825
826           По адресу state зарезервировано beltCHE_keep() октетов.
827
828       Прим.
829           Буферы key и state могут пересекаться.
830
831       Аргументы
832           state состояние
833           key ключ
834           len длина ключа в октетах
835           iv синхропосылка
836
837   void beltCHEStepA (const void * buf, size_t count, void * state)
838       Текущая имитовставка, размещенная в state, пересчитывается с учетом
839       нового фрагмента зашифрованных критических данных [count]buf. Пересчет
840       выполняется на ключе, также размещенном в state.
841
842       Ожидается
843           По адресу state зарезервировано beltCHE_keep() октетов.
844
845       Ожидается
846           beltCHEStepI()* < beltCHEStepA()*.
847
848       Ожидается
849           beltCHEStepE()* < beltCHEStepA()*.
850
851       Аргументы
852           buf критические данные
853           count число октетов данных
854           state состояние
855
856   void beltCHEStepD (void * buf, size_t count, void * state)
857       Фрагмент зашифрованных критических данных [count]buf расшифровывается
858       на ключе, размещенном в state. Результат расшифрования сохраняется в
859       buf.
860
861       Ожидается
862           beltCHEStepG() < beltCHEStepD().
863
864       Ожидается
865           beltCHEStepA()* < beltCHEStepD().
866
867       Аргументы
868           buf критические данные
869           count число октетов данных
870           state состояние
871
872   void beltCHEStepE (void * buf, size_t count, void * state)
873       Фрагмент критических данных [count]buf зашифровывается на ключе,
874       размещенном в state. Результат зашифрования сохраняется в buf.
875
876       Ожидается
877           beltCHEStart() < beltCHEStepE()*.
878
879       Аргументы
880           buf критические данные
881           count число октетов данных
882           state состояние
883
884   void beltCHEStepG (octet mac[8], void * state)
885       Определяется окончательная имитовставка mac всех данных, обработанных
886       до этого функциями beltCHEStepI() и beltCHEStepA().
887
888       Ожидается
889           beltCHEStepI()* < beltCHEStepG().
890
891       Ожидается
892           beltCHEStepA()* < beltCHEStepG().
893
894       Предупреждения
895           При выполнении функции состояние state изменяется так, что
896           продолжение имитозащиты становится некорректным.
897
898       Аргументы
899           mac имитовставка
900           state состояние
901
902   void beltCHEStepI (const void * buf, size_t count, void * state)
903       Текущая имитовставка, размещенная в state, пересчитывается с учетом
904       нового фрагмента открытых данных [count]buf. Пересчет выполняется на
905       ключе, также размещенном в state.
906
907       Ожидается
908           beltCHEStart() < beltCHEStepI()*.
909
910       Аргументы
911           buf открытые данные
912           count число октетов данных
913           state состояние
914
915   bool_t beltCHEStepV (const octet mac[8], void * state)
916       Проверяется, что окончательная имитовставка всех данных, обработанных
917       до этого функциями beltCHEStepI() и beltCHEStepA(), совпадает с mac.
918
919       Ожидается
920           beltCHEStepI()* < beltCHEStepV().
921
922       Ожидается
923           beltCHEStepA()* < beltCHEStepV().
924
925       Возвращает
926           Признак успеха.
927
928       Предупреждения
929           При выполнении функции состояние state изменяется так, что
930           продолжение имитозащиты становится некорректным.
931
932       Аргументы
933           mac контрольная имитовставка
934           state состояние
935
936   err_t beltCHEUnwrap (void * dest, const void * src1, size_t count1, const
937       void * src2, size_t count2, const octet mac[8], const octet key[],
938       size_t len, const octet iv[16])
939       На ключе [len]key октетов с использованием имитовставки iv снимается
940       защита зашифрованных критических данных [count1]src1 и открытых данных
941       [count2]src2. При снятии защиты проверяется целостность пары (src1,
942       src2) с помощью имитовставки mac. Если целостность не нарушена, то
943       данные src1 расшифровываются в буфер [count1]dest.
944
945       Ожидается [ERR_BAD_INPUT]
946           len == 16 || len == 24 || len == 32.
947
948       Возвращает
949           ERR_OK, если защита успешно снята, и код ошибки в противном случае.
950
951       Прим.
952           Буферы могут пересекаться.
953
954       Аргументы
955           dest расшифрованные критические данные
956           src1 зашифрованные критические данные
957           count1 число октетов критических данных
958           src2 открытые данные
959           count2 число октетов открытых данных
960           mac имитовставка
961           key ключ
962           len длина ключа
963           iv синхропосылка
964
965   err_t beltCHEWrap (void * dest, octet mac[8], const void * src1, size_t
966       count1, const void * src2, size_t count2, const octet key[], size_t
967       len, const octet iv[16])
968       На ключе [len]key с использованием имитовставки iv устанавливается
969       защита критических данных [count1]src1 и открытых данных [count2]src2.
970       При установке защиты критические данные зашифровываются и сохраняются в
971       буфере [count1]dest. Кроме этого определяется имитовставка mac пары
972       (src1, src2).
973
974       Ожидается [ERR_BAD_INPUT]
975
976
977           • len == 16 || len == 24 || len == 32;
978
979           • буферы dest и mac не пересекаются.
980
981       Возвращает
982           ERR_OK, если защита успешно установлена, и код ошибки в противном
983           случае.
984
985       Прим.
986           Буферы могут пересекаться, за исключением пересечения dest и mac.
987
988       Аргументы
989           dest зашифрованные критические данные
990           mac имитовставка
991           src1 критические данные
992           count1 число октетов критических данных
993           src2 открытые данные
994           count2 число октетов открытых данных
995           key ключ
996           len длина ключа
997           iv синхропосылка
998
999   void beltCompr (u32 h[8], const u32 X[8], void * stack)
1000       Форматированный буфер h || X сжимается до форматированного буфера h.
1001
1002       Предусловие
1003           Буферы X и h не пересекаются.
1004
1005       Схема расчета глубины stack
1006           beltCompr_deep().
1007
1008       Аргументы
1009           h первая часть входа/выход
1010           X вторая часть входа
1011           stack стек
1012
1013   void beltCompr2 (u32 s[4], u32 h[8], const u32 X[8], void * stack)
1014       Форматированный буфер h || X сжимается до форматированного буфера h.
1015       Внутренняя переменная S belt-compress добавдяется поразрядно по модулю
1016       2 к буферу s.
1017
1018       Предусловие
1019           Буферы s и h, X и s, X и h не пересекаются.
1020
1021       Схема расчета глубины stack
1022           beltCompr_deep().
1023
1024       Аргументы
1025           s сумма
1026           h первая часть входа/выход
1027           X вторая часть входа
1028           stack стек
1029
1030   size_t beltCompr_deep ()
1031       Возвращается глубина стека (в октетах) функций сжатия.
1032
1033       Возвращает
1034           Глубина стека.
1035
1036   err_t beltCTR (void * dest, const void * src, size_t count, const octet
1037       key[], size_t len, const octet iv[16])
1038       Буфер [count]src зашифровывается или расшифровывается на ключе [len]key
1039       с использованием синхропосылки iv. Результат шифрования размещается в
1040       буфере [count]dest.
1041
1042       Ожидается [ERR_BAD_INPUT]
1043           len == 16 || len == 24 || len == 32.
1044
1045       Возвращает
1046           ERR_OK, если шифрование завершено успешно, и код ошибки в противном
1047           случае.
1048
1049       Прим.
1050           Буферы могут пересекаться.
1051
1052       Аргументы
1053           dest шифртекст / открытый текст
1054           src открытый текст / шифртекст
1055           count число октетов текста
1056           key ключ
1057           len длина ключа
1058           iv синхропосылка
1059
1060   size_t beltCTR_keep ()
1061       Возвращается длина состояния (в октетах) функций шифрования в режиме
1062       CTR.
1063
1064       Возвращает
1065           Длина состояния.
1066
1067   void beltCTRStart (void * state, const octet key[], size_t len, const octet
1068       iv[16])
1069       По ключу [len]key и синхропосылке iv в state формируются структуры
1070       данных, необходимые для шифрования в режиме CTR.
1071
1072       Предусловие
1073           len == 16 || len == 24 || len == 32.
1074
1075           По адресу state зарезервировано beltCTR_keep() октетов.
1076
1077       Прим.
1078           Буферы key и state могут пересекаться.
1079
1080       Аргументы
1081           state состояние
1082           key ключ
1083           len длина ключа в октетах
1084           iv синхропосылка
1085
1086   void beltCTRStepE (void * buf, size_t count, void * state)
1087       Буфер [count]buf зашифровывается в режиме CTR на ключе, размещенном в
1088       state.
1089
1090       Ожидается
1091           beltCTRStart() < beltCTRStepE()*.
1092
1093       Аргументы
1094           buf открытый текст / шифртекст
1095           count число октетов текста
1096           state состояние
1097
1098   size_t beltDWP_keep ()
1099       Возвращается длина состояния (в октетах) функций DWP.
1100
1101       Возвращает
1102           Длина состояния.
1103
1104   void beltDWPStart (void * state, const octet key[], size_t len, const octet
1105       iv[16])
1106       По ключу [len]key и синхропосылке iv в state формируются структуры
1107       данных, необходимые для аутентифицированного шифрования в режиме DWP.
1108
1109       Предусловие
1110           len == 16 || len == 24 || len == 32.
1111
1112           По адресу state зарезервировано beltDWP_keep() октетов.
1113
1114       Прим.
1115           Буферы key и state могут пересекаться.
1116
1117       Аргументы
1118           state состояние
1119           key ключ
1120           len длина ключа в октетах
1121           iv синхропосылка
1122
1123   void beltDWPStepA (const void * buf, size_t count, void * state)
1124       Текущая имитовставка, размещенная в state, пересчитывается с учетом
1125       нового фрагмента зашифрованных критических данных [count]buf. Пересчет
1126       выполняется на ключе, также размещенном в state.
1127
1128       Ожидается
1129           По адресу state зарезервировано beltDWP_keep() октетов.
1130
1131       Ожидается
1132           beltDWPStepI()* < beltDWPStepA()*.
1133
1134       Ожидается
1135           beltDWPStepE()* < beltDWPStepA()*.
1136
1137       Аргументы
1138           buf критические данные
1139           count число октетов данных
1140           state состояние
1141
1142   void beltDWPStepD (void * buf, size_t count, void * state)
1143       Фрагмент зашифрованных критических данных [count]buf расшифровывается
1144       на ключе, размещенном в state. Результат расшифрования сохраняется в
1145       buf.
1146
1147       Ожидается
1148           beltDWPStepG() < beltDWPStepD().
1149
1150       Ожидается
1151           beltDWPStepA()* < beltDWPStepD().
1152
1153       Аргументы
1154           buf критические данные
1155           count число октетов данных
1156           state состояние
1157
1158   void beltDWPStepE (void * buf, size_t count, void * state)
1159       Фрагмент критических данных [count]buf зашифровывается на ключе,
1160       размещенном в state. Результат зашифрования сохраняется в buf.
1161
1162       Ожидается
1163           beltDWPStart() < beltDWPStepE()*.
1164
1165       Аргументы
1166           buf критические данные
1167           count число октетов данных
1168           state состояние
1169
1170   void beltDWPStepG (octet mac[8], void * state)
1171       Определяется окончательная имитовставка mac всех данных, обработанных
1172       до этого функциями beltDWPStepI() и beltDWPStepA().
1173
1174       Ожидается
1175           beltDWPStepI()* < beltDWPStepG().
1176
1177       Ожидается
1178           beltDWPStepA()* < beltDWPStepG().
1179
1180       Предупреждения
1181           При выполнении функции состояние state изменяется так, что
1182           продолжение имитозащиты становится некорректным.
1183
1184       Аргументы
1185           mac имитовставка
1186           state состояние
1187
1188   void beltDWPStepI (const void * buf, size_t count, void * state)
1189       Текущая имитовставка, размещенная в state, пересчитывается с учетом
1190       нового фрагмента открытых данных [count]buf. Пересчет выполняется на
1191       ключе, также размещенном в state.
1192
1193       Ожидается
1194           beltDWPStart() < beltDWPStepI()*.
1195
1196       Аргументы
1197           buf открытые данные
1198           count число октетов данных
1199           state состояние
1200
1201   bool_t beltDWPStepV (const octet mac[8], void * state)
1202       Проверяется, что окончательная имитовставка всех данных, обработанных
1203       до этого функциями beltDWPStepI() и beltDWPStepA(), совпадает с mac.
1204
1205       Ожидается
1206           beltDWPStepI()* < beltDWPStepV().
1207
1208       Ожидается
1209           beltDWPStepA()* < beltDWPStepV().
1210
1211       Возвращает
1212           Признак успеха.
1213
1214       Предупреждения
1215           При выполнении функции состояние state изменяется так, что
1216           продолжение имитозащиты становится некорректным.
1217
1218       Аргументы
1219           mac контрольная имитовставка
1220           state состояние
1221
1222   err_t beltDWPUnwrap (void * dest, const void * src1, size_t count1, const
1223       void * src2, size_t count2, const octet mac[8], const octet key[],
1224       size_t len, const octet iv[16])
1225       На ключе [len]key октетов с использованием имитовставки iv снимается
1226       защита зашифрованных критических данных [count1]src1 и открытых данных
1227       [count2]src2. При снятии защиты проверяется целостность пары (src1,
1228       src2) с помощью имитовставки mac. Если целостность не нарушена, то
1229       данные src1 расшифровываются в буфер [count1]dest.
1230
1231       Ожидается [ERR_BAD_INPUT]
1232           len == 16 || len == 24 || len == 32.
1233
1234       Возвращает
1235           ERR_OK, если защита успешно снята, и код ошибки в противном случае.
1236
1237       Прим.
1238           Буферы могут пересекаться.
1239
1240       Аргументы
1241           dest расшифрованные критические данные
1242           src1 зашифрованные критические данные
1243           count1 число октетов критических данных
1244           src2 открытые данные
1245           count2 число октетов открытых данных
1246           mac имитовставка
1247           key ключ
1248           len длина ключа
1249           iv синхропосылка
1250
1251   err_t beltDWPWrap (void * dest, octet mac[8], const void * src1, size_t
1252       count1, const void * src2, size_t count2, const octet key[], size_t
1253       len, const octet iv[16])
1254       На ключе [len]key с использованием имитовставки iv устанавливается
1255       защита критических данных [count1]src1 и открытых данных [count2]src2.
1256       При установке защиты критические данные зашифровываются и сохраняются в
1257       буфере [count1]dest. Кроме этого определяется имитовставка mac пары
1258       (src1, src2).
1259
1260       Ожидается [ERR_BAD_INPUT]
1261
1262
1263           • len == 16 || len == 24 || len == 32;
1264
1265           • буферы dest и mac не пересекаются.
1266
1267       Возвращает
1268           ERR_OK, если защита успешно установлена, и код ошибки в противном
1269           случае.
1270
1271       Прим.
1272           Буферы могут пересекаться, за исключением пересечения dest и mac.
1273
1274       Аргументы
1275           dest зашифрованные критические данные
1276           mac имитовставка
1277           src1 критические данные
1278           count1 число октетов критических данных
1279           src2 открытые данные
1280           count2 число октетов открытых данных
1281           key ключ
1282           len длина ключа
1283           iv синхропосылка
1284
1285   size_t beltECB_keep ()
1286       Возвращается длина состояния (в октетах) функций шифрования в режиме
1287       ECB.
1288
1289       Возвращает
1290           Длина состояния.
1291
1292   err_t beltECBDecr (void * dest, const void * src, size_t count, const octet
1293       key[], size_t len)
1294       Буфер src из count октетов расшифровывается на ключе [len]key.
1295       Результат расшифрования размещается в буфере dest.
1296
1297       Ожидается [ERR_BAD_INPUT]
1298
1299
1300           • len == 16 || len == 24 || len == 32;
1301
1302           • count >= 16.
1303
1304       Возвращает
1305           ERR_OK, если данные успешно расшифрованы, и код ошибки в противном
1306           случае.
1307
1308       Аргументы
1309           dest открытый текст
1310           src шифртекст
1311           count число октетов текста
1312           key ключ
1313           len длина ключа
1314
1315   err_t beltECBEncr (void * dest, const void * src, size_t count, const octet
1316       key[], size_t len)
1317       Буфер [count]src зашифровывается на ключе [len]key октетов. Результат
1318       зашифрования размещается в буфере [count]dest.
1319
1320       Ожидается [ERR_BAD_INPUT]
1321
1322
1323           • len == 16 || len == 24 || len == 32;
1324
1325           • count >= 16.
1326
1327       Возвращает
1328           ERR_OK, если данные успешно зашифрованы, и код ошибки в противном
1329           случае.
1330
1331       Аргументы
1332           dest шифртекст
1333           src открытый текст
1334           count число октетов текста
1335           key ключ
1336           len длина ключа
1337
1338   void beltECBStart (void * state, const octet key[], size_t len)
1339       По ключу [len]key в state формируются структуры данных, необходимые для
1340       шифрования в режиме ECB.
1341
1342       Предусловие
1343           len == 16 || len == 24 || len == 32.
1344
1345           По адресу state зарезервировано beltECB_keep() октетов.
1346
1347       Прим.
1348           Буферы key и state могут пересекаться.
1349
1350       Аргументы
1351           state состояние
1352           key ключ
1353           len длина ключа в октетах
1354
1355   void beltECBStepD (void * buf, size_t count, void * state)
1356       Буфер [count]buf расшифровывается в режиме ECB на ключе, размещенном в
1357       state.
1358
1359       Предусловие
1360           count >= 16.
1361
1362       Ожидается
1363           beltECBStart() < beltECBStepD()*.
1364
1365       Прим.
1366           Сохраняются замечания по функции beltECBStepE().
1367
1368       Аргументы
1369           buf шифртекст / открытый текст
1370           count число октетов текста
1371           state состояние
1372
1373   void beltECBStepE (void * buf, size_t count, void * state)
1374       Буфер [count]buf зашифровывается в режиме ECB на ключе, размещенном в
1375       state.
1376
1377       Предусловие
1378           count >= 16.
1379
1380       Ожидается
1381           beltECBStart() < beltECBStepE()*.
1382
1383       Прим.
1384           К функции можно обратиться несколько раз, передавая buf из полных
1385           блоков. Неполный блок можно передать только при последнем
1386           обращении. В этом случае выполняется 'кража' блока (ciphertext
1387           stealing, CTS).
1388
1389           При организации последовательных обращений к функции следует
1390           учитывать, что буфер buf должен содержать не менее одного блока.
1391           Например для зашифрования 33 октетов можно зашифровать сначала 16
1392           октетов, а затем еще 17. Но нельзя зашифровать сначала 32 октета, а
1393           затем еще 1.
1394
1395       Аргументы
1396           buf открытый текст / шифртекст
1397           count число октетов текста
1398           state состояние
1399
1400   size_t beltFMT_keep (u32 mod, size_t count)
1401       Возвращается длина состояния (в октетах) функций шифрования при
1402       обработке слов длины count в алфавите {0, 1,..., mod - 1}.
1403
1404       Предусловие
1405           2 <= mod && mod <= 65536.
1406
1407           2 <= count && count <= 600.
1408
1409       Возвращает
1410           Длина состояния.
1411
1412       Аргументы
1413           mod размер алфавита
1414           count длина слов
1415
1416   err_t beltFMTDecr (u16 dest[], u32 mod, const u16 src[], size_t count,
1417       const octet key[], size_t len, const octet iv[16])
1418       Строка [count]src в алфавите {0, 1,..., mod - 1} расшифровывается на
1419       ключе [len]key и синхропосылке iv. Результат расшифрования размещается
1420       в буфере [count]dest. При нулевом указателе iv используется нулевая
1421       синхропосылка.
1422
1423       Ожидается [ERR_BAD_INPUT]
1424
1425
1426           • 2 <= mod && mod <= 65536;
1427
1428           • 2 <= count;
1429
1430           • len == 16 || len == 24 || len == 32;
1431
1432           • если iv ненулевой, то буферы iv и [count]dest не пересекаются.
1433
1434       Ожидается [ERR_NOT_IMPLEMENTED]
1435           count <= 600.
1436
1437       Ожидается
1438           Символы src принадлежат алфавиту {0, 1,..., mod - 1}.
1439
1440       Возвращает
1441           ERR_OK, если расшифрование успешно выполнено, и код ошибки в
1442           противном случае.
1443
1444       Прим.
1445           Все буферы, кроме iv и [count]dest, могут пересекаться.
1446
1447       Аргументы
1448           dest открытый текст
1449           mod размер алфавита
1450           src шифртекст
1451           count длина шифртекста / открытого текста
1452           key ключ
1453           len длина key в октетах
1454           iv синхропосылка
1455
1456   err_t beltFMTEncr (u16 dest[], u32 mod, const u16 src[], size_t count,
1457       const octet key[], size_t len, const octet iv[16])
1458       Строка [count]src в алфавите {0, 1,..., mod - 1} зашифровывается на
1459       ключе [len]key и синхропосылке iv. Результат зашифрования размещается в
1460       буфере [count]dest. При нулевом указателе iv используется нулевая
1461       синхропосылка.
1462
1463       Ожидается [ERR_BAD_INPUT]
1464
1465
1466           • 2 <= mod && mod <= 65536;
1467
1468           • 2 <= count;
1469
1470           • len == 16 || len == 24 || len == 32;
1471
1472           • если iv ненулевой, то буферы iv и [count]dest не пересекаются.
1473
1474       Ожидается [ERR_NOT_IMPLEMENTED]
1475           count <= 600.
1476
1477       Ожидается
1478           Символы src принадлежат алфавиту {0, 1,..., mod - 1}.
1479
1480       Возвращает
1481           ERR_OK, если зашифрование успешно выполнено, и код ошибки в
1482           противном случае.
1483
1484       Прим.
1485           Все буферы, кроме iv и [count]dest, могут пересекаться.
1486
1487       Аргументы
1488           dest шифртекст
1489           mod размер алфавита
1490           src открытый текст
1491           count длина открытого текста / шифртекста
1492           key ключ
1493           len длина key в октетах
1494           iv синхропосылка
1495
1496   void beltFMTStart (void * state, u32 mod, size_t count, const octet key[],
1497       size_t len)
1498       По размеру алфавита mod, длине слов count и ключу [len]key в state
1499       формируются структуры данных, необходимые для шифрования в режиме FMT.
1500
1501       Предусловие
1502           2 <= mod && mod <= 65536.
1503
1504           2 <= count && count <= 600.
1505
1506           len == 16 || len == 24 || len == 32.
1507
1508           По адресу state зарезервировано beltFMT_keep() октетов.
1509
1510       Прим.
1511           Буферы key и state могут пересекаться.
1512
1513       Аргументы
1514           state состояние
1515           mod размер алфавита
1516           count длина слов
1517           key ключ
1518           len длина key в октетах
1519
1520   void beltFMTStepD (u16 buf[], const octet iv[16], void * state)
1521       Строка [count]buf расшифровывается на ключе, размещенном в state, и
1522       синхропосылке iv. Здесь count -- длина строки, предварительно
1523       установленная в state функцией beltFMTStart(). Результат расшифрования
1524       сохраняется в buf.
1525
1526       Ожидается
1527           beltFMTStart() < beltFMTStepD()*.
1528
1529       Ожидается
1530           Символы строки принадлежат алфавиту {0,1,..., mod - 1}, размер mod
1531           которого предварительно установлен в state функцией beltFMTStart().
1532
1533       Прим.
1534           При нулевом указателе iv используется нулевая синхропосылка.
1535
1536       Аргументы
1537           buf шифртекст / открытый текст
1538           iv синхропосылка
1539           state состояние
1540
1541   void beltFMTStepE (u16 buf[], const octet iv[16], void * state)
1542       Строка [count]buf зашифровывается на ключе, размещенном в state, и
1543       синхропосылке iv. Здесь count -- длина строки, предварительно
1544       установленная в state функцией beltFMTStart(). Результат зашифрования
1545       сохраняется в buf.
1546
1547       Ожидается
1548           beltFMTStart() < beltFMTStepE()*.
1549
1550       Ожидается
1551           Символы строки принадлежат алфавиту {0,1,..., mod - 1}, размер mod
1552           которого предварительно установлен в state функцией beltFMTStart().
1553
1554       Прим.
1555           При нулевом указателе iv используется нулевая синхропосылка.
1556
1557       Аргументы
1558           buf открытый текст / шифртекст
1559           iv синхропосылка
1560           state состояние
1561
1562   const octet * beltH ()
1563       Возвращается таблица значений блока подстановки H.
1564
1565       Возвращает
1566           Указатель на таблицу H.
1567
1568       Прим.
1569           Таблица используется для формирования начальных значений переменных
1570           некоторых алгоритмов, а также в тестовых примерах.
1571
1572   err_t beltHash (octet hash[32], const void * src, size_t count)
1573       Определяется хэш-значение hash буфера [count]src.
1574
1575       Возвращает
1576           ERR_OK, если хэширование успешно завершено, и код ошибки в
1577           противном случае.
1578
1579       Прим.
1580           Буферы могут пересекаться.
1581
1582       Аргументы
1583           hash хэш-значение
1584           src данные
1585           count число октетов данных
1586
1587   size_t beltHash_keep ()
1588       Возвращается длина состояния (в октетах) функции хэширования.
1589
1590       Возвращает
1591           Длина состояния.
1592
1593   void beltHashStart (void * state)
1594       В state формируются структуры данных, необходимые для хэширования.
1595
1596       Предусловие
1597           По адресу state зарезервировано beltHash_keep() октетов.
1598
1599       Аргументы
1600           state состояние
1601
1602   void beltHashStepG (octet hash[32], void * state)
1603       Определяется окончательное хэш-значение hash всех данных, обработанных
1604       до этого функцией beltHashStepH().
1605
1606       Ожидается
1607           (beltHashStepH()* < beltHashStepG())*.
1608
1609       Прим.
1610           Если продолжение хэширования не предполагается, то буферы hash и
1611           state могут пересекаться.
1612
1613       Аргументы
1614           hash хэш-значение
1615           state состояние
1616
1617   void beltHashStepG2 (octet hash[], size_t hash_len, void * state)
1618       Определяется окончательное хэш-значение [hash_len]hash всех данных,
1619       обработанных до этого функцией beltHashStepH(). Возвращаемое
1620       хэш-значение состоит из первых hash_len октетов полного хэш-значения.
1621
1622       Предусловие
1623           hash_len <= 32.
1624
1625       Ожидается
1626           (beltHashStepH()* < beltHashStepG2())*.
1627
1628       Прим.
1629           Если продолжение хэширования не предполагается, то буферы hash и
1630           state могут пересекаться.
1631
1632       Аргументы
1633           hash хэш-значение
1634           hash_len длина hash
1635           state состояние
1636
1637   void beltHashStepH (const void * buf, size_t count, void * state)
1638       Текущее хэш-значение, размещенное в state, пересчитывается с учетом
1639       нового фрагмента данных [count]buf.
1640
1641       Ожидается
1642           beltHashStart() < beltHashStepH()*.
1643
1644       Аргументы
1645           buf данные
1646           count число октетов данных
1647           state состояние
1648
1649   bool_t beltHashStepV (const octet hash[32], void * state)
1650       Проверяется, что окончательное хэш-значение всех данных, обработанных
1651       до этого функцией beltHashStepH(), совпадает с hash.
1652
1653       Ожидается
1654           (beltHashStepH()* < beltHashStepV())*.
1655
1656       Аргументы
1657           hash контрольные хэш-значение
1658           state состояние
1659
1660   bool_t beltHashStepV2 (const octet hash[], size_t hash_len, void * state)
1661       Проверяется, что первые hash_len октетов окончательного хэш-значения
1662       всех данных, обработанных до этого функцией beltHashStepH(), совпадают
1663       с [hash_len]hash.
1664
1665       Предусловие
1666           hash_len <= 32.
1667
1668       Ожидается
1669           (beltHashStepH()* < beltHashStepV2())*.
1670
1671       Аргументы
1672           hash контрольное хэш-значение
1673           hash_len длина hash
1674           state состояние
1675
1676   err_t beltHMAC (octet mac[32], const void * src, size_t count, const octet
1677       key[], size_t len)
1678       На ключе [len]key определяется имитовставка mac буфера [count]src.
1679
1680       Возвращает
1681           ERR_OK, если имитовставка успешно вычислена, и код ошибки в
1682           противном случае.
1683
1684       Прим.
1685           Буферы могут пересекаться.
1686
1687       Аргументы
1688           mac имитовставка
1689           src данные
1690           count число октетов данных
1691           key ключ
1692           len длина ключа
1693
1694   size_t beltHMAC_keep ()
1695       Возвращается длина состояния (в октетах) функций имитозащиты в режиме
1696       MAC.
1697
1698       Возвращает
1699           Длина состояния.
1700
1701   void beltHMACStart (void * state, const octet key[], size_t len)
1702       По ключу [len]key в state формируются структуры данных, необходимые для
1703       имитозащиты в режиме HMAC.
1704
1705       Предусловие
1706           По адресу state зарезервировано beltHMAC_keep() октетов.
1707
1708       Прим.
1709           Рекомендуется использовать ключ из 32 октетов.
1710
1711       Аргументы
1712           state состояние
1713           key ключ
1714           len длина ключа в октетах
1715
1716   void beltHMACStepA (const void * buf, size_t count, void * state)
1717       Текущая имитовставка, размещенная в state, пересчитывается с учетом
1718       нового фрагмента данных [count]buf. Пересчет выполняется на ключе,
1719       также размещенном в state.
1720
1721       Ожидается
1722           beltHMACStart() < beltHMACStepA()*.
1723
1724       Аргументы
1725           buf данные
1726           count число октетов данных
1727           state состояние
1728
1729   void beltHMACStepG (octet mac[32], void * state)
1730       Определяется окончательная имитовставка mac всех данных, обработанных
1731       до этого функцией beltHMACStepA().
1732
1733       Ожидается
1734           (beltHMACStepA()* < beltHMACStepG())*.
1735
1736       Аргументы
1737           mac имитовставка
1738           state состояние
1739
1740   void beltHMACStepG2 (octet mac[], size_t mac_len, void * state)
1741       Определяется окончательная имитовставка [mac_len]mac всех данных,
1742       обработанных до этого функцией beltHMACStepA(). Возвращаемая
1743       имитовставка состоит из первых mac_len октетов полной имитовставки.
1744
1745       Предусловие
1746           mac_len <= 32.
1747
1748       Ожидается
1749           (beltHMACStepA()* < beltHMACStepG2())*.
1750
1751       Прим.
1752           Если продолжение имитозащиты не предполагается, то буферы mac и
1753           state могут пересекаться.
1754
1755       Аргументы
1756           mac имитовставка
1757           mac_len длина имитовставки
1758           state состояние
1759
1760   bool_t beltHMACStepV (const octet mac[32], void * state)
1761       Проверяется, что окончательная имитовставка всех данных, обработанных
1762       до этого функцией beltHMACStepA(), совпадает с mac.
1763
1764       Ожидается
1765           (beltHMACStepA()* < beltHMACStepV())*.
1766
1767       Аргументы
1768           mac контрольная имитовставка
1769           state состояние
1770
1771   bool_t beltHMACStepV2 (const octet mac[], size_t mac_len, void * state)
1772       Проверяется, что первые mac_len октетов окончательной имитовставки всех
1773       данных, обработанных до этого функцией beltHMACStepA(), совпадают с
1774       [mac_len]mac.
1775
1776       Предусловие
1777           mac_len <= 32.
1778
1779       Ожидается
1780           (beltHMACStepA()* < beltHMACStepV2())*.
1781
1782       Аргументы
1783           mac контрольная имитовставка
1784           mac_len длина mac
1785           state состояние
1786
1787   void beltKeyExpand (octet key_[32], const octet key[], size_t len)
1788       Ключ [len]key расширяется до ключа key_.
1789
1790       Предусловие
1791           len == 16 || len == 24 || len == 32.
1792
1793       Прим.
1794           Буферы key и key_ могут пересекаться.
1795
1796       Аргументы
1797           key_ расширенный ключ
1798           key первоначальный ключ
1799           len длина key в октетах
1800
1801   void beltKeyExpand2 (u32 key_[8], const octet key[], size_t len)
1802       Ключ [len]key форматируется и расширяется до ключа key_.
1803
1804       Предусловие
1805           len == 16 || len == 24 || len == 32.
1806
1807       Прим.
1808           Буферы key и key_ могут пересекаться.
1809
1810       Аргументы
1811           key_ расширенный форматированный ключ
1812           key первоначальный ключ
1813           len длина ключа в октетах
1814
1815   err_t beltKRP (octet dest[], size_t m, const octet src[], size_t n, const
1816       octet level[12], const octet header[16])
1817       По ключу [n]src, который имеет уровень level, строится ключ [m]dest,
1818       который имеет заголовок header.
1819
1820       Ожидается [ERR_BAD_INPUT]
1821
1822
1823           • n == 16 || n == 24 || n == 32;
1824
1825           • m == 16 || m == 24 || m == 32;
1826
1827           • m <= n.
1828
1829       Возвращает
1830           ERR_OK, если преобразование успешно завершено, и код ошибки в
1831           противном случае.
1832
1833       Прим.
1834           Буферы могут пересекаться.
1835
1836       Аргументы
1837           dest преобразованный ключ
1838           m длина dest в октетах
1839           src исходный ключ
1840           n длина src в октетах
1841           level уровень ключа src
1842           header заголовок ключа dest
1843
1844   size_t beltKRP_keep ()
1845       Возвращается длина состояния (в октетах) функций преобразования ключа.
1846
1847       Возвращает
1848           Длина состояния.
1849
1850   void beltKRPStart (void * state, const octet key[], size_t len, const octet
1851       level[12])
1852       По ключу [len]key, который принадлежит уровню level, в state
1853       формируются структуры данных, необходимые для преобразования этого
1854       ключа.
1855
1856       Предусловие
1857           len == 16 || len == 24 || len == 32.
1858
1859           По адресу state зарезервировано beltKRP_keep() октетов.
1860
1861       Прим.
1862           Буферы key и state могут пересекаться.
1863
1864       Аргументы
1865           state состояние
1866           key ключ
1867           len длина ключа в октетах
1868           level уровень
1869
1870   void beltKRPStepG (octet key_[], size_t key_len, const octet header[16],
1871       void * state)
1872       Ключ [len]key, размещенный в state функцией beltKRPStart(),
1873       преобразуется в ключ [key_len]key_, который имеет заголовок header.
1874
1875       Предусловие
1876           (key_len == 16 || key_len == 24 || key_len == 32) && key_len <=
1877           len.
1878
1879       Ожидается
1880           beltKRPStart() < beltKRPStepG()*.
1881
1882       Аргументы
1883           key_ преобразованный ключ
1884           key_len длина key в октетах
1885           header заголовок key_
1886           state состояние
1887
1888   err_t beltKWPUnwrap (octet dest[], const octet src[], size_t count, const
1889       octet header[16], const octet key[], size_t len)
1890       На ключе [len]key снимается защита с ключа [count]src. В результате
1891       определяется первоначальный ключ [count - 16]dest с заголовком header.
1892
1893       Ожидается [ERR_BAD_INPUT]
1894
1895
1896           • len == 16 || len == 24 || len == 32;
1897
1898           • count >= 32.
1899
1900       Возвращает
1901           ERR_OK, если защита успешно снята, и код ошибки в противном случае.
1902
1903       Прим.
1904           При нулевом указателе header используется нулевой заголовок.
1905
1906           Буферы могут пересекаться.
1907
1908       Аргументы
1909           dest ключ
1910           src защищенный ключ
1911           count длина src в октетах
1912           header заголовок ключа
1913           key ключ защиты
1914           len длина key в октетах
1915
1916   err_t beltKWPWrap (octet dest[], const octet src[], size_t count, const
1917       octet header[16], const octet key[], size_t len)
1918       На ключе [len]key устанавливается защита ключа [count]src с заголовком
1919       header. В результате определяется защищенный ключ [count + 16]dest.
1920
1921       Ожидается [ERR_BAD_INPUT]
1922
1923
1924           • len == 16 || len == 24 || len == 32;
1925
1926           • count >= 16.
1927
1928       Возвращает
1929           ERR_OK, если защита успешно установлена, и код ошибки в противном
1930           случае.
1931
1932       Прим.
1933           При нулевом указателе header используется нулевой заголовок.
1934
1935           Буферы могут пересекаться.
1936
1937       Аргументы
1938           dest защищенный ключ
1939           src защищаемый ключ
1940           count длина src в октетах
1941           header заголовок ключа
1942           key ключ защиты
1943           len длина key в октетах
1944
1945   err_t beltMAC (octet mac[8], const void * src, size_t count, const octet
1946       key[], size_t len)
1947       На ключе [len]key определяется имитовставка mac буфера [count]src.
1948
1949       Ожидается [ERR_BAD_INPUT]
1950           len == 16 || len == 24 || len == 32.
1951
1952       Возвращает
1953           ERR_OK, если имитовставка успешно вычислена, и код ошибки в
1954           противном случае.
1955
1956       Прим.
1957           Буферы могут пересекаться.
1958
1959       Аргументы
1960           mac имитовставка
1961           src данные
1962           count число октетов данных
1963           key ключ
1964           len длина ключа
1965
1966   size_t beltMAC_keep ()
1967       Возвращается длина состояния (в октетах) функций имитозащиты в режиме
1968       MAC.
1969
1970       Возвращает
1971           Длина состояния.
1972
1973   void beltMACStart (void * state, const octet key[], size_t len)
1974       По ключу [len]key в state формируются структуры данных, необходимые для
1975       имитозащиты в режиме MAC.
1976
1977       Предусловие
1978           len == 16 || len == 24 || len == 32.
1979
1980           По адресу state зарезервировано beltMAC_keep() октетов.
1981
1982       Прим.
1983           Буферы key и state могут пересекаться.
1984
1985       Аргументы
1986           state состояние
1987           key ключ
1988           len длина ключа в октетах
1989
1990   void beltMACStepA (const void * buf, size_t count, void * state)
1991       Текущая имитовставка, размещенная в state, пересчитывается с учетом
1992       нового фрагмента данных [count]buf. Пересчет выполняется на ключе,
1993       также размещенном в state.
1994
1995       Ожидается
1996           beltMACStart() < beltMACStepA()*.
1997
1998       Аргументы
1999           buf данные
2000           count число октетов данных
2001           state состояние
2002
2003   void beltMACStepG (octet mac[8], void * state)
2004       Определяется окончательная имитовставка mac всех данных, обработанных
2005       до этого функцией beltMACStepA().
2006
2007       Ожидается
2008           (beltMACStepA()* < beltMACStepG())*.
2009
2010       Прим.
2011           Если продолжение имитозащиты не предполагается, то буферы mac и
2012           state могут пересекаться.
2013
2014       Аргументы
2015           mac имитовставка
2016           state состояние
2017
2018   void beltMACStepG2 (octet mac[], size_t mac_len, void * state)
2019       Определяется окончательная имитовставка [mac_len]mac всех данных,
2020       обработанных до этого функцией beltMACStepA(). Возвращаемая
2021       имитовставка состоит из первых mac_len октетов полной имитовставки.
2022
2023       Предусловие
2024           mac_len <= 8.
2025
2026       Ожидается
2027           (beltMACStepA()* < beltMACStepG2())*.
2028
2029       Прим.
2030           Если продолжение имитозащиты не предполагается, то буферы mac и
2031           state могут пересекаться.
2032
2033       Аргументы
2034           mac имитовставка
2035           mac_len длина имитовставки
2036           state состояние
2037
2038   bool_t beltMACStepV (const octet mac[8], void * state)
2039       Проверяется, что окончательная имитовставка всех данных, обработанных
2040       до этого функцией beltMACStepA(), совпадает с mac.
2041
2042       Ожидается
2043           (beltMACStepA()* < beltMACStepV())*.
2044
2045       Возвращает
2046           Признак успеха.
2047
2048       Аргументы
2049           mac контрольная имитовставка
2050           state состояние
2051
2052   bool_t beltMACStepV2 (const octet mac[], size_t mac_len, void * state)
2053       Проверяется, что первые mac_len октетов окончательной имитовставки всех
2054       данных, обработанных до этого функцией beltMACStepA(), совпадают с
2055       [mac_len]mac.
2056
2057       Предусловие
2058           mac_len <= 8.
2059
2060       Ожидается
2061           (beltMACStepA()* < beltMACStepV2())*.
2062
2063       Аргументы
2064           mac контрольная имитовставка
2065           mac_len длина mac
2066           state состояние
2067
2068   err_t beltPBKDF2 (octet key[32], const octet pwd[], size_t pwd_len, size_t
2069       iter, const octet salt[], size_t salt_len)
2070       По паролю [pwd_len]pwd строится ключ key. Для усложнения словарных атак
2071       используется синхропосылка [salt_len]salt. Для усложнения перебора
2072       паролей ключ пересчитывается iter > 0 раз.
2073
2074       Ожидается [ERR_BAD_INPUT]
2075           iter != 0.
2076
2077       Возвращает
2078           ERR_OK, если ключ успешно построен, и код ошибки в противном
2079           случае.
2080
2081       Прим.
2082           Рекомендуется использовать iter >= 10000 и salt_len >= 8.
2083
2084           Реализована упрощенная редакция алгоритма PBKDF2 (Password-Based
2085           Key Derivation Function version 2), определенного в PKCS#5.
2086           Редакция описана в СТБ 34.101.45 (приложение E).
2087
2088       Аргументы
2089           key ключ
2090           pwd пароль
2091           pwd_len длина пароля (в октетах)
2092           iter число итераций
2093           salt синхропосылка ('соль')
2094           salt_len длина синхропосылки (в октетах)
2095
2096   size_t beltSDE_keep ()
2097       Возвращается длина состояния (в октетах) функций шифрования в режиме
2098       SDE.
2099
2100       Возвращает
2101           Длина состояние.
2102
2103   err_t beltSDEDecr (void * dest, const void * src, size_t count, const octet
2104       key[], size_t len, const octet iv[16])
2105       Сектор [count]src расшифровывается на ключе [len]key с использованием
2106       синхропосылки iv. Результат расшифрования размещается в буфере
2107       [count]dest.
2108
2109       Ожидается [ERR_BAD_INPUT]
2110
2111
2112           • len == 16 || len == 24 || len == 32;
2113
2114           • count % 16 == 0 && count >= 32.
2115
2116       Возвращает
2117           ERR_OK, если данные успешно расшифрованы, и код ошибки в противном
2118           случае.
2119
2120       Прим.
2121           Буферы могут пересекаться.
2122
2123       Аргументы
2124           dest открытый текст
2125           src шифртекст
2126           count число октетов текста
2127           key ключ
2128           len длина ключа
2129           iv синхропосылка
2130
2131   err_t beltSDEEncr (void * dest, const void * src, size_t count, const octet
2132       key[], size_t len, const octet iv[16])
2133       Сектор [count]src зашифровывается на ключе [len]key с использованием
2134       синхропосылки iv. Результат зашифрования размещается в буфере
2135       [count]dest.
2136
2137       Ожидается [ERR_BAD_INPUT]
2138
2139
2140           • len == 16 || len == 24 || len == 32;
2141
2142           • count % 16 == 0 && count >= 32.
2143
2144       Возвращает
2145           ERR_OK, если данные успешно зашифрованы, и код ошибки в противном
2146           случае.
2147
2148       Прим.
2149           Буферы могут пересекаться.
2150
2151       Аргументы
2152           dest шифртекст
2153           src открытый текст
2154           count число октетов текста
2155           key ключ
2156           len длина ключа
2157           iv синхропосылка
2158
2159   void beltSDEStart (void * state, const octet key[], size_t len)
2160       По ключу [len]key и синхропосылке iv в state формируются структуры
2161       данных, необходимые для шифрования в режиме SDE.
2162
2163       Предусловие
2164           len == 16 || len == 24 || len == 32.
2165
2166           По адресу state зарезервировано beltSDE_keep() октетов.
2167
2168       Прим.
2169           Буферы key и state могут пересекаться.
2170
2171       Аргументы
2172           state состояние
2173           key ключ
2174           len длина ключа в октетах
2175
2176   void beltSDEStepD (void * buf, size_t count, const octet iv[16], void *
2177       state)
2178       Сектор [count]buf расшифровывается в режиме SDE на ключе, размещенном в
2179       state, и синхропосылке iv.
2180
2181       Предусловие
2182           count % 16 == 0 && count >= 32.
2183
2184       Ожидается
2185           beltSDEStart() < beltSDEStepD()*.
2186
2187       Аргументы
2188           buf шифртекст / открытый текст
2189           count число октетов текста
2190           iv синхропосылка
2191           state состояние
2192
2193   void beltSDEStepE (void * buf, size_t count, const octet iv[16], void *
2194       state)
2195       Сектор [count]buf зашифровывается в режиме SDE на ключе, размещенном в
2196       state, и синхропосылке iv.
2197
2198       Предусловие
2199           count % 16 == 0 && count >= 32.
2200
2201       Ожидается
2202           beltSDEStart() < beltSDEStepE()*.
2203
2204       Аргументы
2205           buf открытый текст / шифртекст
2206           count число октетов текста
2207           iv синхропосылка
2208           state состояние
2209
2210   size_t beltWBL_keep ()
2211       Возвращается длина состояния (в октетах) функций WBL.
2212
2213       Возвращает
2214           Длина состояния.
2215
2216   void beltWBLStart (void * state, const octet key[], size_t len)
2217       По ключу [len]key в state формируются структуры данных, необходимые для
2218       шифрования в режиме WBL.
2219
2220       Предусловие
2221           len == 16 || len == 24 || len == 32.
2222
2223           По адресу state зарезервировано beltWBL_keep() октетов.
2224
2225       Прим.
2226           Буферы key и state могут пересекаться.
2227
2228       Аргументы
2229           state состояние
2230           key ключ
2231           len длина ключа в октетах
2232
2233   void beltWBLStepD (void * buf, size_t count, void * state)
2234       Буфер [count]buf расшифровывается на ключе, размещенном в state.
2235       Результат расшифрования сохраняется в buf.
2236
2237       Предусловие
2238           count >= 32.
2239
2240       Ожидается
2241           beltWBLStart() < beltWBLStepD()*.
2242
2243       Аргументы
2244           buf шифртекст / открытый текст
2245           count число октетов данных
2246           state состояние
2247
2248   void beltWBLStepD2 (void * buf1, void * buf2, size_t count, void * state)
2249       Буфер [count - 16]buf1 || [16]buf2 расшифровывается в режиме WBL на
2250       ключе, размещенном в state. Результат расшифрования сохраняется в buf1
2251       || buf2.
2252
2253       Предусловие
2254           count >= 32.
2255
2256           Буферы buf1 и buf2 не пересекаются.
2257
2258       Ожидается
2259           beltWBLStart() < beltWBLStepD2()*.
2260
2261       Прим.
2262           С помощью beltWBLStepD2() снятие защиты с ключа в механизме KWP
2263           может быть организовано по следующей схеме:
2264
2265           • первая часть защищенного ключа помещается в buf1;
2266
2267           • вторая часть защищенного ключа помещается в buf2;
2268
2269           • применяется beltWBLStepD2();
2270
2271           • если buf2 совпадает с заголовком ключа, то buf1 принимается как
2272             ключ.
2273
2274       Аргументы
2275           buf1 первая часть шифртекста / открытого текста
2276           buf2 вторая часть шифртекста / открытого текста
2277           count длина текста
2278           state состояние
2279
2280   void beltWBLStepE (void * buf, size_t count, void * state)
2281       Буфер [count]buf зашифровывается на ключе, размещенном в state.
2282       Результат зашифрования сохраняется в buf.
2283
2284       Предусловие
2285           count >= 32.
2286
2287       Ожидается
2288           beltWBLStart() < beltWBLStepE()*.
2289
2290       Аргументы
2291           buf открытый текст / шифртекст
2292           count число октетов текста
2293           state состояние
2294
2295   void beltWBLStepR (void * buf, size_t count, void * state)
2296       Буфер [count]buf зашифровывается на ключе, размещенном в state.
2297       Результат зашифрования сохраняется в buf. При первом обращении счетчик
2298       i меняется от 1 до 2n, при втором --- от 2n + 1 до 4n, и так далее.
2299
2300       Предусловие
2301           count >= 32.
2302
2303       Ожидается
2304           beltWBLStart() < beltWBLStepR()*.
2305
2306       Прим.
2307           Многократное зашифрование в режиме WBL используется для генерации
2308           одноразового ключа в СТБ 34.101.45. Поэтому функции назначен
2309           суффикс R.
2310
2311       Аргументы
2312           buf открытый текст / шифртекст
2313           count число октетов текста
2314           state состояние
2315

Автор

2317       Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
2318
2319
2320
2321Библиотека Bee2             Ср 19 Июл 2023 00:00:00                  belt.h(3)
Impressum