14 #define SYMMETRIC_KEY_SIZE 32
19 #define KUZNYECHIK_MGM_NONCE_SIZE 16
24 #define KUZNYECHIK_MGM_TAG_SIZE 16
29 #define KUZNYECHIK_MGM_ALIGNMENT 1
34 #define KUZNYECHIK_MGM_SIZE 160
39 #define KUZNYECHIK_CBC_NONCE_SIZE 16
44 #define KUZNYECHIK_CBC_ALIGNMENT 1
49 #define KUZNYECHIK_CBC_SIZE 177
54 #define MAGMA_CBC_NONCE_SIZE 8
59 #define MAGMA_CBC_ALIGNMENT 4
64 #define MAGMA_CBC_SIZE 44
69 #define KUZNYECHIK_CFB_NONCE_SIZE 16
74 #define KUZNYECHIK_CFB_ALIGNMENT 1
79 #define KUZNYECHIK_CFB_SIZE 177
84 #define MAGMA_CFB_NONCE_SIZE 8
89 #define MAGMA_CFB_ALIGNMENT 4
94 #define MAGMA_CFB_SIZE 44
99 #define KUZNYECHIK_BLOCK_SIZE 16
104 #define KUZNYECHIK_ALIGNMENT 1
109 #define KUZNYECHIK_SIZE 160
114 #define MAGMA_BLOCK_SIZE 8
119 #define MAGMA_ALIGNMENT 4
124 #define MAGMA_SIZE 32
129 #define KUZNYECHIK_CTR_NONCE_SIZE 8
134 #define KUZNYECHIK_CTR_ALIGNMENT 8
139 #define KUZNYECHIK_CTR_SIZE 200
144 #define MAGMA_CTR_NONCE_SIZE 4
149 #define MAGMA_CTR_ALIGNMENT 4
154 #define MAGMA_CTR_SIZE 52
159 #define KUZNYECHIK_ECB_ALIGNMENT 1
164 #define KUZNYECHIK_ECB_SIZE 160
169 #define MAGMA_ECB_ALIGNMENT 4
174 #define MAGMA_ECB_SIZE 32
179 #define EC_256_WIDTH 32
184 #define EC_256_DOUBLE_WIDTH 64
189 #define EC_256_PRIVATE_KEY_ALIGNMENT 8
194 #define EC_256_PUBLIC_KEY_SIZE 96
199 #define EC_256_PUBLIC_KEY_ALIGNMENT 8
204 #define GOST3410_2012_512A 643712121
209 #define GOST3410_2012_512B 643712122
214 #define GOST3410_2012_512C 643712123
219 #define EC_512_WIDTH 64
224 #define EC_512_DOUBLE_WIDTH 128
229 #define EC_512_PRIVATE_KEY_ALIGNMENT 8
234 #define EC_512_PUBLIC_KEY_SIZE 192
239 #define EC_512_PUBLIC_KEY_ALIGNMENT 8
244 #define EC_ERR_CURVE_ID -2
249 #define EC_ERR_PUBLIC_KEY_BYTES -3
254 #define EC_ERR_PRIVATE_KEY_BYTES -4
259 #define EC_ERR_SIGNATURE -5
266 #define EC_ERR_BAD_RAND_BYTES -6
271 #define EC_ERR_VKO_UKM -7
276 #define STREEBOG256_RESULT_SIZE 32
281 #define STREEBOG256_ALIGNMENT 8
286 #define STREEBOG256_SIZE 264
291 #define STREEBOG512_RESULT_SIZE 64
296 #define STREEBOG512_ALIGNMENT 8
301 #define STREEBOG512_SIZE 264
306 #define KUZNYECHIK_MAC_RESULT_SIZE 16
311 #define KUZNYECHIK_MAC_ALIGNMENT 8
316 #define KUZNYECHIK_MAC_SIZE 216
321 #define MAGMA_MAC_RESULT_SIZE 8
326 #define MAGMA_MAC_ALIGNMENT 8
331 #define MAGMA_MAC_SIZE 64
336 #define KUZNYECHIK_OFB_NONCE_SIZE 16
341 #define KUZNYECHIK_OFB_ALIGNMENT 1
346 #define KUZNYECHIK_OFB_SIZE 178
351 #define MAGMA_OFB_NONCE_SIZE 8
356 #define MAGMA_OFB_ALIGNMENT 4
361 #define MAGMA_OFB_SIZE 44
831 #define GOST3410_2012_256A 643712111
836 #define GOST3410_2012_256B 643712112
841 #define GOST3410_2012_256C 643712113
846 #define GOST3410_2012_256D 643712114
850 #endif // __cplusplus
919 const uint8_t nonce[KUZNYECHIK_MGM_NONCE_SIZE],
924 const uint8_t tag[KUZNYECHIK_MGM_TAG_SIZE]);
958 const uint8_t key[SYMMETRIC_KEY_SIZE],
977 uintptr_t blocks_len);
994 uint8_t blocks[KUZNYECHIK_BLOCK_SIZE],
995 uintptr_t blocks_len);
1083 const uint8_t key[SYMMETRIC_KEY_SIZE],
1102 uintptr_t blocks_len);
1119 uint8_t blocks[MAGMA_BLOCK_SIZE],
1120 uintptr_t blocks_len);
1208 const uint8_t key[SYMMETRIC_KEY_SIZE],
1277 const uint8_t key[SYMMETRIC_KEY_SIZE],
1344 const uint8_t key[SYMMETRIC_KEY_SIZE]);
1359 uint8_t block[KUZNYECHIK_BLOCK_SIZE]);
1374 uint8_t block[KUZNYECHIK_BLOCK_SIZE]);
1390 uint8_t blocks[KUZNYECHIK_BLOCK_SIZE],
1407 uint8_t blocks[KUZNYECHIK_BLOCK_SIZE],
1439 const uint8_t key[SYMMETRIC_KEY_SIZE]);
1454 uint8_t block[MAGMA_BLOCK_SIZE]);
1469 uint8_t block[MAGMA_BLOCK_SIZE]);
1485 uint8_t blocks[MAGMA_BLOCK_SIZE],
1502 uint8_t blocks[MAGMA_BLOCK_SIZE],
1536 const uint8_t key[SYMMETRIC_KEY_SIZE],
1624 const uint8_t key[SYMMETRIC_KEY_SIZE],
1711 const uint8_t key[SYMMETRIC_KEY_SIZE]);
1728 uint8_t blocks[KUZNYECHIK_BLOCK_SIZE],
1729 uintptr_t blocks_len);
1746 uint8_t blocks[KUZNYECHIK_BLOCK_SIZE],
1747 uintptr_t blocks_len);
1834 const uint8_t key[SYMMETRIC_KEY_SIZE]);
1851 uint8_t blocks[MAGMA_BLOCK_SIZE],
1852 uintptr_t blocks_len);
1869 uint8_t blocks[MAGMA_BLOCK_SIZE],
1870 uintptr_t blocks_len);
1996 const uint8_t bytes[EC_256_WIDTH],
2016 uint8_t bytes[EC_256_WIDTH]);
2038 const uint8_t hash[EC_256_WIDTH],
2039 const uint8_t rand_bytes[EC_256_WIDTH],
2064 const uint8_t rand_bytes[EC_256_WIDTH],
2065 uint8_t signature[EC_256_DOUBLE_WIDTH]);
2083 const uint8_t bytes[EC_256_DOUBLE_WIDTH],
2103 uint8_t bytes[EC_256_DOUBLE_WIDTH]);
2124 const uint8_t hash[EC_256_WIDTH],
2125 const uint8_t signature[EC_256_DOUBLE_WIDTH]);
2148 const uint8_t signature[EC_256_DOUBLE_WIDTH]);
2180 const uint8_t ukm[EC_256_WIDTH],
2181 uint8_t out[EC_256_WIDTH]);
2254 const uint8_t bytes[EC_512_WIDTH],
2274 uint8_t bytes[EC_512_WIDTH]);
2296 const uint8_t hash[EC_512_WIDTH],
2297 const uint8_t rand_bytes[EC_512_WIDTH],
2322 const uint8_t rand_bytes[EC_512_WIDTH],
2323 uint8_t signature[EC_512_DOUBLE_WIDTH]);
2341 const uint8_t bytes[EC_512_DOUBLE_WIDTH],
2361 uint8_t bytes[EC_512_DOUBLE_WIDTH]);
2382 const uint8_t hash[EC_512_WIDTH],
2383 const uint8_t signature[EC_512_DOUBLE_WIDTH]);
2406 const uint8_t signature[EC_512_DOUBLE_WIDTH]);
2438 const uint8_t ukm[EC_512_WIDTH],
2439 uint8_t out[EC_512_WIDTH]);
2471 const uint8_t ukm[EC_512_WIDTH],
2472 uint8_t out[EC_256_WIDTH]);
2552 uint8_t res[STREEBOG256_RESULT_SIZE]);
2568 uint8_t res[STREEBOG256_RESULT_SIZE]);
2656 uint8_t res[STREEBOG512_RESULT_SIZE]);
2672 uint8_t res[STREEBOG512_RESULT_SIZE]);
2711 const uint8_t key[SYMMETRIC_KEY_SIZE]);
2761 uint8_t res[KUZNYECHIK_MAC_RESULT_SIZE]);
2779 const uint8_t code[KUZNYECHIK_MAC_RESULT_SIZE]);
2818 const uint8_t key[SYMMETRIC_KEY_SIZE]);
2868 uint8_t res[MAGMA_MAC_RESULT_SIZE]);
2886 const uint8_t code[MAGMA_MAC_RESULT_SIZE]);
2929 const uint8_t key[SYMMETRIC_KEY_SIZE],
2982 const uint8_t key[SYMMETRIC_KEY_SIZE],
3021 #endif // __cplusplus
void magma_drop(Magma cipher)
Уничтожить контекст.
void magma_mac_update(MagmaMac state, const uint8_t *msg, uintptr_t len)
Обновить состояние режиму выработки имитовставки.
void streebog512_reset(Streebog512 state)
Сбросить состояние функции хэширования.
intptr_t ec512_public_key_from_bytes(Ec512 cid, const uint8_t bytes[EC_512_DOUBLE_WIDTH], Ec512PublicKey pk)
Десериалировать открытый ключ.
void magma_encrypt_block(Magma cipher, uint8_t block[MAGMA_BLOCK_SIZE])
Зашифровать блок данных.
#define STREEBOG256_RESULT_SIZE
Длина хэш-кода Streebog256 (в байтах)
void kuznyechik_cfb_drop(KuznyechikCfb cipher)
Уничтожить контекст шифра.
void magma_ecb_new(MagmaEcb dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать контекст блочного шифра.
void streebog512_new(Streebog512 dst)
Создать состояние функции хэширования.
void magma_mac_finalize_reset(MagmaMac state, uint8_t res[MAGMA_MAC_RESULT_SIZE])
Финализировать состояние режима выработки имитовставки и заменить его новым.
#define MAGMA_CBC_NONCE_SIZE
Размер синхропосылки MagmaCbc (в байтах)
#define KUZNYECHIK_MGM_NONCE_SIZE
Размер синхропосылки KuznyechikMgm (в байтах)
uint8_t KuznyechikCtr[KUZNYECHIK_CTR_SIZE]
Потоковый шифр с длиной блока 128 бит в режиме гаммирования.
#define MAGMA_CFB_NONCE_SIZE
Размер синхропосылки MagmaCfb (в байтах)
void kuznyechik_ecb_encrypt_blocks(KuznyechikEcb cipher, uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t blocks_len)
Зашифровать массив блоков
intptr_t ec256_public_key_from_bytes(Ec256 cid, const uint8_t bytes[EC_256_DOUBLE_WIDTH], Ec256PublicKey pk)
Десериалировать открытый ключ.
uint8_t MagmaOfb[MAGMA_OFB_SIZE]
Потоковый шифр с длиной блока 64 бит в режиме гаммирования с обратной связью по выходу с размером син...
uint8_t MagmaEcb[MAGMA_ECB_SIZE]
Блочный шифр с длиной блока 64 бит в режиме простой замены.
intptr_t ec256_private_key_from_bytes(Ec256 cid, const uint8_t bytes[EC_256_WIDTH], Ec256PrivateKey sk)
Десериалировать закрытый ключ.
intptr_t magma_ctr_seek(MagmaCtr cipher, uint64_t pos)
Установить позицию ключевого потока шифра.
intptr_t magma_cbc_decrypt_pad(MagmaCbc cipher, uint8_t *buf, uintptr_t buf_len)
Расшифровать сообщение.
void magma_mac_finalize(MagmaMac state, uint8_t res[MAGMA_MAC_RESULT_SIZE])
Финализировать состояние режима выработки имитовставки.
void magma_ecb_drop(MagmaEcb cipher)
Уничтожить контекст шифра.
intptr_t kuznyechik_ctr_apply_keystream(KuznyechikCtr cipher, uint8_t *buf, uintptr_t buf_len)
Гаммировать сообщение ключевым потоком шифра.
void magma_ofb_apply_keystream(MagmaOfb cipher, uint8_t *buf, uintptr_t buf_len)
Гаммировать сообщение ключевым потоком шифра.
#define EC_256_DOUBLE_WIDTH
Длина сериализованного открытого ключа и подписи кривых Ec256 (в байтах)
intptr_t kuznyechik_mgm_decrypt(KuznyechikMgm cipher, const uint8_t nonce[KUZNYECHIK_MGM_NONCE_SIZE], const uint8_t *aad, uintptr_t aad_len, uint8_t *buf, uintptr_t buf_len, const uint8_t tag[KUZNYECHIK_MGM_TAG_SIZE])
Расшифровать сообщение с присоединёнными данными.
void kuznyechik_ofb_drop(KuznyechikOfb cipher)
Уничтожить контекст шифра.
#define MAGMA_MAC_SIZE
Размер состояния MagmaMac (в байтах)
intptr_t ec256_get_public_key(Ec256 cid, Ec256PrivateKey sk, Ec256PublicKey pk)
Получить открытый ключ.
void kuznyechik_decrypt_block(Kuznyechik cipher, uint8_t block[KUZNYECHIK_BLOCK_SIZE])
Расшифровать блок данных.
void magma_ofb_new(MagmaOfb dst, const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[MAGMA_OFB_NONCE_SIZE])
Создать контекст потокового шифра.
void kuznyechik_encrypt_block(Kuznyechik cipher, uint8_t block[KUZNYECHIK_BLOCK_SIZE])
Зашифровать блок данных.
void magma_ecb_decrypt_blocks(MagmaEcb cipher, uint8_t blocks[MAGMA_BLOCK_SIZE], uintptr_t blocks_len)
Расшифровать массив блоков.
void streebog512_digest(const uint8_t *msg, uintptr_t len, uint8_t res[STREEBOG512_RESULT_SIZE])
Хэшировать сообщение.
#define KUZNYECHIK_MGM_SIZE
Размер контекста KuznyechikMgm (в байтах)
void kuznyechik_mac_reset(KuznyechikMac state)
Сбросить состояние режима выработки имитовставки.
void kuznyechik_encrypt_blocks(Kuznyechik cipher, uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t len)
Зашифровать массив блоков.
intptr_t ec512_dsa_verify_hash(Ec512 cid, Ec512PublicKey pk, const uint8_t hash[EC_512_WIDTH], const uint8_t signature[EC_512_DOUBLE_WIDTH])
Проверить подпись хэша сообщения.
intptr_t ec512_gen_private_key(Ec512 cid, Ec512PrivateKey sk, const uint8_t rand_bytes[EC_512_WIDTH])
Создать закрытый ключ.
void magma_ctr_drop(MagmaCtr cipher)
Уничтожить контекст шифра.
void magma_new(Magma dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать контекст блочного шифра.
uintptr_t Ec256
Алгоритмы формирования, проверки электронной цифровой подписи и выработки общих ключей.
uint64_t kuznyechik_ctr_get_pos(KuznyechikCtr cipher)
Получить позицию ключевого потока шифра.
uint8_t KuznyechikCfb[KUZNYECHIK_CFB_SIZE]
Потоковый шифр с длиной блока 128 бит в режиме гаммирования с обратной связью по шифртексту с размеро...
uint8_t Streebog512[STREEBOG512_SIZE]
Функция хэширования с длиной хэш-кода 512 бит.
intptr_t ec512_private_key_to_bytes(Ec512 cid, Ec512PrivateKey sk, uint8_t bytes[EC_512_WIDTH])
Сериализовать закрытый ключ.
void kuznyechik_cbc_drop(KuznyechikCbc cipher)
Уничтожить контекст шифра.
intptr_t ec512_dsa_sign(Ec512 cid, Ec512PrivateKey sk, const uint8_t *msg, uintptr_t msg_len, const uint8_t rand_bytes[EC_512_WIDTH], uint8_t signature[EC_512_DOUBLE_WIDTH])
Подписать сообщение.
intptr_t ec512_private_key_from_bytes(Ec512 cid, const uint8_t bytes[EC_512_WIDTH], Ec512PrivateKey sk)
Десериалировать закрытый ключ.
uintptr_t Ec512
Алгоритмы формирования, проверки электронной цифровой подписи и выработки общих ключей.
#define KUZNYECHIK_CBC_SIZE
Размер контекста KuznyechikCbc (в байтах)
#define KUZNYECHIK_BLOCK_SIZE
Размер блока шифра Kuznyechik (в байтах)
intptr_t ec512_get_public_key(Ec512 cid, Ec512PrivateKey sk, Ec512PublicKey pk)
Получить открытый ключ.
void streebog256_finalize(Streebog256 state, uint8_t res[STREEBOG256_RESULT_SIZE])
Финализировать состояние функции хэширования.
intptr_t ec256_dsa_verify(Ec256 cid, Ec256PublicKey pk, const uint8_t *msg, uintptr_t msg_len, const uint8_t signature[EC_256_DOUBLE_WIDTH])
Проверить подпись сообщения.
uint8_t MagmaCtr[MAGMA_CTR_SIZE]
Потоковый шифр с длиной блока 64 бит в режиме гаммирования.
#define KUZNYECHIK_MAC_RESULT_SIZE
Длина имитовставки KuznyechikMac (в байтах)
intptr_t magma_ecb_decrypt_pad(MagmaEcb cipher, uint8_t *buf, uintptr_t buf_len)
Расшифровать сообщение.
uint8_t MagmaMac[MAGMA_MAC_SIZE]
Режим выработки имитовставки с использованием шифра с длиной блока 64 бит.
#define EC_512_DOUBLE_WIDTH
Длина сериализованного открытого ключа и подписи кривых Ec512 (в байтах)
#define MAGMA_CFB_SIZE
Размер контекста MagmaCfb (в байтах)
void kuznyechik_ofb_new(KuznyechikOfb dst, const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[KUZNYECHIK_OFB_NONCE_SIZE])
Создать контекст потокового шифра.
#define EC_512_WIDTH
Длина закрытого ключа и хэша сообщения кривых Ec512 (в байтах)
void streebog512_finalize_reset(Streebog512 state, uint8_t res[STREEBOG512_RESULT_SIZE])
Финализировать состояние функции хэширования и заменить его новым.
#define STREEBOG256_SIZE
Размер состояния Streebog256 (в байтах)
intptr_t kuznyechik_cbc_encrypt_pad(KuznyechikCbc cipher, uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
Зашифровать сообщение.
uint8_t Magma[MAGMA_SIZE]
Блочный шифр с длиной блока 64 бит.
uint8_t Kuznyechik[KUZNYECHIK_SIZE]
Блочный шифр с длиной блока 128 бит.
#define EC_256_PUBLIC_KEY_SIZE
Длина несериализованного открытого ключа кривых Ec256 (в байтах)
void kuznyechik_mgm_drop(KuznyechikMgm cipher)
Уничтожить контекст шифра
void streebog512_finalize(Streebog512 state, uint8_t res[STREEBOG512_RESULT_SIZE])
Финализировать состояние функции хэширования.
void kuznyechik_cfb_encrypt(KuznyechikCfb cipher, uint8_t *buf, uintptr_t buf_len)
Зашифровать сообщение.
bool kuznyechik_mac_verify(KuznyechikMac state, const uint8_t code[KUZNYECHIK_MAC_RESULT_SIZE])
Проверить целостность данных.
intptr_t kuznyechik_cbc_decrypt_pad(KuznyechikCbc cipher, uint8_t *buf, uintptr_t buf_len)
Расшифровать сообщение.
void kuznyechik_ctr_new(KuznyechikCtr dst, const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[KUZNYECHIK_CTR_NONCE_SIZE])
Создать контекст потокового шифра.
uint8_t Ec256PublicKey[EC_256_PUBLIC_KEY_SIZE]
Несериализованный открытый ключ кривых Ec256 длиной EC_256_PUBLIC_KEY_SIZE и выравниванием EC_256_PUB...
intptr_t ec256_dsa_verify_hash(Ec256 cid, Ec256PublicKey pk, const uint8_t hash[EC_256_WIDTH], const uint8_t signature[EC_256_DOUBLE_WIDTH])
Проверить подпись хэша сообщения.
void kuznyechik_ecb_drop(KuznyechikEcb cipher)
Уничтожить контекст шифра.
void magma_decrypt_block(Magma cipher, uint8_t block[MAGMA_BLOCK_SIZE])
Расшифровать блок данных.
intptr_t magma_cbc_encrypt_pad(MagmaCbc cipher, uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
Зашифровать сообщение.
#define KUZNYECHIK_CBC_NONCE_SIZE
Размер синхропосылки KuznyechikCbc (в байтах)
void magma_cfb_drop(MagmaCfb cipher)
Уничтожить контекст шифра.
intptr_t kuznyechik_mgm_encrypt(KuznyechikMgm cipher, const uint8_t nonce[KUZNYECHIK_MGM_NONCE_SIZE], const uint8_t *aad, uintptr_t aad_len, uint8_t *buf, uintptr_t buf_len, uint8_t tag[KUZNYECHIK_MGM_TAG_SIZE])
Зашифровать сообщение с присоединёнными данными.
#define KUZNYECHIK_CTR_NONCE_SIZE
Размер синхропосылки KuznyechikCtr (в байтах)
void kuznyechik_drop(Kuznyechik cipher)
Уничтожить контекст.
void kuznyechik_mac_drop(KuznyechikMac state)
Уничтожить состояние режима выработки имитовставки.
uint8_t MagmaCbc[MAGMA_CBC_SIZE]
Блочный шифр с длиной блока 64 бит в режиме простой замены с зацеплением с размером синхропосылки 8 б...
void kuznyechik_ofb_apply_keystream(KuznyechikOfb cipher, uint8_t *buf, uintptr_t buf_len)
Гаммировать сообщение ключевым потоком шифра.
#define MAGMA_CTR_NONCE_SIZE
Размер синхропосылки MagmaCtr (в байтах)
intptr_t magma_ctr_apply_keystream(MagmaCtr cipher, uint8_t *buf, uintptr_t buf_len)
Гаммировать сообщение ключевым потоком шифра.
#define KUZNYECHIK_SIZE
Размер контекста Kuznyechik (в байтах)
intptr_t kuznyechik_ctr_seek(KuznyechikCtr cipher, uint64_t pos)
Установить позицию ключевого потока шифра.
uint8_t Streebog256[STREEBOG256_SIZE]
Функция хэширования с длиной хэш-кода 256 бит.
uint8_t KuznyechikCbc[KUZNYECHIK_CBC_SIZE]
Блочный шифр с длиной блока 128 бит в режиме простой замены с зацеплением с размером синхропосылки 16...
void magma_mac_new(MagmaMac dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать состояние режима выработки имитовставки.
void magma_decrypt_blocks(Magma cipher, uint8_t blocks[MAGMA_BLOCK_SIZE], uintptr_t len)
Расшифровать массив блоков.
uint8_t KuznyechikEcb[KUZNYECHIK_ECB_SIZE]
Блочный шифр с длиной блока 128 бит в режиме простой замены.
#define KUZNYECHIK_MGM_TAG_SIZE
Размер имитовставки KuznyechikMgm (в байтах)
#define STREEBOG512_RESULT_SIZE
Длина хэш-кода Streebog512 (в байтах)
void kuznyechik_mac_new(KuznyechikMac dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать состояние режима выработки имитовставки.
void kuznyechik_cfb_decrypt(KuznyechikCfb cipher, uint8_t *buf, uintptr_t buf_len)
Расшифровать сообщение.
intptr_t ec256_dsa_sign_hash(Ec256 cid, Ec256PrivateKey sk, const uint8_t hash[EC_256_WIDTH], const uint8_t rand_bytes[EC_256_WIDTH], uint8_t signature[EC_256_DOUBLE_WIDTH])
Подписать хэш сообщения.
#define MAGMA_OFB_SIZE
Размер контекста MagmaOfb (в байтах)
uint8_t Ec512PublicKey[EC_512_PUBLIC_KEY_SIZE]
Несериализованный открытый ключ кривых Ec512 длиной EC_512_PUBLIC_KEY_SIZE и выравниванием EC_512_PUB...
void kuznyechik_cbc_encrypt_blocks(KuznyechikCbc cipher, uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t blocks_len)
Зашифровать массив блоков.
intptr_t ec256_gen_private_key(Ec256 cid, Ec256PrivateKey sk, const uint8_t rand_bytes[EC_256_WIDTH])
Создать закрытый ключ.
void streebog512_update(Streebog512 state, const uint8_t *msg, uintptr_t len)
Обновить состояние функции хэширования.
#define MAGMA_SIZE
Размер контекста Magma (в байтах)
void kuznyechik_mac_finalize_reset(KuznyechikMac state, uint8_t res[KUZNYECHIK_MAC_RESULT_SIZE])
Финализировать состояние режима выработки имитовставки и заменить его новым.
#define SYMMETRIC_KEY_SIZE
Размер ключа симметричного шифра (в байтах)
intptr_t magma_ecb_encrypt_pad(MagmaEcb cipher, uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
Зашифровать сообщение.
void streebog256_finalize_reset(Streebog256 state, uint8_t res[STREEBOG256_RESULT_SIZE])
Финализировать состояние функции хэширования и заменить его новым.
void magma_ctr_new(MagmaCtr dst, const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[MAGMA_CTR_NONCE_SIZE])
Создать контекст потокового шифра.
void magma_cbc_drop(MagmaCbc cipher)
Уничтожить контекст шифра.
bool magma_mac_verify(MagmaMac state, const uint8_t code[MAGMA_MAC_RESULT_SIZE])
Проверить целостность данных.
void streebog256_update(Streebog256 state, const uint8_t *msg, uintptr_t len)
Обновить состояние функции хэширования.
intptr_t ec512_vko256(Ec512 cid, Ec512PrivateKey sk, Ec512PublicKey pk, const uint8_t ukm[EC_512_WIDTH], uint8_t out[EC_256_WIDTH])
Выработать общий ключ.
uint64_t magma_ctr_get_pos(MagmaCtr cipher)
Получить позицию ключевого потока шифра.
void kuznyechik_cbc_new(KuznyechikCbc dst, const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[KUZNYECHIK_CBC_NONCE_SIZE])
Создать контекст блочного шифра.
void kuznyechik_mac_finalize(KuznyechikMac state, uint8_t res[KUZNYECHIK_MAC_RESULT_SIZE])
Финализировать состояние режима выработки имитовставки.
void kuznyechik_mgm_new(KuznyechikMgm dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать контекст AEAD.
void streebog256_digest(const uint8_t *msg, uintptr_t len, uint8_t res[STREEBOG256_RESULT_SIZE])
Хэшировать сообщение.
void ec512_private_key_drop(Ec512PrivateKey sk)
Уничтожить закрытый ключ.
void kuznyechik_ecb_new(KuznyechikEcb dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать контекст блочного шифра.
#define MAGMA_ECB_SIZE
Размер контекста MagmaEcb (в байтах)
intptr_t ec512_dsa_sign_hash(Ec512 cid, Ec512PrivateKey sk, const uint8_t hash[EC_512_WIDTH], const uint8_t rand_bytes[EC_512_WIDTH], uint8_t signature[EC_512_DOUBLE_WIDTH])
Подписать хэш сообщения.
void kuznyechik_cfb_new(KuznyechikCfb dst, const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[KUZNYECHIK_CFB_NONCE_SIZE])
Создать контекст потокового шифра.
void magma_cbc_new(MagmaCbc dst, const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[MAGMA_CBC_NONCE_SIZE])
Создать контекст блочного шифра.
intptr_t ec256_private_key_to_bytes(Ec256 cid, Ec256PrivateKey sk, uint8_t bytes[EC_256_WIDTH])
Сериализовать закрытый ключ.
#define MAGMA_MAC_RESULT_SIZE
Длина имитовставки MagmaMac (в байтах)
#define KUZNYECHIK_OFB_NONCE_SIZE
Размер синхропосылки KuznyechikOfb (в байтах)
#define KUZNYECHIK_CFB_SIZE
Размер контекста KuznyechikCfb (в байтах)
void streebog256_reset(Streebog256 state)
Сбросить состояние функции хэширования.
void magma_cfb_encrypt(MagmaCfb cipher, uint8_t *buf, uintptr_t buf_len)
Зашифровать сообщение.
#define MAGMA_OFB_NONCE_SIZE
Размер синхропосылки MagmaOfb (в байтах)
#define KUZNYECHIK_CFB_NONCE_SIZE
Размер синхропосылки KuznyechikCfb (в байтах)
intptr_t kuznyechik_ecb_encrypt_pad(KuznyechikEcb cipher, uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
Зашифровать сообщение.
intptr_t ec512_public_key_to_bytes(Ec512 cid, Ec512PublicKey pk, uint8_t bytes[EC_512_DOUBLE_WIDTH])
Сериализовать открытый ключ.
void streebog512_drop(Streebog512 state)
Уничтожить состояние функции хэширования.
#define KUZNYECHIK_ECB_SIZE
Размер контекста KuznyechikEcb (в байтах)
void magma_cfb_new(MagmaCfb dst, const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[MAGMA_CFB_NONCE_SIZE])
Создать контекст потокового шифра.
#define MAGMA_CTR_SIZE
Размер контекста MagmaCtr (в байтах)
intptr_t kuznyechik_ecb_decrypt_pad(KuznyechikEcb cipher, uint8_t *buf, uintptr_t buf_len)
Расшифровать сообщение.
void kuznyechik_mac_update(KuznyechikMac state, const uint8_t *msg, uintptr_t len)
Обновить состояние режиму выработки имитовставки.
#define MAGMA_BLOCK_SIZE
Размер блока Magma (в байтах)
void magma_encrypt_blocks(Magma cipher, uint8_t blocks[MAGMA_BLOCK_SIZE], uintptr_t len)
Зашифровать массив блоков.
uint8_t KuznyechikMac[KUZNYECHIK_MAC_SIZE]
Режим выработки имитовставки с использованием шифра с длиной блока 128 бит.
void streebog256_new(Streebog256 dst)
Создать состояние функции хэширования.
void magma_mac_reset(MagmaMac state)
Сбросить состояние режима выработки имитовставки.
void magma_ecb_encrypt_blocks(MagmaEcb cipher, uint8_t blocks[MAGMA_BLOCK_SIZE], uintptr_t blocks_len)
Зашифровать массив блоков.
intptr_t ec512_dsa_verify(Ec512 cid, Ec512PublicKey pk, const uint8_t *msg, uintptr_t msg_len, const uint8_t signature[EC_512_DOUBLE_WIDTH])
Проверить подпись сообщения.
void magma_mac_drop(MagmaMac state)
Уничтожить состояние режима выработки имитовставки.
void kuznyechik_ctr_drop(KuznyechikCtr cipher)
Уничтожить контекст шифра.
#define KUZNYECHIK_MAC_SIZE
Размер состояния KuznyechikMac (в байтах)
void streebog256_drop(Streebog256 state)
Уничтожить состояние функции хэширования.
void magma_ofb_drop(MagmaOfb cipher)
Уничтожить контекст шифра.
void kuznyechik_new(Kuznyechik dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать контекст блочного шифра.
uint8_t Ec512PrivateKey[EC_512_WIDTH]
Несериализованный закрытый ключ кривых Ec512 длиной EC_512_WIDTH и выравниванием EC_512_PRIVATE_KEY_A...
#define KUZNYECHIK_OFB_SIZE
Размер контекста KuznyechikOfb (в байтах)
void magma_cbc_decrypt_blocks(MagmaCbc cipher, uint8_t blocks[MAGMA_BLOCK_SIZE], uintptr_t blocks_len)
Расшифровать массив блоков.
intptr_t ec256_dsa_sign(Ec256 cid, Ec256PrivateKey sk, const uint8_t *msg, uintptr_t msg_len, const uint8_t rand_bytes[EC_256_WIDTH], uint8_t signature[EC_256_DOUBLE_WIDTH])
Подписать сообщение.
intptr_t ec256_public_key_to_bytes(Ec256 cid, Ec256PublicKey pk, uint8_t bytes[EC_256_DOUBLE_WIDTH])
Сериализовать открытый ключ.
void kuznyechik_ecb_decrypt_blocks(KuznyechikEcb cipher, uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t blocks_len)
Расшифровать массив блоков.
uint8_t KuznyechikMgm[KUZNYECHIK_MGM_SIZE]
Блочный шифр с длиной блока 128 бит в режиме работы блочных шифров, реализующим аутентифицирующее шиф...
uint8_t KuznyechikOfb[KUZNYECHIK_OFB_SIZE]
Потоковый шифр с длиной блока 128 бит в режиме гаммирования с обратной связью по выходу с размером си...
intptr_t ec512_vko512(Ec512 cid, Ec512PrivateKey sk, Ec512PublicKey pk, const uint8_t ukm[EC_512_WIDTH], uint8_t out[EC_512_WIDTH])
Выработать общий ключ.
void magma_cbc_encrypt_blocks(MagmaCbc cipher, uint8_t blocks[MAGMA_BLOCK_SIZE], uintptr_t blocks_len)
Зашифровать массив блоков.
intptr_t ec256_vko256(Ec256 cid, Ec256PrivateKey sk, Ec256PublicKey pk, const uint8_t ukm[EC_256_WIDTH], uint8_t out[EC_256_WIDTH])
Выработать общий ключ.
#define EC_512_PUBLIC_KEY_SIZE
Длина несериализованного открытого ключа кривых Ec512 (в байтах)
#define EC_256_WIDTH
Длина закрытого ключа и хэша сообщения кривых Ec256 (в байтах)
uint8_t MagmaCfb[MAGMA_CFB_SIZE]
Потоковый шифр с длиной блока 64 бит в режиме гаммирования с обратной связью по шифртексту с размером...
#define KUZNYECHIK_CTR_SIZE
Размер контекста KuznyechikCtr (в байтах)
void kuznyechik_cbc_decrypt_blocks(KuznyechikCbc cipher, uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t blocks_len)
Расшифровать массив блоков.
uint8_t Ec256PrivateKey[EC_256_WIDTH]
Несериализованный закрытый ключ кривых Ec256 длиной EC_256_WIDTH и выравниванием EC_256_PRIVATE_KEY_A...
void kuznyechik_decrypt_blocks(Kuznyechik cipher, uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t len)
Расшифровать массив блоков.
#define STREEBOG512_SIZE
Размер состояния Streebog512 (в байтах)
void ec256_private_key_drop(Ec256PrivateKey sk)
Уничтожить закрытый ключ.
#define MAGMA_CBC_SIZE
Размер контекста MagmaCbc (в байтах)
void magma_cfb_decrypt(MagmaCfb cipher, uint8_t *buf, uintptr_t buf_len)
Расшифровать сообщение.