3 Данная библиотека реализует криптографические алгоритмы, определённые в следующих стандартах:
4 - ГОСТ Р 34.11-2012 Информационная технология. Криптографическая защита информации. Функция хэширования.
5 - ГОСТ 34.11-2018 Информационная технология. Криптографическая защита информации. Функция хэширования.
6 - ГОСТ Р 34.12-2015 Информационная технология. Криптографическая защита информации. Блочные шифры.
7 - ГОСТ 34.12-2018 Информационная технология. Криптографическая защита информации. Блочные шифры.
8 - ГОСТ Р 34.13-2015 Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров.
9 - ГОСТ 34.13-2018 Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров.
10 - ГОСТ Р 34.10-2012 Информационная технология. Процессы формирования и проверки электронной цифровой подписи.
11 - ГОСТ 34.10-2018 Информационная технология. Криптографическая защита информации. Процессы формирования и проверки электронной цифровой подписи
12 - Р 1323565.1.026–2019 Информационная технология. Криптографическая защита информации. Режимы работы блочных шифров, реализующие аутентифицирующее шифрование.
13 - Р 1323565.1.024-2019 Информационная технология. Криптографическая защита информации. Параметры эллиптических кривых для криптографических алгоритмов и протоколов.
15 ## Основные положения и сокращения
17 Для удобства пользователя, API данной библиотеки написано в едином стиле и придерживается следующей конвенции:
19 1. Константы записаны заглавными буквами;
20 2. Функции записаны с маленькой буквы;
21 3. Типы данных записаны в горбатом регистре;
22 4. Типы данных реализованы с помощью массива заданного размера `*_SIZE`, который должен быть выровнен по `*_ALIGNMENT`;
23 5. Функции для работы с типом имеют префикс данного типа;
24 6. Запрещено работать с объектом типа с помощью функций другого типа, в том числе использовать ключи одной кривой в функциях другой кривой;
25 7. Каждый объект типа инициализируется своей функцией `*_new` и уничтожается `*_drop`.
27 Алгоритмы и функции записываются в сокращенном виде в терминах Международной организаций по стандартизации:
29 - ECB (Electronic Codebook) — Режим электронной кодовой книги
30 - CBC (Cipher Block Chaining) — Режим сцепления блоков шифротекста
31 - CFB (Cipher Feedback) — Режим обратной связи по шифротексту
32 - OFB (Output Feedback) — Режим обратной связи по выходу
33 - CTR (Counter mode) — Режим счётчика
34 - AEAD (Authenticated Encryption with Associated Data) — Аутентифицированное шифрование с присоединёнными данными
35 - MGM (Multilinear Galois Mode) — Режим, реализующий аутентифицированное шифрование (AEAD) с использование шифра с длиной блока 128 бит
36 - MAC (Message Authentication Code) — Имитовставка
37 - EC (Elliptic Curve) - Эллиптические кривые
38 - ECDH (Elliptic curve Diffie–Hellman) - Протокол Диффи — Хеллмана на эллиптических кривых
39 - ECDSA (Elliptic Curve Digital Signature Algorithm) — Алгоритм с открытым ключом для создания цифровой подписи
40 - VKO (Vyrabotka Klyuchej Obmena) - Алгоритм выработки общего ключа, ECDH
42 ## Список поддерживаемых алгоритмов
44 -
Magma — Симметричный алгоритм блочного шифрования с размером блока 64 бит. Магма.
45 -
Kuznyechik — Симметричный алгоритм блочного шифрования с размером блока 128 бит. Кузнечик.
47 -
MagmaCtr — Потоковый шифр с длиной блока 64 бит в режиме гаммирования.
48 -
KuznyechikCtr — Потоковый шифр с длиной блока 128 бит в режиме гаммирования.
50 -
MagmaEcb — Блочный шифр с длиной блока 64 бит в режиме простой замены.
51 -
KuznyechikEcb — Блочный шифр с длиной блока 128 бит в режиме простой замены.
53 -
Streebog256 — Функция хэширования с длиной хэш-кода 256 бит. Стрибог.
54 -
Streebog512 — Функция хэширования с длиной хэш-кода 512 бит. Стрибог.
56 -
MagmaMac — Режим выработки имитовставки с использованием шифра с длиной блока 64 бит.
57 -
KuznyechikMac — Режим выработки имитовставки с использованием шифра с длиной блока 128 бит.
59 -
MagmaCbc — Блочный шифр с длиной блока 64 бит в режиме простой замены с зацеплением с размером синхропосылки 8 байт.
60 -
KuznyechikCbc — Блочный шифр с длиной блока 128 бит в режиме простой замены с зацеплением с размером синхропосылки 16 байт.
62 -
MagmaCfb — Потоковый шифр с длиной блока 64 бит в режиме гаммирования с обратной связью по шифртексту с размером синхропосылки 8 байт.
63 -
KuznyechikCfb — Потоковый шифр с длиной блока 128 бит в режиме гаммирования с обратной связью по шифртексту с размером синхропосылки 16 байт.
65 -
MagmaOfb — Потоковый шифр с длиной блока 64 бит в режиме гаммирования с обратной связью по выходу с размером синхропосылки 8 байт.
66 -
KuznyechikOfb — Потоковый шифр с длиной блока 128 бит в режиме гаммирования с обратной связью по выходу с размером синхропосылки 16 байт.
68 -
KuznyechikMgm — Блочный шифр с длиной блока 128 бит в режиме работы блочных шифров, реализующим аутентифицирующее шифрование с присоединёнными данными.
70 -
Ec256(ECDSA) — Алгоритм формирования и проверки электронной цифровой подписи с ключами электронной подписи длины 256 бит.
71 -
Ec512(ECDSA) — Алгоритм формирования и проверки электронной цифровой подписи с ключами электронной подписи длины 512 бит.
73 -
Ec256(VKO:256) — Алгоритм формирования общего ключа длиной 256 бит с ключами электронной подписи длины 256 бит.
74 -
Ec512(VKO:256) — Алгоритм формирования общего ключа длиной 256 бит с ключами электронной подписи длины 512 бит.
75 -
Ec512(VKO:512) — Алгоритм формирования общего ключа длиной 512 бит с ключами электронной подписи длины 512 бит.
uint8_t KuznyechikCtr[KUZNYECHIK_CTR_SIZE]
Потоковый шифр с длиной блока 128 бит в режиме гаммирования.
uint8_t MagmaOfb[MAGMA_OFB_SIZE]
Потоковый шифр с длиной блока 64 бит в режиме гаммирования с обратной связью по выходу с размером син...
uint8_t MagmaEcb[MAGMA_ECB_SIZE]
Блочный шифр с длиной блока 64 бит в режиме простой замены.
uintptr_t Ec256
Алгоритмы формирования, проверки электронной цифровой подписи и выработки общих ключей.
uint8_t KuznyechikCfb[KUZNYECHIK_CFB_SIZE]
Потоковый шифр с длиной блока 128 бит в режиме гаммирования с обратной связью по шифртексту с размеро...
uint8_t Streebog512[STREEBOG512_SIZE]
Функция хэширования с длиной хэш-кода 512 бит.
uintptr_t Ec512
Алгоритмы формирования, проверки электронной цифровой подписи и выработки общих ключей.
uint8_t MagmaCtr[MAGMA_CTR_SIZE]
Потоковый шифр с длиной блока 64 бит в режиме гаммирования.
uint8_t MagmaMac[MAGMA_MAC_SIZE]
Режим выработки имитовставки с использованием шифра с длиной блока 64 бит.
uint8_t Magma[MAGMA_SIZE]
Блочный шифр с длиной блока 64 бит.
uint8_t Kuznyechik[KUZNYECHIK_SIZE]
Блочный шифр с длиной блока 128 бит.
uint8_t MagmaCbc[MAGMA_CBC_SIZE]
Блочный шифр с длиной блока 64 бит в режиме простой замены с зацеплением с размером синхропосылки 8 б...
uint8_t Streebog256[STREEBOG256_SIZE]
Функция хэширования с длиной хэш-кода 256 бит.
uint8_t KuznyechikCbc[KUZNYECHIK_CBC_SIZE]
Блочный шифр с длиной блока 128 бит в режиме простой замены с зацеплением с размером синхропосылки 16...
uint8_t KuznyechikEcb[KUZNYECHIK_ECB_SIZE]
Блочный шифр с длиной блока 128 бит в режиме простой замены.
uint8_t KuznyechikMac[KUZNYECHIK_MAC_SIZE]
Режим выработки имитовставки с использованием шифра с длиной блока 128 бит.
uint8_t KuznyechikMgm[KUZNYECHIK_MGM_SIZE]
Блочный шифр с длиной блока 128 бит в режиме работы блочных шифров, реализующим аутентифицирующее шиф...
uint8_t KuznyechikOfb[KUZNYECHIK_OFB_SIZE]
Потоковый шифр с длиной блока 128 бит в режиме гаммирования с обратной связью по выходу с размером си...
uint8_t MagmaCfb[MAGMA_CFB_SIZE]
Потоковый шифр с длиной блока 64 бит в режиме гаммирования с обратной связью по шифртексту с размером...