belt.h - Man Page

Алгоритмы СТБ 34.101.31 (belt)

Synopsis

#include 'bee2/defs.h'

Макросы

#define beltCTRStepD   beltCTRStepE
Расшифрование фрагмента в режиме CTR.

#define beltKWP_keep   beltWBL_keep
Низкоуровневые функции KWP.

Функции

const octet * beltH ()
Блок подстановки H.
void beltKeyExpand (octet key_[32], const octet key[], size_t len)
Расширение ключа
void beltKeyExpand2 (u32 key_[8], const octet key[], size_t len)
Расширение и форматирование ключа
void beltBlockEncr (octet block[16], const u32 key[8])
Зашифрование блока
void beltBlockEncr2 (u32 block[4], const u32 key[8])
Зашифрование форматированного блока
void beltBlockEncr3 (u32 *a, u32 *b, u32 *c, u32 *d, const u32 key[8])
Зашифрование блока из четверки слов
void beltBlockDecr (octet block[16], const u32 key[8])
Расшифрование блока
void beltBlockDecr2 (u32 block[4], const u32 key[8])
Расшифрование форматированного блока
void beltBlockDecr3 (u32 *a, u32 *b, u32 *c, u32 *d, const u32 key[8])
Расшифрование блока из четверки слов
size_t beltWBL_keep ()
Длина состояния функций WBL.
void beltWBLStart (void *state, const octet key[], size_t len)
Инициализация функций WBL.
void beltWBLStepE (void *buf, size_t count, void *state)
Зашифрование в режиме WBL.
void beltWBLStepD (void *buf, size_t count, void *state)
Расшифрование в режиме WBL.
void beltWBLStepD2 (void *buf1, void *buf2, size_t count, void *state)
Расшифрование в режиме WBL с двумя частями
void beltWBLStepR (void *buf, size_t count, void *state)
Продолженное зашифрование в режиме WBL.
size_t beltCompr_deep ()
Глубина стека функций сжатия
void beltCompr (u32 h[8], const u32 X[8], void *stack)
Сжатие форматированных данных
void beltCompr2 (u32 s[4], u32 h[8], const u32 X[8], void *stack)
Сжатие форматированных данных со сложением
size_t beltECB_keep ()
Длина состояния функций ECB.
void beltECBStart (void *state, const octet key[], size_t len)
Инициализация шифрования в режиме ECB.
void beltECBStepE (void *buf, size_t count, void *state)
Зашифрование фрагмента в режиме ECB.
void beltECBStepD (void *buf, size_t count, void *state)
Расшифрование в режиме ECB.
err_t beltECBEncr (void *dest, const void *src, size_t count, const octet key[], size_t len)
Зашифрование в режиме ECB.
err_t beltECBDecr (void *dest, const void *src, size_t count, const octet key[], size_t len)
Расшифрование в режиме ECB.
size_t beltCBC_keep ()
Длина состояния функций CBC.
void beltCBCStart (void *state, const octet key[], size_t len, const octet iv[16])
Инициализация шифрования в режиме CBC.
void beltCBCStepE (void *buf, size_t count, void *state)
Зашифрование в режиме CBC.
void beltCBCStepD (void *buf, size_t count, void *state)
Расшифрование в режиме CBC.
err_t beltCBCEncr (void *dest, const void *src, size_t count, const octet key[], size_t len, const octet iv[16])
Зашифрование в режиме CBC.
err_t beltCBCDecr (void *dest, const void *src, size_t count, const octet key[], size_t len, const octet iv[16])
Расшифрование в режиме CBC.
size_t beltCFB_keep ()
Длина состояния функций CFB.
void beltCFBStart (void *state, const octet key[], size_t len, const octet iv[16])
Инициализация шифрования в режиме CFB.
void beltCFBStepE (void *buf, size_t count, void *state)
Зашифрование в режиме CFB.
void beltCFBStepD (void *buf, size_t count, void *state)
Расшифрование в режиме CFB.
err_t beltCFBEncr (void *dest, const void *src, size_t count, const octet key[], size_t len, const octet iv[16])
Зашифрование в режиме CFB.
err_t beltCFBDecr (void *dest, const void *src, size_t count, const octet key[], size_t len, const octet iv[16])
Расшифрование в режиме CFB.
size_t beltCTR_keep ()
Длина состояния функций CTR.
void beltCTRStart (void *state, const octet key[], size_t len, const octet iv[16])
Инициализация шифрования в режиме CTR.
void beltCTRStepE (void *buf, size_t count, void *state)
Зашифрование фрагмента в режиме CTR.
err_t beltCTR (void *dest, const void *src, size_t count, const octet key[], size_t len, const octet iv[16])
Шифрование в режиме CTR.
size_t beltMAC_keep ()
Длина состояния функций MAC.
void beltMACStart (void *state, const octet key[], size_t len)
Инициализация функций MAC.
void beltMACStepA (const void *buf, size_t count, void *state)
Имитозащита фрагмента данных в режиме MAC.
void beltMACStepG (octet mac[8], void *state)
Определение имитовставки в режиме MAC.
void beltMACStepG2 (octet mac[], size_t mac_len, void *state)
Определение усеченной имитовставки в режиме MAC.
bool_t beltMACStepV (const octet mac[8], void *state)
Проверка имитовставки в режиме MAC.
bool_t beltMACStepV2 (const octet mac[], size_t mac_len, void *state)
Проверка усеченной имитовставки
err_t beltMAC (octet mac[8], const void *src, size_t count, const octet key[], size_t len)
Имитозащита в режиме MAC.
size_t beltDWP_keep ()
Длина состояния функций DWP.
void beltDWPStart (void *state, const octet key[], size_t len, const octet iv[16])
Инициализация функций DWP.
void beltDWPStepE (void *buf, size_t count, void *state)
Зашифрование критического фрагмента в режиме DWP.
void beltDWPStepI (const void *buf, size_t count, void *state)
Имитозащита открытого фрагмента в режиме DWP.
void beltDWPStepA (const void *buf, size_t count, void *state)
Имитозащита критического фрагмента в режиме DWP.
void beltDWPStepG (octet mac[8], void *state)
Определение имитовставки в режиме DWP.
bool_t beltDWPStepV (const octet mac[8], void *state)
Проверка имитовставки в режиме DWP.
void beltDWPStepD (void *buf, size_t count, void *state)
Расшифрование критического фрагмента в режиме DWP.
err_t beltDWPWrap (void *dest, octet mac[8], const void *src1, size_t count1, const void *src2, size_t count2, const octet key[], size_t len, const octet iv[16])
Установка защиты в режиме DWP.
err_t beltDWPUnwrap (void *dest, const void *src1, size_t count1, const void *src2, size_t count2, const octet mac[8], const octet key[], size_t len, const octet iv[16])
Снятие защиты в режиме DWP.
size_t beltCHE_keep ()
Длина состояния функций CHE.
void beltCHEStart (void *state, const octet key[], size_t len, const octet iv[16])
Инициализация функций CHE.
void beltCHEStepE (void *buf, size_t count, void *state)
Зашифрование критического фрагмента в режиме CHE.
void beltCHEStepI (const void *buf, size_t count, void *state)
Имитозащита открытого фрагмента в режиме CHE.
void beltCHEStepA (const void *buf, size_t count, void *state)
Имитозащита критического фрагмента в режиме CHE.
void beltCHEStepG (octet mac[8], void *state)
Определение имитовставки в режиме CHE.
bool_t beltCHEStepV (const octet mac[8], void *state)
Проверка имитовставки в режиме CHE.
void beltCHEStepD (void *buf, size_t count, void *state)
Расшифрование критического фрагмента в режиме CHE.
err_t beltCHEWrap (void *dest, octet mac[8], const void *src1, size_t count1, const void *src2, size_t count2, const octet key[], size_t len, const octet iv[16])
Установка защиты в режиме CHE.
err_t beltCHEUnwrap (void *dest, const void *src1, size_t count1, const void *src2, size_t count2, const octet mac[8], const octet key[], size_t len, const octet iv[16])
Снятие защиты в режиме CHE.
err_t beltKWPWrap (octet dest[], const octet src[], size_t count, const octet header[16], const octet key[], size_t len)
Установка защиты в режиме KWP.
err_t beltKWPUnwrap (octet dest[], const octet src[], size_t count, const octet header[16], const octet key[], size_t len)
Снятие защиты в режиме KWP.
size_t beltHash_keep ()
Длина состояния функции хэширования
void beltHashStart (void *state)
Инициализация функции хэширования
void beltHashStepH (const void *buf, size_t count, void *state)
Хэширование фрагмента данных
void beltHashStepG (octet hash[32], void *state)
Определение хэш-значения
void beltHashStepG2 (octet hash[], size_t hash_len, void *state)
Определение усеченного хэш-значения
bool_t beltHashStepV (const octet hash[32], void *state)
Проверка хэш-значения
bool_t beltHashStepV2 (const octet hash[], size_t hash_len, void *state)
Проверка усеченного хэш-значения
err_t beltHash (octet hash[32], const void *src, size_t count)
Хэширование
size_t beltBDE_keep ()
Длина состояния функций BDE.
void beltBDEStart (void *state, const octet key[], size_t len, const octet iv[16])
Инициализация шифрования в режиме BDE.
void beltBDEStepE (void *buf, size_t count, void *state)
Шаг зашифрования в режиме BDE.
void beltBDEStepD (void *buf, size_t count, void *state)
Шаг расшифрования в режиме BDE.
err_t beltBDEEncr (void *dest, const void *src, size_t count, const octet key[], size_t len, const octet iv[16])
Зашифрование в режиме BDE.
err_t beltBDEDecr (void *dest, const void *src, size_t count, const octet key[], size_t len, const octet iv[16])
Расшифрование в режиме BDE.
size_t beltSDE_keep ()
Длина состояния функций SDE.
void beltSDEStart (void *state, const octet key[], size_t len)
Инициализация шифрования в режиме SDE.
void beltSDEStepE (void *buf, size_t count, const octet iv[16], void *state)
Шаг зашифрования в режиме SDE.
void beltSDEStepD (void *buf, size_t count, const octet iv[16], void *state)
Шаг расшифрования в режиме SDE.
err_t beltSDEEncr (void *dest, const void *src, size_t count, const octet key[], size_t len, const octet iv[16])
Зашифрование в режиме SDE.
err_t beltSDEDecr (void *dest, const void *src, size_t count, const octet key[], size_t len, const octet iv[16])
Расшифрование в режиме SDE.
size_t beltFMT_keep (u32 mod, size_t count)
Длина состояния функций FMT.
void beltFMTStart (void *state, u32 mod, size_t count, const octet key[], size_t len)
Инициализация шифрования в режиме FMT.
void beltFMTStepE (u16 buf[], const octet iv[16], void *state)
Шаг зашифрования в режиме FMT.
void beltFMTStepD (u16 buf[], const octet iv[16], void *state)
Шаг расшифрования в режиме FMT.
err_t beltFMTEncr (u16 dest[], u32 mod, const u16 src[], size_t count, const octet key[], size_t len, const octet iv[16])
Зашифрование в режиме FMT.
err_t beltFMTDecr (u16 dest[], u32 mod, const u16 src[], size_t count, const octet key[], size_t len, const octet iv[16])
Расшифрование в режиме FMT.
size_t beltKRP_keep ()
Длина состояния функций преобразования ключа
void beltKRPStart (void *state, const octet key[], size_t len, const octet level[12])
Инициализация функций преобразования ключа
void beltKRPStepG (octet key_[], size_t key_len, const octet header[16], void *state)
Тиражирование ключа
err_t beltKRP (octet dest[], size_t m, const octet src[], size_t n, const octet level[12], const octet header[16])
Преобразование ключа
size_t beltHMAC_keep ()
Длина состояния функций HMAC.
void beltHMACStart (void *state, const octet key[], size_t len)
Инициализация функций HMAC.
void beltHMACStepA (const void *buf, size_t count, void *state)
Имитозащита фрагмента данных в режиме HMAC.
void beltHMACStepG (octet mac[32], void *state)
Определение имитовставки в режиме HMAC.
void beltHMACStepG2 (octet mac[], size_t mac_len, void *state)
Определение усеченной имитовставки в режиме HMAC.
bool_t beltHMACStepV (const octet mac[32], void *state)
Проверка имитовставки в режиме HMAC.
bool_t beltHMACStepV2 (const octet mac[], size_t mac_len, void *state)
Проверка усеченной имитовставки
err_t beltHMAC (octet mac[32], const void *src, size_t count, const octet key[], size_t len)
Имитозащита в режиме HMAC.
err_t beltPBKDF2 (octet key[32], const octet pwd[], size_t pwd_len, size_t iter, const octet salt[], size_t salt_len)
Построение ключа по паролю

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

Реализованы алгоритмы СТБ 34.101.31 (belt). Дополнительно реализованы алгоритм ключезависимого хэширования (HMAC), основанный на функции хэширования belt-hash, и алгоритм построения ключа по паролю, основанный на HMAC[belt-hash]. Эти алгоритмы определены соответственно в СТБ 34.101.47 и в СТБ 34.101.45.

Основные алгоритмы объединяются в группы, которые определяют следующие криптографические механизмы:

Механизмы построены на базовых криптографических алгоритмах шифрования блока (Block), шифрования широкого блока (WBL) и сжатия (Compr). Механизм WBL определен в новой редакции СТБ 34.101.31 и представляет собой ядро KWP.

В механизмах ECB, CBC, CFB, CTR, MAC, DWP, CHE, KWP, BDE, SDE, FMT, KRP используется ключ из 32 октетов. Ключ такой длины может быть построен по ключу из 16 или 24 октетов с помощью функции beltExpand().

В механизме HMAC используется ключ произвольной длины. Рекомендуется использовать ключ из 32 октетов.

В механизмах ECB, CBC, CFB, CTR, MAC, DWP, CHE, KWP, BDE данные обрабатываются блоками по 16 октетов.

В механизмах Hash, HMAC данные обрабатываются блоками по 32 октета.

В механизме SDE обрабатываются секторы. Сектор состоит из двух или более полных 16-октетных блоков.

В механизме FMT обрабатываются строки длины count в алфавите ZZ_mod = {0, 1,..., mod - 1}. Здесь mod -- размер алфавита или модуль. Должны выполняться следующие ограничения:

На вход основных и вспомогательных функций данные и ключи подаются либо как void-массивы (неформатированные данные, по умолчанию), либо как массивы u32 (форматированные данные). Внутри функций неформатированные данные форматируются перед использованием. На платформах с соглашениями BIG_ENDIAN форматирование требует дополнительного времени.

Каждый механизм реализуется связкой из нескольких функций. Эти функции используют общее состояние, указатель на которое передается в функции как дополнительный параметр. Имеются функция определения объема памяти для состояния (_keep). Память для состояния готовит вызывающая программа и она же отвечает за очистку памяти.

Состояние можно копировать как фрагмент памяти.

В связке обязательно имеется функция инициализации механизма (Start) и одна или несколько функций обработки фрагментов данных и получения результатов обработки (StepX).

Логика суффиксов функций StepX:

Функции связки спроектированы как максимально простые и эффективные. В частности, в этих функциях не проверяются входные данные.

Каждая связка покрывается высокоуровневой функцией, которая обрабатывает все данные целиком. В высокоуровневых функциях есть проверка входных данных.

Механизмы MAC, Hash, HMAC, DWP, CHE реализованы с поддержкой принципа get-then-continue. Это означает, что после обработки определенной порции данных можно вызвать функцию типа StepG, а затем продолжить обработку.

Ожидается

Общее состояние связки функций не изменяется вне этих функций.

Ожидается [ERR_BAD_INPUT]

Все входные указатели высокоуровневых функций действительны.

Предусловие

Все входные указатели низкоуровневых функций действительны.

Если не оговорено противное, то входные буферы функций связки не пересекаются.

Макросы

#define beltCTRStepD   beltCTRStepE

Прим.

Зашифрование в режиме CTR не отличается от расшифрования.

#define beltKWP_keep   beltWBL_keep

Прим.

Повторяются функции механизма WBL.

Функции

size_t beltBDE_keep ()

Возвращается длина состояния (в октетах) функций шифрования в режиме BDE.

Возвращает

Длина состояние.

err_t beltBDEDecr (void * dest, const void * src, size_t count, const octet key[], size_t len, const octet iv[16])

Буфер [count]src расшифровывается на ключе [len]key с использованием синхропосылки iv. Результат расшифрования размещается в буфере [count]dest.

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • count % 16 == 0 && count >= 16.
Возвращает

ERR_OK, если данные успешно расшифрованы, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest открытый текст  
src шифртекст  
count число октетов текста  
key ключ  
len длина ключа  
iv синхропосылка

err_t beltBDEEncr (void * dest, const void * src, size_t count, const octet key[], size_t len, const octet iv[16])

Буфер [count]src зашифровывается на ключе [len]key с использованием синхропосылки iv. Результат зашифрования размещается в буфере [count]dest.

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • count % 16 == 0 && count >= 16.
Возвращает

ERR_OK, если данные успешно зашифрованы, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest шифртекст  
src открытый текст  
count число октетов текста  
key ключ  
len длина ключа  
iv синхропосылка

void beltBDEStart (void * state, const octet key[], size_t len, const octet iv[16])

По ключу [len]key и синхропосылке iv в state формируются структуры данных, необходимые для шифрования в режиме BDE.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltBDE_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах  
iv синхропосылка

void beltBDEStepD (void * buf, size_t count, void * state)

Буфер [count]buf расшифровывается в режиме BDE на ключе, размещенном в state.

Предусловие

count % 16 == 0.

Ожидается

beltBDEStart() < beltBDEStepD()*.

Аргументы

buf шифртекст / открытый текст  
count число октетов текста  
state состояние

void beltBDEStepE (void * buf, size_t count, void * state)

Буфер [count]buf зашифровывается в режиме BDE на ключе, размещенном в state.

Предусловие

count % 16 == 0.

Ожидается

beltBDEStart() < beltBDEStepE()*.

Аргументы

buf открытый текст / шифртекст  
count число октетов текста  
state состояние

void beltBlockDecr (octet block[16], const u32 key[8])

Выполняется расшифрование блока данных block на форматированном ключе key. Результат расшифрования возвращается по адресу block.

Аргументы

block блок  
key ключ

void beltBlockDecr2 (u32 block[4], const u32 key[8])

Выполняется расшифрование форматированного блока данных block на форматированном ключе key. Результат расшифрования возвращается по адресу block.

Аргументы

block блок  
key ключ

void beltBlockDecr3 (u32 * a, u32 * b, u32 * c, u32 * d, const u32 key[8])

Выполняется расшифрование форматированного блока (a, b, c, d), заданного четверкой последовательных 32-разрядных слов, на форматированном ключе key. Результат расшифрования возвращается через входные слова.

Аргументы

a слово a  
b слово b  
c слово c  
d слово d  
key ключ

void beltBlockEncr (octet block[16], const u32 key[8])

Выполняется зашифрование блока данных block на форматированном ключе key. Результат зашифрования возвращается по адресу block.

Аргументы

block блок  
key ключ

void beltBlockEncr2 (u32 block[4], const u32 key[8])

Выполняется зашифрование форматированного блока данных block на форматированном ключе key. Результат зашифрования возвращается по адресу block.

Аргументы

block блок  
key ключ

void beltBlockEncr3 (u32 * a, u32 * b, u32 * c, u32 * d, const u32 key[8])

Выполняется зашифрование форматированного блока (a, b, c, d), заданного четверкой последовательных 32-разрядных слов, на форматированном ключе key. Результат зашифрования возвращается через входные слова.

Аргументы

a слово a  
b слово b  
c слово c  
d слово d  
key ключ

size_t beltCBC_keep ()

Возвращается длина состояния (в октетах) функций шифрования в режиме CBC.

Возвращает

Длина состояние.

err_t beltCBCDecr (void * dest, const void * src, size_t count, const octet key[], size_t len, const octet iv[16])

Буфер [count]src расшифровывается на ключе [len]key с использованием синхропосылки iv. Результат расшифрования размещается в буфере [count]dest.

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • count >= 16.
Возвращает

ERR_OK, если данные успешно расшифрованы, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest открытый текст  
src шифртекст  
count число октетов текста  
key ключ  
len длина ключа  
iv синхропосылка

err_t beltCBCEncr (void * dest, const void * src, size_t count, const octet key[], size_t len, const octet iv[16])

Буфер [count]src зашифровывается на ключе [len]key с использованием синхропосылки iv. Результат зашифрования размещается в буфере [count]dest.

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • count >= 16.
Возвращает

ERR_OK, если данные успешно зашифрованы, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest шифртекст  
src открытый текст  
count число октетов текста  
key ключ  
len длина ключа  
iv синхропосылка

void beltCBCStart (void * state, const octet key[], size_t len, const octet iv[16])

По ключу [len]key и синхропосылке iv в state формируются структуры данных, необходимые для шифрования в режиме CBC.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltCBC_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах  
iv синхропосылка

void beltCBCStepD (void * buf, size_t count, void * state)

Буфер [count]buf расшифровывается в режиме CBC на ключе, размещенном в state.

Предусловие

count >= 16.

Ожидается

beltCBCStart() < beltCBCStepD()*.

Прим.

Сохраняются замечания по функции beltCBCStepE().

Аргументы

buf шифртекст / открытый текст  
count число октетов текста  
state состояние

void beltCBCStepE (void * buf, size_t count, void * state)

Буфер [count]buf зашифровывается в режиме CBC на ключе, размещенном в state.

Предусловие

count >= 16.

Ожидается

beltCBCStart() < beltCBCStepE()*.

Прим.

К функции можно обратиться несколько раз, передавая buf из полных блоков. Неполный блок можно передать только при последнем обращении. В этом случае выполняется 'кража' блока (ciphertext stealing, CTS).

При организации последовательных обращений к функции следует учитывать, что буфер buf должен содержать не менее одного блока. Например для зашифрования 33 октетов можно зашифровать сначала 16 октетов, а затем еще 17. Но нельзя зашифровать сначала 32 октета, а затем еще 1.

Аргументы

buf открытый текст / шифртекст  
count число октетов текста  
state состояние

size_t beltCFB_keep ()

Возвращается длина состояния (в октетах) функций шифрования в режиме CFB.

Возвращает

Длина состояния.

err_t beltCFBDecr (void * dest, const void * src, size_t count, const octet key[], size_t len, const octet iv[16])

Буфер [count]src расшифровывается на ключе [len]key с использованием синхропосылки iv. Результат расшифрования размещается в буфере [count]dest.

Ожидается [ERR_BAD_INPUT]

len == 16 || len == 24 || len == 32.

Возвращает

ERR_OK, если данные успешно расшифрованы, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest открытый текст  
src шифртекст  
count число октетов текста  
key ключ  
len длина ключа  
iv синхропосылка

err_t beltCFBEncr (void * dest, const void * src, size_t count, const octet key[], size_t len, const octet iv[16])

Буфер [count]src зашифровывается на ключе [len]key с использованием синхропосылки iv. Результат зашифрования размещается в буфере [count]dest.

Ожидается [ERR_BAD_INPUT]

len == 16 || len == 24 || len == 32.

Возвращает

ERR_OK, если данные успешно зашифрованы, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest шифртекст  
src открытый текст  
count число октетов текста  
key ключ  
len длина ключа  
iv синхропосылка

void beltCFBStart (void * state, const octet key[], size_t len, const octet iv[16])

По ключу [len]key и синхропосылке iv в state формируются структуры данных, необходимые для шифрования в режиме CFB.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltCFB_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах  
iv синхропосылка

void beltCFBStepD (void * buf, size_t count, void * state)

Буфер [count]buf расшифровывается в режиме CFB на ключе, размещенном в state.

Ожидается

beltCFBStart() < beltCFBStepD()*.

Аргументы

buf шифртекст / открытый текст  
count число октетов текста  
state состояние

void beltCFBStepE (void * buf, size_t count, void * state)

Буфер [count]buf зашифровывается в режиме CFB на ключе, размещенном в state.

Ожидается

beltCFBStart() < beltCFBStepE()*.

Аргументы

buf открытый текст / шифртекст  
count число октетов текста  
state состояние

size_t beltCHE_keep ()

Возвращается длина состояния (в октетах) функций CHE.

Возвращает

Длина состояния.

void beltCHEStart (void * state, const octet key[], size_t len, const octet iv[16])

По ключу [len]key и синхропосылке iv в state формируются структуры данных, необходимые для аутентифицированного шифрования в режиме CHE.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltCHE_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах  
iv синхропосылка

void beltCHEStepA (const void * buf, size_t count, void * state)

Текущая имитовставка, размещенная в state, пересчитывается с учетом нового фрагмента зашифрованных критических данных [count]buf. Пересчет выполняется на ключе, также размещенном в state.

Ожидается

По адресу state зарезервировано beltCHE_keep() октетов.

Ожидается

beltCHEStepI()* < beltCHEStepA()*.

Ожидается

beltCHEStepE()* < beltCHEStepA()*.

Аргументы

buf критические данные  
count число октетов данных  
state состояние

void beltCHEStepD (void * buf, size_t count, void * state)

Фрагмент зашифрованных критических данных [count]buf расшифровывается на ключе, размещенном в state. Результат расшифрования сохраняется в buf.

Ожидается

beltCHEStepG() < beltCHEStepD().

Ожидается

beltCHEStepA()* < beltCHEStepD().

Аргументы

buf критические данные  
count число октетов данных  
state состояние

void beltCHEStepE (void * buf, size_t count, void * state)

Фрагмент критических данных [count]buf зашифровывается на ключе, размещенном в state. Результат зашифрования сохраняется в buf.

Ожидается

beltCHEStart() < beltCHEStepE()*.

Аргументы

buf критические данные  
count число октетов данных  
state состояние

void beltCHEStepG (octet mac[8], void * state)

Определяется окончательная имитовставка mac всех данных, обработанных до этого функциями beltCHEStepI() и beltCHEStepA().

Ожидается

beltCHEStepI()* < beltCHEStepG().

Ожидается

beltCHEStepA()* < beltCHEStepG().

Предупреждения

При выполнении функции состояние state изменяется так, что продолжение имитозащиты становится некорректным.

Аргументы

mac имитовставка  
state состояние

void beltCHEStepI (const void * buf, size_t count, void * state)

Текущая имитовставка, размещенная в state, пересчитывается с учетом нового фрагмента открытых данных [count]buf. Пересчет выполняется на ключе, также размещенном в state.

Ожидается

beltCHEStart() < beltCHEStepI()*.

Аргументы

buf открытые данные  
count число октетов данных  
state состояние

bool_t beltCHEStepV (const octet mac[8], void * state)

Проверяется, что окончательная имитовставка всех данных, обработанных до этого функциями beltCHEStepI() и beltCHEStepA(), совпадает с mac.

Ожидается

beltCHEStepI()* < beltCHEStepV().

Ожидается

beltCHEStepA()* < beltCHEStepV().

Возвращает

Признак успеха.

Предупреждения

При выполнении функции состояние state изменяется так, что продолжение имитозащиты становится некорректным.

Аргументы

mac контрольная имитовставка  
state состояние

err_t beltCHEUnwrap (void * dest, const void * src1, size_t count1, const void * src2, size_t count2, const octet mac[8], const octet key[], size_t len, const octet iv[16])

На ключе [len]key октетов с использованием имитовставки iv снимается защита зашифрованных критических данных [count1]src1 и открытых данных [count2]src2. При снятии защиты проверяется целостность пары (src1, src2) с помощью имитовставки mac. Если целостность не нарушена, то данные src1 расшифровываются в буфер [count1]dest.

Ожидается [ERR_BAD_INPUT]

len == 16 || len == 24 || len == 32.

Возвращает

ERR_OK, если защита успешно снята, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest расшифрованные критические данные  
src1 зашифрованные критические данные  
count1 число октетов критических данных  
src2 открытые данные  
count2 число октетов открытых данных  
mac имитовставка  
key ключ  
len длина ключа  
iv синхропосылка

err_t beltCHEWrap (void * dest, octet mac[8], const void * src1, size_t count1, const void * src2, size_t count2, const octet key[], size_t len, const octet iv[16])

На ключе [len]key с использованием имитовставки iv устанавливается защита критических данных [count1]src1 и открытых данных [count2]src2. При установке защиты критические данные зашифровываются и сохраняются в буфере [count1]dest. Кроме этого определяется имитовставка mac пары (src1, src2).

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • буферы dest и mac не пересекаются.
Возвращает

ERR_OK, если защита успешно установлена, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться, за исключением пересечения dest и mac.

Аргументы

dest зашифрованные критические данные  
mac имитовставка  
src1 критические данные  
count1 число октетов критических данных  
src2 открытые данные  
count2 число октетов открытых данных  
key ключ  
len длина ключа  
iv синхропосылка

void beltCompr (u32 h[8], const u32 X[8], void * stack)

Форматированный буфер h || X сжимается до форматированного буфера h.

Предусловие

Буферы X и h не пересекаются.

Схема расчета глубины stack

beltCompr_deep().

Аргументы

h первая часть входа/выход  
X вторая часть входа  
stack стек

void beltCompr2 (u32 s[4], u32 h[8], const u32 X[8], void * stack)

Форматированный буфер h || X сжимается до форматированного буфера h. Внутренняя переменная S belt-compress добавдяется поразрядно по модулю 2 к буферу s.

Предусловие

Буферы s и h, X и s, X и h не пересекаются.

Схема расчета глубины stack

beltCompr_deep().

Аргументы

s сумма  
h первая часть входа/выход  
X вторая часть входа  
stack стек

size_t beltCompr_deep ()

Возвращается глубина стека (в октетах) функций сжатия.

Возвращает

Глубина стека.

err_t beltCTR (void * dest, const void * src, size_t count, const octet key[], size_t len, const octet iv[16])

Буфер [count]src зашифровывается или расшифровывается на ключе [len]key с использованием синхропосылки iv. Результат шифрования размещается в буфере [count]dest.

Ожидается [ERR_BAD_INPUT]

len == 16 || len == 24 || len == 32.

Возвращает

ERR_OK, если шифрование завершено успешно, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest шифртекст / открытый текст  
src открытый текст / шифртекст  
count число октетов текста  
key ключ  
len длина ключа  
iv синхропосылка

size_t beltCTR_keep ()

Возвращается длина состояния (в октетах) функций шифрования в режиме CTR.

Возвращает

Длина состояния.

void beltCTRStart (void * state, const octet key[], size_t len, const octet iv[16])

По ключу [len]key и синхропосылке iv в state формируются структуры данных, необходимые для шифрования в режиме CTR.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltCTR_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах  
iv синхропосылка

void beltCTRStepE (void * buf, size_t count, void * state)

Буфер [count]buf зашифровывается в режиме CTR на ключе, размещенном в state.

Ожидается

beltCTRStart() < beltCTRStepE()*.

Аргументы

buf открытый текст / шифртекст  
count число октетов текста  
state состояние

size_t beltDWP_keep ()

Возвращается длина состояния (в октетах) функций DWP.

Возвращает

Длина состояния.

void beltDWPStart (void * state, const octet key[], size_t len, const octet iv[16])

По ключу [len]key и синхропосылке iv в state формируются структуры данных, необходимые для аутентифицированного шифрования в режиме DWP.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltDWP_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах  
iv синхропосылка

void beltDWPStepA (const void * buf, size_t count, void * state)

Текущая имитовставка, размещенная в state, пересчитывается с учетом нового фрагмента зашифрованных критических данных [count]buf. Пересчет выполняется на ключе, также размещенном в state.

Ожидается

По адресу state зарезервировано beltDWP_keep() октетов.

Ожидается

beltDWPStepI()* < beltDWPStepA()*.

Ожидается

beltDWPStepE()* < beltDWPStepA()*.

Аргументы

buf критические данные  
count число октетов данных  
state состояние

void beltDWPStepD (void * buf, size_t count, void * state)

Фрагмент зашифрованных критических данных [count]buf расшифровывается на ключе, размещенном в state. Результат расшифрования сохраняется в buf.

Ожидается

beltDWPStepG() < beltDWPStepD().

Ожидается

beltDWPStepA()* < beltDWPStepD().

Аргументы

buf критические данные  
count число октетов данных  
state состояние

void beltDWPStepE (void * buf, size_t count, void * state)

Фрагмент критических данных [count]buf зашифровывается на ключе, размещенном в state. Результат зашифрования сохраняется в buf.

Ожидается

beltDWPStart() < beltDWPStepE()*.

Аргументы

buf критические данные  
count число октетов данных  
state состояние

void beltDWPStepG (octet mac[8], void * state)

Определяется окончательная имитовставка mac всех данных, обработанных до этого функциями beltDWPStepI() и beltDWPStepA().

Ожидается

beltDWPStepI()* < beltDWPStepG().

Ожидается

beltDWPStepA()* < beltDWPStepG().

Предупреждения

При выполнении функции состояние state изменяется так, что продолжение имитозащиты становится некорректным.

Аргументы

mac имитовставка  
state состояние

void beltDWPStepI (const void * buf, size_t count, void * state)

Текущая имитовставка, размещенная в state, пересчитывается с учетом нового фрагмента открытых данных [count]buf. Пересчет выполняется на ключе, также размещенном в state.

Ожидается

beltDWPStart() < beltDWPStepI()*.

Аргументы

buf открытые данные  
count число октетов данных  
state состояние

bool_t beltDWPStepV (const octet mac[8], void * state)

Проверяется, что окончательная имитовставка всех данных, обработанных до этого функциями beltDWPStepI() и beltDWPStepA(), совпадает с mac.

Ожидается

beltDWPStepI()* < beltDWPStepV().

Ожидается

beltDWPStepA()* < beltDWPStepV().

Возвращает

Признак успеха.

Предупреждения

При выполнении функции состояние state изменяется так, что продолжение имитозащиты становится некорректным.

Аргументы

mac контрольная имитовставка  
state состояние

err_t beltDWPUnwrap (void * dest, const void * src1, size_t count1, const void * src2, size_t count2, const octet mac[8], const octet key[], size_t len, const octet iv[16])

На ключе [len]key октетов с использованием имитовставки iv снимается защита зашифрованных критических данных [count1]src1 и открытых данных [count2]src2. При снятии защиты проверяется целостность пары (src1, src2) с помощью имитовставки mac. Если целостность не нарушена, то данные src1 расшифровываются в буфер [count1]dest.

Ожидается [ERR_BAD_INPUT]

len == 16 || len == 24 || len == 32.

Возвращает

ERR_OK, если защита успешно снята, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest расшифрованные критические данные  
src1 зашифрованные критические данные  
count1 число октетов критических данных  
src2 открытые данные  
count2 число октетов открытых данных  
mac имитовставка  
key ключ  
len длина ключа  
iv синхропосылка

err_t beltDWPWrap (void * dest, octet mac[8], const void * src1, size_t count1, const void * src2, size_t count2, const octet key[], size_t len, const octet iv[16])

На ключе [len]key с использованием имитовставки iv устанавливается защита критических данных [count1]src1 и открытых данных [count2]src2. При установке защиты критические данные зашифровываются и сохраняются в буфере [count1]dest. Кроме этого определяется имитовставка mac пары (src1, src2).

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • буферы dest и mac не пересекаются.
Возвращает

ERR_OK, если защита успешно установлена, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться, за исключением пересечения dest и mac.

Аргументы

dest зашифрованные критические данные  
mac имитовставка  
src1 критические данные  
count1 число октетов критических данных  
src2 открытые данные  
count2 число октетов открытых данных  
key ключ  
len длина ключа  
iv синхропосылка

size_t beltECB_keep ()

Возвращается длина состояния (в октетах) функций шифрования в режиме ECB.

Возвращает

Длина состояния.

err_t beltECBDecr (void * dest, const void * src, size_t count, const octet key[], size_t len)

Буфер src из count октетов расшифровывается на ключе [len]key. Результат расшифрования размещается в буфере dest.

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • count >= 16.
Возвращает

ERR_OK, если данные успешно расшифрованы, и код ошибки в противном случае.

Аргументы

dest открытый текст  
src шифртекст  
count число октетов текста  
key ключ  
len длина ключа

err_t beltECBEncr (void * dest, const void * src, size_t count, const octet key[], size_t len)

Буфер [count]src зашифровывается на ключе [len]key октетов. Результат зашифрования размещается в буфере [count]dest.

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • count >= 16.
Возвращает

ERR_OK, если данные успешно зашифрованы, и код ошибки в противном случае.

Аргументы

dest шифртекст  
src открытый текст  
count число октетов текста  
key ключ  
len длина ключа

void beltECBStart (void * state, const octet key[], size_t len)

По ключу [len]key в state формируются структуры данных, необходимые для шифрования в режиме ECB.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltECB_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах

void beltECBStepD (void * buf, size_t count, void * state)

Буфер [count]buf расшифровывается в режиме ECB на ключе, размещенном в state.

Предусловие

count >= 16.

Ожидается

beltECBStart() < beltECBStepD()*.

Прим.

Сохраняются замечания по функции beltECBStepE().

Аргументы

buf шифртекст / открытый текст  
count число октетов текста  
state состояние

void beltECBStepE (void * buf, size_t count, void * state)

Буфер [count]buf зашифровывается в режиме ECB на ключе, размещенном в state.

Предусловие

count >= 16.

Ожидается

beltECBStart() < beltECBStepE()*.

Прим.

К функции можно обратиться несколько раз, передавая buf из полных блоков. Неполный блок можно передать только при последнем обращении. В этом случае выполняется 'кража' блока (ciphertext stealing, CTS).

При организации последовательных обращений к функции следует учитывать, что буфер buf должен содержать не менее одного блока. Например для зашифрования 33 октетов можно зашифровать сначала 16 октетов, а затем еще 17. Но нельзя зашифровать сначала 32 октета, а затем еще 1.

Аргументы

buf открытый текст / шифртекст  
count число октетов текста  
state состояние

size_t beltFMT_keep (u32 mod, size_t count)

Возвращается длина состояния (в октетах) функций шифрования при обработке слов длины count в алфавите {0, 1,..., mod - 1}.

Предусловие

2 <= mod && mod <= 65536.

2 <= count && count <= 600.

Возвращает

Длина состояния.

Аргументы

mod размер алфавита  
count длина слов

err_t beltFMTDecr (u16 dest[], u32 mod, const u16 src[], size_t count, const octet key[], size_t len, const octet iv[16])

Строка [count]src в алфавите {0, 1,..., mod - 1} расшифровывается на ключе [len]key и синхропосылке iv. Результат расшифрования размещается в буфере [count]dest. При нулевом указателе iv используется нулевая синхропосылка.

Ожидается [ERR_BAD_INPUT]

  • 2 <= mod && mod <= 65536;
  • 2 <= count;
  • len == 16 || len == 24 || len == 32;
  • если iv ненулевой, то буферы iv и [count]dest не пересекаются.

Ожидается [ERR_NOT_IMPLEMENTED]

count <= 600.

Ожидается

Символы src принадлежат алфавиту {0, 1,..., mod - 1}.

Возвращает

ERR_OK, если расшифрование успешно выполнено, и код ошибки в противном случае.

Прим.

Все буферы, кроме iv и [count]dest, могут пересекаться.

Аргументы

dest открытый текст  
mod размер алфавита  
src шифртекст  
count длина шифртекста / открытого текста  
key ключ  
len длина key в октетах  
iv синхропосылка

err_t beltFMTEncr (u16 dest[], u32 mod, const u16 src[], size_t count, const octet key[], size_t len, const octet iv[16])

Строка [count]src в алфавите {0, 1,..., mod - 1} зашифровывается на ключе [len]key и синхропосылке iv. Результат зашифрования размещается в буфере [count]dest. При нулевом указателе iv используется нулевая синхропосылка.

Ожидается [ERR_BAD_INPUT]

  • 2 <= mod && mod <= 65536;
  • 2 <= count;
  • len == 16 || len == 24 || len == 32;
  • если iv ненулевой, то буферы iv и [count]dest не пересекаются.

Ожидается [ERR_NOT_IMPLEMENTED]

count <= 600.

Ожидается

Символы src принадлежат алфавиту {0, 1,..., mod - 1}.

Возвращает

ERR_OK, если зашифрование успешно выполнено, и код ошибки в противном случае.

Прим.

Все буферы, кроме iv и [count]dest, могут пересекаться.

Аргументы

dest шифртекст  
mod размер алфавита  
src открытый текст  
count длина открытого текста / шифртекста  
key ключ  
len длина key в октетах  
iv синхропосылка

void beltFMTStart (void * state, u32 mod, size_t count, const octet key[], size_t len)

По размеру алфавита mod, длине слов count и ключу [len]key в state формируются структуры данных, необходимые для шифрования в режиме FMT.

Предусловие

2 <= mod && mod <= 65536.

2 <= count && count <= 600.

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltFMT_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
mod размер алфавита  
count длина слов  
key ключ  
len длина key в октетах

void beltFMTStepD (u16 buf[], const octet iv[16], void * state)

Строка [count]buf расшифровывается на ключе, размещенном в state, и синхропосылке iv. Здесь count -- длина строки, предварительно установленная в state функцией beltFMTStart(). Результат расшифрования сохраняется в buf.

Ожидается

beltFMTStart() < beltFMTStepD()*.

Ожидается

Символы строки принадлежат алфавиту {0,1,..., mod - 1}, размер mod которого предварительно установлен в state функцией beltFMTStart().

Прим.

При нулевом указателе iv используется нулевая синхропосылка.

Аргументы

buf шифртекст / открытый текст  
iv синхропосылка  
state состояние

void beltFMTStepE (u16 buf[], const octet iv[16], void * state)

Строка [count]buf зашифровывается на ключе, размещенном в state, и синхропосылке iv. Здесь count -- длина строки, предварительно установленная в state функцией beltFMTStart(). Результат зашифрования сохраняется в buf.

Ожидается

beltFMTStart() < beltFMTStepE()*.

Ожидается

Символы строки принадлежат алфавиту {0,1,..., mod - 1}, размер mod которого предварительно установлен в state функцией beltFMTStart().

Прим.

При нулевом указателе iv используется нулевая синхропосылка.

Аргументы

buf открытый текст / шифртекст  
iv синхропосылка  
state состояние

const octet * beltH ()

Возвращается таблица значений блока подстановки H.

Возвращает

Указатель на таблицу H.

Прим.

Таблица используется для формирования начальных значений переменных некоторых алгоритмов, а также в тестовых примерах.

err_t beltHash (octet hash[32], const void * src, size_t count)

Определяется хэш-значение hash буфера [count]src.

Возвращает

ERR_OK, если хэширование успешно завершено, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

hash хэш-значение  
src данные  
count число октетов данных

size_t beltHash_keep ()

Возвращается длина состояния (в октетах) функции хэширования.

Возвращает

Длина состояния.

void beltHashStart (void * state)

В state формируются структуры данных, необходимые для хэширования.

Предусловие

По адресу state зарезервировано beltHash_keep() октетов.

Аргументы

state состояние

void beltHashStepG (octet hash[32], void * state)

Определяется окончательное хэш-значение hash всех данных, обработанных до этого функцией beltHashStepH().

Ожидается

(beltHashStepH()* < beltHashStepG())*.

Прим.

Если продолжение хэширования не предполагается, то буферы hash и state могут пересекаться.

Аргументы

hash хэш-значение  
state состояние

void beltHashStepG2 (octet hash[], size_t hash_len, void * state)

Определяется окончательное хэш-значение [hash_len]hash всех данных, обработанных до этого функцией beltHashStepH(). Возвращаемое хэш-значение состоит из первых hash_len октетов полного хэш-значения.

Предусловие

hash_len <= 32.

Ожидается

(beltHashStepH()* < beltHashStepG2())*.

Прим.

Если продолжение хэширования не предполагается, то буферы hash и state могут пересекаться.

Аргументы

hash хэш-значение  
hash_len длина hash  
state состояние

void beltHashStepH (const void * buf, size_t count, void * state)

Текущее хэш-значение, размещенное в state, пересчитывается с учетом нового фрагмента данных [count]buf.

Ожидается

beltHashStart() < beltHashStepH()*.

Аргументы

buf данные  
count число октетов данных  
state состояние

bool_t beltHashStepV (const octet hash[32], void * state)

Проверяется, что окончательное хэш-значение всех данных, обработанных до этого функцией beltHashStepH(), совпадает с hash.

Ожидается

(beltHashStepH()* < beltHashStepV())*.

Аргументы

hash контрольные хэш-значение  
state состояние

bool_t beltHashStepV2 (const octet hash[], size_t hash_len, void * state)

Проверяется, что первые hash_len октетов окончательного хэш-значения всех данных, обработанных до этого функцией beltHashStepH(), совпадают с [hash_len]hash.

Предусловие

hash_len <= 32.

Ожидается

(beltHashStepH()* < beltHashStepV2())*.

Аргументы

hash контрольное хэш-значение  
hash_len длина hash  
state состояние

err_t beltHMAC (octet mac[32], const void * src, size_t count, const octet key[], size_t len)

На ключе [len]key определяется имитовставка mac буфера [count]src.

Возвращает

ERR_OK, если имитовставка успешно вычислена, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

mac имитовставка  
src данные  
count число октетов данных  
key ключ  
len длина ключа

size_t beltHMAC_keep ()

Возвращается длина состояния (в октетах) функций имитозащиты в режиме MAC.

Возвращает

Длина состояния.

void beltHMACStart (void * state, const octet key[], size_t len)

По ключу [len]key в state формируются структуры данных, необходимые для имитозащиты в режиме HMAC.

Предусловие

По адресу state зарезервировано beltHMAC_keep() октетов.

Прим.

Рекомендуется использовать ключ из 32 октетов.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах

void beltHMACStepA (const void * buf, size_t count, void * state)

Текущая имитовставка, размещенная в state, пересчитывается с учетом нового фрагмента данных [count]buf. Пересчет выполняется на ключе, также размещенном в state.

Ожидается

beltHMACStart() < beltHMACStepA()*.

Аргументы

buf данные  
count число октетов данных  
state состояние

void beltHMACStepG (octet mac[32], void * state)

Определяется окончательная имитовставка mac всех данных, обработанных до этого функцией beltHMACStepA().

Ожидается

(beltHMACStepA()* < beltHMACStepG())*.

Аргументы

mac имитовставка  
state состояние

void beltHMACStepG2 (octet mac[], size_t mac_len, void * state)

Определяется окончательная имитовставка [mac_len]mac всех данных, обработанных до этого функцией beltHMACStepA(). Возвращаемая имитовставка состоит из первых mac_len октетов полной имитовставки.

Предусловие

mac_len <= 32.

Ожидается

(beltHMACStepA()* < beltHMACStepG2())*.

Прим.

Если продолжение имитозащиты не предполагается, то буферы mac и state могут пересекаться.

Аргументы

mac имитовставка  
mac_len длина имитовставки  
state состояние

bool_t beltHMACStepV (const octet mac[32], void * state)

Проверяется, что окончательная имитовставка всех данных, обработанных до этого функцией beltHMACStepA(), совпадает с mac.

Ожидается

(beltHMACStepA()* < beltHMACStepV())*.

Аргументы

mac контрольная имитовставка  
state состояние

bool_t beltHMACStepV2 (const octet mac[], size_t mac_len, void * state)

Проверяется, что первые mac_len октетов окончательной имитовставки всех данных, обработанных до этого функцией beltHMACStepA(), совпадают с [mac_len]mac.

Предусловие

mac_len <= 32.

Ожидается

(beltHMACStepA()* < beltHMACStepV2())*.

Аргументы

mac контрольная имитовставка  
mac_len длина mac  
state состояние

void beltKeyExpand (octet key_[32], const octet key[], size_t len)

Ключ [len]key расширяется до ключа key_.

Предусловие

len == 16 || len == 24 || len == 32.

Прим.

Буферы key и key_ могут пересекаться.

Аргументы

key_ расширенный ключ  
key первоначальный ключ  
len длина key в октетах

void beltKeyExpand2 (u32 key_[8], const octet key[], size_t len)

Ключ [len]key форматируется и расширяется до ключа key_.

Предусловие

len == 16 || len == 24 || len == 32.

Прим.

Буферы key и key_ могут пересекаться.

Аргументы

key_ расширенный форматированный ключ  
key первоначальный ключ  
len длина ключа в октетах

err_t beltKRP (octet dest[], size_t m, const octet src[], size_t n, const octet level[12], const octet header[16])

По ключу [n]src, который имеет уровень level, строится ключ [m]dest, который имеет заголовок header.

Ожидается [ERR_BAD_INPUT]
  • n == 16 || n == 24 || n == 32;
  • m == 16 || m == 24 || m == 32;
  • m <= n.
Возвращает

ERR_OK, если преобразование успешно завершено, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest преобразованный ключ  
m длина dest в октетах  
src исходный ключ  
n длина src в октетах  
level уровень ключа src  
header заголовок ключа dest

size_t beltKRP_keep ()

Возвращается длина состояния (в октетах) функций преобразования ключа.

Возвращает

Длина состояния.

void beltKRPStart (void * state, const octet key[], size_t len, const octet level[12])

По ключу [len]key, который принадлежит уровню level, в state формируются структуры данных, необходимые для преобразования этого ключа.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltKRP_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах  
level уровень

void beltKRPStepG (octet key_[], size_t key_len, const octet header[16], void * state)

Ключ [len]key, размещенный в state функцией beltKRPStart(), преобразуется в ключ [key_len]key_, который имеет заголовок header.

Предусловие

(key_len == 16 || key_len == 24 || key_len == 32) && key_len <= len.

Ожидается

beltKRPStart() < beltKRPStepG()*.

Аргументы

key_ преобразованный ключ  
key_len длина key в октетах  
header заголовок key_  
state состояние

err_t beltKWPUnwrap (octet dest[], const octet src[], size_t count, const octet header[16], const octet key[], size_t len)

На ключе [len]key снимается защита с ключа [count]src. В результате определяется первоначальный ключ [count - 16]dest с заголовком header.

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • count >= 32.
Возвращает

ERR_OK, если защита успешно снята, и код ошибки в противном случае.

Прим.

При нулевом указателе header используется нулевой заголовок.

Буферы могут пересекаться.

Аргументы

dest ключ  
src защищенный ключ  
count длина src в октетах  
header заголовок ключа  
key ключ защиты  
len длина key в октетах

err_t beltKWPWrap (octet dest[], const octet src[], size_t count, const octet header[16], const octet key[], size_t len)

На ключе [len]key устанавливается защита ключа [count]src с заголовком header. В результате определяется защищенный ключ [count + 16]dest.

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • count >= 16.
Возвращает

ERR_OK, если защита успешно установлена, и код ошибки в противном случае.

Прим.

При нулевом указателе header используется нулевой заголовок.

Буферы могут пересекаться.

Аргументы

dest защищенный ключ  
src защищаемый ключ  
count длина src в октетах  
header заголовок ключа  
key ключ защиты  
len длина key в октетах

err_t beltMAC (octet mac[8], const void * src, size_t count, const octet key[], size_t len)

На ключе [len]key определяется имитовставка mac буфера [count]src.

Ожидается [ERR_BAD_INPUT]

len == 16 || len == 24 || len == 32.

Возвращает

ERR_OK, если имитовставка успешно вычислена, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

mac имитовставка  
src данные  
count число октетов данных  
key ключ  
len длина ключа

size_t beltMAC_keep ()

Возвращается длина состояния (в октетах) функций имитозащиты в режиме MAC.

Возвращает

Длина состояния.

void beltMACStart (void * state, const octet key[], size_t len)

По ключу [len]key в state формируются структуры данных, необходимые для имитозащиты в режиме MAC.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltMAC_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах

void beltMACStepA (const void * buf, size_t count, void * state)

Текущая имитовставка, размещенная в state, пересчитывается с учетом нового фрагмента данных [count]buf. Пересчет выполняется на ключе, также размещенном в state.

Ожидается

beltMACStart() < beltMACStepA()*.

Аргументы

buf данные  
count число октетов данных  
state состояние

void beltMACStepG (octet mac[8], void * state)

Определяется окончательная имитовставка mac всех данных, обработанных до этого функцией beltMACStepA().

Ожидается

(beltMACStepA()* < beltMACStepG())*.

Прим.

Если продолжение имитозащиты не предполагается, то буферы mac и state могут пересекаться.

Аргументы

mac имитовставка  
state состояние

void beltMACStepG2 (octet mac[], size_t mac_len, void * state)

Определяется окончательная имитовставка [mac_len]mac всех данных, обработанных до этого функцией beltMACStepA(). Возвращаемая имитовставка состоит из первых mac_len октетов полной имитовставки.

Предусловие

mac_len <= 8.

Ожидается

(beltMACStepA()* < beltMACStepG2())*.

Прим.

Если продолжение имитозащиты не предполагается, то буферы mac и state могут пересекаться.

Аргументы

mac имитовставка  
mac_len длина имитовставки  
state состояние

bool_t beltMACStepV (const octet mac[8], void * state)

Проверяется, что окончательная имитовставка всех данных, обработанных до этого функцией beltMACStepA(), совпадает с mac.

Ожидается

(beltMACStepA()* < beltMACStepV())*.

Возвращает

Признак успеха.

Аргументы

mac контрольная имитовставка  
state состояние

bool_t beltMACStepV2 (const octet mac[], size_t mac_len, void * state)

Проверяется, что первые mac_len октетов окончательной имитовставки всех данных, обработанных до этого функцией beltMACStepA(), совпадают с [mac_len]mac.

Предусловие

mac_len <= 8.

Ожидается

(beltMACStepA()* < beltMACStepV2())*.

Аргументы

mac контрольная имитовставка  
mac_len длина mac  
state состояние

err_t beltPBKDF2 (octet key[32], const octet pwd[], size_t pwd_len, size_t iter, const octet salt[], size_t salt_len)

По паролю [pwd_len]pwd строится ключ key. Для усложнения словарных атак используется синхропосылка [salt_len]salt. Для усложнения перебора паролей ключ пересчитывается iter > 0 раз.

Ожидается [ERR_BAD_INPUT]

iter != 0.

Возвращает

ERR_OK, если ключ успешно построен, и код ошибки в противном случае.

Прим.

Рекомендуется использовать iter >= 10000 и salt_len >= 8.

Реализована упрощенная редакция алгоритма PBKDF2 (Password-Based Key Derivation Function version 2), определенного в PKCS#5. Редакция описана в СТБ 34.101.45 (приложение E).

Аргументы

key ключ  
pwd пароль  
pwd_len длина пароля (в октетах)  
iter число итераций  
salt синхропосылка ('соль')  
salt_len длина синхропосылки (в октетах)

size_t beltSDE_keep ()

Возвращается длина состояния (в октетах) функций шифрования в режиме SDE.

Возвращает

Длина состояние.

err_t beltSDEDecr (void * dest, const void * src, size_t count, const octet key[], size_t len, const octet iv[16])

Сектор [count]src расшифровывается на ключе [len]key с использованием синхропосылки iv. Результат расшифрования размещается в буфере [count]dest.

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • count % 16 == 0 && count >= 32.
Возвращает

ERR_OK, если данные успешно расшифрованы, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest открытый текст  
src шифртекст  
count число октетов текста  
key ключ  
len длина ключа  
iv синхропосылка

err_t beltSDEEncr (void * dest, const void * src, size_t count, const octet key[], size_t len, const octet iv[16])

Сектор [count]src зашифровывается на ключе [len]key с использованием синхропосылки iv. Результат зашифрования размещается в буфере [count]dest.

Ожидается [ERR_BAD_INPUT]
  • len == 16 || len == 24 || len == 32;
  • count % 16 == 0 && count >= 32.
Возвращает

ERR_OK, если данные успешно зашифрованы, и код ошибки в противном случае.

Прим.

Буферы могут пересекаться.

Аргументы

dest шифртекст  
src открытый текст  
count число октетов текста  
key ключ  
len длина ключа  
iv синхропосылка

void beltSDEStart (void * state, const octet key[], size_t len)

По ключу [len]key и синхропосылке iv в state формируются структуры данных, необходимые для шифрования в режиме SDE.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltSDE_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах

void beltSDEStepD (void * buf, size_t count, const octet iv[16], void * state)

Сектор [count]buf расшифровывается в режиме SDE на ключе, размещенном в state, и синхропосылке iv.

Предусловие

count % 16 == 0 && count >= 32.

Ожидается

beltSDEStart() < beltSDEStepD()*.

Аргументы

buf шифртекст / открытый текст  
count число октетов текста  
iv синхропосылка  
state состояние

void beltSDEStepE (void * buf, size_t count, const octet iv[16], void * state)

Сектор [count]buf зашифровывается в режиме SDE на ключе, размещенном в state, и синхропосылке iv.

Предусловие

count % 16 == 0 && count >= 32.

Ожидается

beltSDEStart() < beltSDEStepE()*.

Аргументы

buf открытый текст / шифртекст  
count число октетов текста  
iv синхропосылка  
state состояние

size_t beltWBL_keep ()

Возвращается длина состояния (в октетах) функций WBL.

Возвращает

Длина состояния.

void beltWBLStart (void * state, const octet key[], size_t len)

По ключу [len]key в state формируются структуры данных, необходимые для шифрования в режиме WBL.

Предусловие

len == 16 || len == 24 || len == 32.

По адресу state зарезервировано beltWBL_keep() октетов.

Прим.

Буферы key и state могут пересекаться.

Аргументы

state состояние  
key ключ  
len длина ключа в октетах

void beltWBLStepD (void * buf, size_t count, void * state)

Буфер [count]buf расшифровывается на ключе, размещенном в state. Результат расшифрования сохраняется в buf.

Предусловие

count >= 32.

Ожидается

beltWBLStart() < beltWBLStepD()*.

Аргументы

buf шифртекст / открытый текст  
count число октетов данных  
state состояние

void beltWBLStepD2 (void * buf1, void * buf2, size_t count, void * state)

Буфер [count - 16]buf1 || [16]buf2 расшифровывается в режиме WBL на ключе, размещенном в state. Результат расшифрования сохраняется в buf1 || buf2.

Предусловие

count >= 32.

Буферы buf1 и buf2 не пересекаются.

Ожидается

beltWBLStart() < beltWBLStepD2()*.

Прим.

С помощью beltWBLStepD2() снятие защиты с ключа в механизме KWP может быть организовано по следующей схеме:

  • первая часть защищенного ключа помещается в buf1;
  • вторая часть защищенного ключа помещается в buf2;
  • применяется beltWBLStepD2();
  • если buf2 совпадает с заголовком ключа, то buf1 принимается как ключ.
Аргументы

buf1 первая часть шифртекста / открытого текста  
buf2 вторая часть шифртекста / открытого текста  
count длина текста  
state состояние

void beltWBLStepE (void * buf, size_t count, void * state)

Буфер [count]buf зашифровывается на ключе, размещенном в state. Результат зашифрования сохраняется в buf.

Предусловие

count >= 32.

Ожидается

beltWBLStart() < beltWBLStepE()*.

Аргументы

buf открытый текст / шифртекст  
count число октетов текста  
state состояние

void beltWBLStepR (void * buf, size_t count, void * state)

Буфер [count]buf зашифровывается на ключе, размещенном в state. Результат зашифрования сохраняется в buf. При первом обращении счетчик i меняется от 1 до 2n, при втором --- от 2n + 1 до 4n, и так далее.

Предусловие

count >= 32.

Ожидается

beltWBLStart() < beltWBLStepR()*.

Прим.

Многократное зашифрование в режиме WBL используется для генерации одноразового ключа в СТБ 34.101.45. Поэтому функции назначен суффикс R.

Аргументы

buf открытый текст / шифртекст  
count число октетов текста  
state состояние

Автор

Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.

Info

Вт 23 Янв 2024 00:00:00 Библиотека Bee2