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

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

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

Макросы

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

Функции

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

Автор

2319       Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
2320
2321
2322
2323Библиотека Bee2                 Пт 23 Июн 2023                       belt.h(3)
Impressum