13 #if __cplusplus < 201402L
14 template <std::
size_t Len, std::
size_t Align>
17 template <std::
size_t Len, std::
size_t Align>
42 explicit KuznyechikMgm_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key) noexcept
88 intptr_t
encrypt(
const std::array<uint8_t, KUZNYECHIK_MGM_NONCE_SIZE> &nonce,
89 const std::vector<uint8_t> &aad,
90 std::vector<uint8_t> &buf,
91 std::array<uint8_t, KUZNYECHIK_MGM_TAG_SIZE> &tag)
const noexcept
93 return kuznyechik_mgm_encrypt(*ptr(), nonce.data(), aad.data(), aad.size(), buf.data(), buf.size(), tag.data());
138 intptr_t
decrypt(
const std::array<uint8_t, KUZNYECHIK_MGM_NONCE_SIZE> &nonce,
139 const std::vector<uint8_t> &aad,
140 std::vector<uint8_t> &buf,
141 const std::array<uint8_t, KUZNYECHIK_MGM_TAG_SIZE> &tag)
const noexcept
143 return kuznyechik_mgm_decrypt(*ptr(), nonce.data(), aad.data(), aad.size(), buf.data(), buf.size(), tag.data());
193 kuznyechik_cbc_new(*ptr(), reinterpret_cast<const uint8_t *>(key), reinterpret_cast<const uint8_t *>(nonce));
205 explicit KuznyechikCbc_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key,
const std::array<uint8_t, KUZNYECHIK_CBC_NONCE_SIZE> &nonce) noexcept
266 intptr_t
encrypt_pad(uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
const noexcept
287 intptr_t
decrypt_pad(uint8_t *buf, uintptr_t buf_len)
const noexcept
335 magma_cbc_new(*ptr(), reinterpret_cast<const uint8_t *>(key), reinterpret_cast<const uint8_t *>(nonce));
347 explicit MagmaCbc_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key,
const std::array<uint8_t, MAGMA_CBC_NONCE_SIZE> &nonce) noexcept
408 intptr_t
encrypt_pad(uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
const noexcept
429 intptr_t
decrypt_pad(uint8_t *buf, uintptr_t buf_len)
const noexcept
438 return reinterpret_cast<MagmaCbc *
>(&data_);
477 kuznyechik_cfb_new(*ptr(), reinterpret_cast<const uint8_t *>(key), reinterpret_cast<const uint8_t *>(nonce));
489 KuznyechikCfb_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key,
const std::array<uint8_t, KUZNYECHIK_CFB_NONCE_SIZE> &nonce) noexcept
510 void encrypt(uint8_t *buf, uintptr_t buf_len) noexcept
522 void encrypt(std::vector<uint8_t> &buf) noexcept
524 encrypt(buf.data(), buf.size());
537 void decrypt(uint8_t *buf, uintptr_t buf_len) noexcept
549 void decrypt(std::vector<uint8_t> &buf) noexcept
551 decrypt(buf.data(), buf.size());
591 magma_cfb_new(*ptr(), reinterpret_cast<const uint8_t *>(key), reinterpret_cast<const uint8_t *>(nonce));
603 MagmaCfb_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key,
const std::array<uint8_t, MAGMA_CFB_NONCE_SIZE> &nonce) noexcept
624 void encrypt(uint8_t *buf, uintptr_t buf_len) noexcept
636 void encrypt(std::vector<uint8_t> &buf) noexcept
638 encrypt(buf.data(), buf.size());
651 void decrypt(uint8_t *buf, uintptr_t buf_len) noexcept
663 void decrypt(std::vector<uint8_t> &buf) noexcept
665 decrypt(buf.data(), buf.size());
671 return reinterpret_cast<MagmaCfb *
>(&data_);
712 explicit Kuznyechik_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key) noexcept
784 return reinterpret_cast<Kuznyechik *
>(&data_);
815 magma_new(*ptr(), reinterpret_cast<const uint8_t *>(key));
825 explicit Magma_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key) noexcept
895 Magma *ptr() noexcept
897 return reinterpret_cast<Magma *
>(&data_);
930 kuznyechik_ctr_new(*ptr(), reinterpret_cast<const uint8_t *>(key), reinterpret_cast<const uint8_t *>(nonce));
942 KuznyechikCtr_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key,
const std::array<uint8_t, KUZNYECHIK_CTR_NONCE_SIZE> &nonce) noexcept
996 intptr_t
seek(uint64_t pos) noexcept
1054 magma_ctr_new(*ptr(), reinterpret_cast<const uint8_t *>(key), reinterpret_cast<const uint8_t *>(nonce));
1066 MagmaCtr_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key,
const std::array<uint8_t, MAGMA_CTR_NONCE_SIZE> &nonce) noexcept
1120 intptr_t
seek(uint64_t pos) noexcept
1140 return reinterpret_cast<MagmaCtr *
>(&data_);
1249 intptr_t
encrypt_pad(uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
const noexcept
1316 magma_ecb_new(*ptr(), reinterpret_cast<const uint8_t *>(key));
1327 explicit MagmaEcb_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key) noexcept
1388 intptr_t
encrypt_pad(uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
const noexcept
1418 return reinterpret_cast<MagmaEcb *
>(&data_);
1484 static std::array<uint8_t, STREEBOG256_RESULT_SIZE>
digest(
const uint8_t *msg, uintptr_t len) noexcept
1486 std::array<uint8_t, STREEBOG256_RESULT_SIZE> result {};
1487 digest(msg, len, result.data());
1501 void update(
const uint8_t *msg, uintptr_t len) noexcept
1513 void update(
const std::vector<uint8_t> &message) noexcept
1540 std::array<uint8_t, STREEBOG256_RESULT_SIZE>
finalize() const noexcept
1542 std::array<uint8_t, STREEBOG256_RESULT_SIZE> result {};
1573 std::array<uint8_t, STREEBOG256_RESULT_SIZE> result {};
1657 static std::array<uint8_t, STREEBOG512_RESULT_SIZE>
digest(
const uint8_t *msg, uintptr_t len) noexcept
1659 std::array<uint8_t, STREEBOG512_RESULT_SIZE> result {};
1660 digest(msg, len, result.data());
1674 void update(
const uint8_t *msg, uintptr_t len) noexcept
1686 void update(
const std::vector<uint8_t> &message) noexcept
1713 std::array<uint8_t, STREEBOG512_RESULT_SIZE>
finalize() const noexcept
1715 std::array<uint8_t, STREEBOG512_RESULT_SIZE> result {};
1746 std::array<uint8_t, STREEBOG512_RESULT_SIZE> result {};
1829 void update(
const uint8_t *msg, uintptr_t len) noexcept
1841 void update(
const std::vector<uint8_t> &message) noexcept
1869 std::array<uint8_t, KUZNYECHIK_MAC_RESULT_SIZE>
finalize() const noexcept
1871 std::array<uint8_t, KUZNYECHIK_MAC_RESULT_SIZE> result {};
1902 std::array<uint8_t, KUZNYECHIK_MAC_RESULT_SIZE> result {};
1932 bool verify(
const std::array<uint8_t, KUZNYECHIK_MAC_RESULT_SIZE> &code)
const noexcept
1994 explicit MagmaMac_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key) noexcept
2015 void update(
const uint8_t *msg, uintptr_t len) noexcept
2027 void update(
const std::vector<uint8_t> &message) noexcept
2055 std::array<uint8_t, MAGMA_MAC_RESULT_SIZE>
finalize() const noexcept
2057 std::array<uint8_t, MAGMA_MAC_RESULT_SIZE> result {};
2088 std::array<uint8_t, MAGMA_MAC_RESULT_SIZE> result {};
2118 bool verify(
const std::array<uint8_t, MAGMA_MAC_RESULT_SIZE> &code)
const noexcept
2141 return reinterpret_cast<MagmaMac *
>(&data_);
2187 KuznyechikOfb_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key,
const std::array<uint8_t, KUZNYECHIK_OFB_NONCE_SIZE> &nonce) noexcept
2276 MagmaOfb_t(
const std::array<uint8_t, SYMMETRIC_KEY_SIZE> &key,
const std::array<uint8_t, MAGMA_OFB_NONCE_SIZE> &nonce) noexcept
2319 return reinterpret_cast<MagmaOfb *
>(&data_);
2347 template <Gost3410_2012_512 CurveID>
2356 template <Gost3410_2012_512 CurveID>
2360 const static Ec512 cid =
static_cast<Ec512>(CurveID);
2412 std::array<uint8_t, EC_512_DOUBLE_WIDTH>
to_bytes() const noexcept
2414 std::array<uint8_t, EC_512_DOUBLE_WIDTH> bytes {};
2449 intptr_t
verify_hash(
const std::array<uint8_t, STREEBOG512_RESULT_SIZE> &hash,
2450 const std::array<uint8_t, EC_512_DOUBLE_WIDTH> &signature)
const noexcept
2452 return verify_hash(hash.data(), signature.data());
2486 intptr_t
verify(
const std::vector<uint8_t> &msg,
const std::array<uint8_t, EC_512_DOUBLE_WIDTH> &signature)
const noexcept
2488 return verify(msg.data(), msg.size(), signature.data());
2506 template <Gost3410_2012_512 CurveID>
2509 const static Ec512 cid =
static_cast<Ec512>(CurveID);
2599 return from_bytes(rand_bytes.data(), error_code);
2609 std::array<uint8_t, EC_512_WIDTH>
to_bytes() const noexcept
2611 std::array<uint8_t, EC_512_WIDTH> bytes {};
2650 const std::array<uint8_t, STREEBOG512_RESULT_SIZE> &hash,
2651 const std::array<uint8_t, EC_512_WIDTH> &rand_bytes,
2652 intptr_t &error_code)
const noexcept
2654 std::array<uint8_t, EC_512_DOUBLE_WIDTH> signature {};
2655 error_code =
sign_hash(hash.data(), rand_bytes.data(), signature.data());
2679 return ec512_dsa_sign(cid, *ptr(), msg, msg_len, rand_bytes, signature);
2693 intptr_t
sign(
const std::vector<uint8_t> &msg,
const std::array<uint8_t, EC_512_WIDTH> &rand_bytes, std::array<uint8_t, EC_512_DOUBLE_WIDTH> &signature)
const noexcept
2695 return sign(msg.data(), msg.size(), rand_bytes.data(), signature.data());
2709 std::array<uint8_t, EC_512_DOUBLE_WIDTH>
sign(
const std::vector<uint8_t> &msg,
const std::array<uint8_t, EC_512_WIDTH> &rand_bytes, intptr_t &error_code)
const noexcept
2711 std::array<uint8_t, EC_512_DOUBLE_WIDTH> signature {};
2712 error_code =
sign(msg, rand_bytes, signature);
2729 intptr_t &error_code)
const noexcept
2731 std::array<uint8_t, EC_256_WIDTH> out {};
2732 error_code =
ec512_vko256(cid, *ptr(), *other_pk.ptr(),
nullptr, out.data());
2760 intptr_t &error_code,
2763 std::array<uint8_t, EC_256_WIDTH> out {};
2764 error_code =
ec512_vko256(cid, *ptr(), *other_pk.ptr(), ukm, out.data());
2781 intptr_t &error_code)
const noexcept
2783 std::array<uint8_t, EC_512_WIDTH> out {};
2784 error_code =
ec512_vko512(cid, *ptr(), *other_pk.ptr(),
nullptr, out.data());
2812 intptr_t &error_code,
2815 std::array<uint8_t, EC_512_WIDTH> out {};
2816 error_code =
ec512_vko512(cid, *ptr(), *other_pk.ptr(), ukm, out.data());
2856 template <Gost3410_2012_256 CurveID>
2865 template <Gost3410_2012_256 CurveID>
2869 const static Ec256 cid =
static_cast<Ec256>(CurveID);
2921 std::array<uint8_t, EC_256_DOUBLE_WIDTH>
to_bytes() const noexcept
2923 std::array<uint8_t, EC_256_DOUBLE_WIDTH> bytes {};
2958 intptr_t
verify_hash(
const std::array<uint8_t, STREEBOG256_RESULT_SIZE> &hash,
2959 const std::array<uint8_t, EC_256_DOUBLE_WIDTH> &signature)
const noexcept
2961 return verify_hash(hash.data(), signature.data());
2995 intptr_t
verify(
const std::vector<uint8_t> &msg,
const std::array<uint8_t, EC_256_DOUBLE_WIDTH> &signature)
const noexcept
2997 return verify(msg.data(), msg.size(), signature.data());
3015 template <Gost3410_2012_256 CurveID>
3018 const static Ec256 cid =
static_cast<Ec256>(CurveID);
3108 return from_bytes(rand_bytes.data(), error_code);
3118 std::array<uint8_t, EC_256_WIDTH>
to_bytes() const noexcept
3120 std::array<uint8_t, EC_256_WIDTH> bytes {};
3159 const std::array<uint8_t, STREEBOG256_RESULT_SIZE> &hash,
3160 const std::array<uint8_t, EC_256_WIDTH> &rand_bytes,
3161 intptr_t &error_code)
const noexcept
3163 std::array<uint8_t, EC_256_DOUBLE_WIDTH> signature {};
3164 error_code =
sign_hash(hash.data(), rand_bytes.data(), signature.data());
3188 return ec256_dsa_sign(cid, *ptr(), msg, msg_len, rand_bytes, signature);
3202 intptr_t
sign(
const std::vector<uint8_t> &msg,
const std::array<uint8_t, EC_256_WIDTH> &rand_bytes, std::array<uint8_t, EC_256_DOUBLE_WIDTH> &signature)
const noexcept
3204 return sign(msg.data(), msg.size(), rand_bytes.data(), signature.data());
3218 std::array<uint8_t, EC_256_DOUBLE_WIDTH>
sign(
const std::vector<uint8_t> &msg,
const std::array<uint8_t, EC_256_WIDTH> &rand_bytes, intptr_t &error_code)
const noexcept
3220 std::array<uint8_t, EC_256_DOUBLE_WIDTH> signature {};
3221 error_code =
sign(msg, rand_bytes, signature);
3238 intptr_t &error_code)
const noexcept
3240 std::array<uint8_t, EC_256_WIDTH> out {};
3241 error_code =
ec256_vko256(cid, *ptr(), *other_pk.ptr(),
nullptr, out.data());
3269 intptr_t &error_code,
3272 std::array<uint8_t, EC_256_WIDTH> out {};
3273 error_code =
ec256_vko256(cid, *ptr(), *other_pk.ptr(), ukm, out.data());
void reset() noexcept
Сбросить состояние функции хэширования.
Ec512PrivateKey_t< CurveID > & operator=(const Ec512PrivateKey_t< CurveID > &)=default
Magma_t & operator=(const Magma_t &)=default
void apply_keystream(std::vector< uint8_t > &buf) noexcept
Гаммировать сообщение ключевым потоком шифра.
KuznyechikMac_t & operator=(const KuznyechikMac_t &)=default
intptr_t sign(const uint8_t *msg, uintptr_t msg_len, const uint8_t rand_bytes[EC_256_WIDTH], uint8_t signature[EC_256_DOUBLE_WIDTH]) const noexcept
Подписать сообщение.
void magma_drop(Magma cipher)
Уничтожить контекст.
KuznyechikMac_t(const uint8_t key[SYMMETRIC_KEY_SIZE]) noexcept
Создать состояние режима выработки имитовставки.
void magma_mac_update(MagmaMac state, const uint8_t *msg, uintptr_t len)
Обновить состояние режиму выработки имитовставки.
void encrypt_blocks(uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t len) noexcept
Зашифровать массив блоков.
typename std::aligned_storage< Len, Align >::type aligned_storage_t
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)
Уничтожить контекст шифра.
KuznyechikCtr_t(const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[KUZNYECHIK_CTR_NONCE_SIZE]) noexcept
Создать контекст потокового шифра.
#define GOST3410_2012_512C
Идентификатор кривой id-tc26-gost-3410-12-512-paramSetC, заданной в Р 1323565.1.024-2019.
void magma_ecb_new(MagmaEcb dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать контекст блочного шифра.
void streebog512_new(Streebog512 dst)
Создать состояние функции хэширования.
intptr_t sign(const uint8_t *msg, uintptr_t msg_len, const uint8_t rand_bytes[EC_512_WIDTH], uint8_t signature[EC_512_DOUBLE_WIDTH]) const noexcept
Подписать сообщение.
KuznyechikCbc_t(const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[KUZNYECHIK_CBC_NONCE_SIZE]) noexcept
Создать контекст блочного шифра.
void magma_mac_finalize_reset(MagmaMac state, uint8_t res[MAGMA_MAC_RESULT_SIZE])
Финализировать состояние режима выработки имитовставки и заменить его новым.
#define MAGMA_CBC_NONCE_SIZE
Размер синхропосылки MagmaCbc (в байтах)
MagmaCfb_t & operator=(const MagmaCfb_t &)=default
KuznyechikCtr_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key, const std::array< uint8_t, KUZNYECHIK_CTR_NONCE_SIZE > &nonce) noexcept
Создать контекст потокового шифра.
#define KUZNYECHIK_MGM_NONCE_SIZE
Размер синхропосылки KuznyechikMgm (в байтах)
Блочный шифр с длиной блока 128 бит в режиме простой замены с зацеплением с размером синхропосылки 16...
void encrypt_blocks(uint8_t(*blocks)[KUZNYECHIK_BLOCK_SIZE], uintptr_t len) noexcept
Зашифровать массив блоков.
void update(const uint8_t *msg, uintptr_t len) noexcept
Обновить состояние функции хэширования.
uint8_t KuznyechikCtr[KUZNYECHIK_CTR_SIZE]
Потоковый шифр с длиной блока 128 бит в режиме гаммирования.
static std::array< uint8_t, STREEBOG256_RESULT_SIZE > digest(const uint8_t *msg, uintptr_t len) noexcept
Хэшировать сообщение.
#define MAGMA_CFB_NONCE_SIZE
Размер синхропосылки MagmaCfb (в байтах)
std::array< uint8_t, EC_256_WIDTH > to_bytes() const noexcept
Сериализовать закрытый ключ.
Блочный шифр с длиной блока 64 бит в режиме простой замены с зацеплением с размером синхропосылки 8 б...
Идентификатор кривой id-tc26-gost-3410-12-512-paramSetB, заданной в Р 1323565.1.024-2019.
Streebog256_t & operator=(const Streebog256_t &)=default
Kuznyechik_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key) noexcept
Создать контекст блочного шифра.
void encrypt(std::vector< uint8_t > &buf) noexcept
Зашифровать сообщение.
MagmaCbc_t(const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[MAGMA_CBC_NONCE_SIZE]) noexcept
Создать контекст блочного шифра.
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)
Десериалировать открытый ключ.
std::array< uint8_t, MAGMA_MAC_RESULT_SIZE > finalize() const noexcept
Финализировать состояние режима выработки имитовставки.
uint8_t MagmaOfb[MAGMA_OFB_SIZE]
Потоковый шифр с длиной блока 64 бит в режиме гаммирования с обратной связью по выходу с размером син...
void finalize(uint8_t res[STREEBOG256_RESULT_SIZE]) const noexcept
Финализировать состояние функции хэширования.
static Ec256PublicKey_t< CurveID > from_bytes(const std::array< uint8_t, EC_256_DOUBLE_WIDTH > &bytes, intptr_t &error_code) noexcept
Десериалировать открытый ключ.
uint8_t MagmaEcb[MAGMA_ECB_SIZE]
Блочный шифр с длиной блока 64 бит в режиме простой замены.
Streebog512_t() noexcept
Создать состояние функции хэширования.
uint64_t get_pos() const noexcept
Получить позицию ключевого потока шифра.
MagmaCbc_t & operator=(const MagmaCbc_t &)=default
intptr_t ec256_private_key_from_bytes(Ec256 cid, const uint8_t bytes[EC_256_WIDTH], Ec256PrivateKey sk)
Десериалировать закрытый ключ.
KuznyechikCfb_t & operator=(const KuznyechikCfb_t &)=default
intptr_t apply_keystream(uint8_t *buf, uintptr_t buf_len) noexcept
Гаммировать сообщение ключевым потоком шифра.
intptr_t sign(const std::vector< uint8_t > &msg, const std::array< uint8_t, EC_512_WIDTH > &rand_bytes, std::array< uint8_t, EC_512_DOUBLE_WIDTH > &signature) const noexcept
Подписать сообщение.
KuznyechikCtr_t(const KuznyechikCtr_t &)=default
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])
Финализировать состояние режима выработки имитовставки.
MagmaEcb_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key) noexcept
Создать контекст блочного шифра.
void magma_ecb_drop(MagmaEcb cipher)
Уничтожить контекст шифра.
MagmaOfb_t & operator=(const MagmaOfb_t &)=default
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)
Гаммировать сообщение ключевым потоком шифра.
KuznyechikOfb_t & operator=(const KuznyechikOfb_t &)=default
KuznyechikOfb_t(const KuznyechikOfb_t &)=default
MagmaCtr_t & operator=(const MagmaCtr_t &)=default
#define EC_256_DOUBLE_WIDTH
Длина сериализованного открытого ключа и подписи кривых Ec256 (в байтах)
KuznyechikCbc_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key, const std::array< uint8_t, KUZNYECHIK_CBC_NONCE_SIZE > &nonce) noexcept
Создать контекст блочного шифра.
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)
Уничтожить контекст шифра.
MagmaMac_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key) noexcept
Создать состояние режима выработки имитовставки.
intptr_t ec256_get_public_key(Ec256 cid, Ec256PrivateKey sk, Ec256PublicKey pk)
Получить открытый ключ.
intptr_t decrypt_pad(uint8_t *buf, uintptr_t buf_len) const noexcept
Расшифровать сообщение.
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 encrypt_blocks(uint8_t(*blocks)[MAGMA_BLOCK_SIZE], uintptr_t blocks_len) noexcept
Зашифровать массив блоков.
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])
Хэшировать сообщение.
void kuznyechik_mac_reset(KuznyechikMac state)
Сбросить состояние режима выработки имитовставки.
Kuznyechik_t(const Kuznyechik_t &)=default
void kuznyechik_encrypt_blocks(Kuznyechik cipher, uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t len)
Зашифровать массив блоков.
Streebog512_t & operator=(const Streebog512_t &)=default
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])
Проверить подпись хэша сообщения.
KuznyechikCfb_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key, const std::array< uint8_t, KUZNYECHIK_CFB_NONCE_SIZE > &nonce) noexcept
Создать контекст потокового шифра.
intptr_t ec512_gen_private_key(Ec512 cid, Ec512PrivateKey sk, const uint8_t rand_bytes[EC_512_WIDTH])
Создать закрытый ключ.
void magma_ctr_drop(MagmaCtr cipher)
Уничтожить контекст шифра.
Ec256PrivateKey_t< CurveID > & operator=(const Ec256PrivateKey_t< CurveID > &)=default
void magma_new(Magma dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать контекст блочного шифра.
std::array< uint8_t, STREEBOG512_RESULT_SIZE > finalize_reset() noexcept
Финализировать состояние функции хэширования и заменить его новым.
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 decrypt_block(uint8_t block[KUZNYECHIK_BLOCK_SIZE]) noexcept
Расшифровать блок данных.
#define GOST3410_2012_512A
Идентификатор кривой id-tc26-gost-3410-12-512-paramSetA, заданной в Р 1323565.1.024-2019.
MagmaMac_t(const uint8_t key[SYMMETRIC_KEY_SIZE]) noexcept
Создать состояние режима выработки имитовставки.
intptr_t decrypt_pad(uint8_t *buf, uintptr_t buf_len) const noexcept
Расшифровать сообщение.
Ec256PublicKey_t< CurveID > get_public_key() const noexcept
Получить открытый ключ.
MagmaCtr_t(const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[MAGMA_CTR_NONCE_SIZE]) noexcept
Создать контекст потокового шифра.
intptr_t apply_keystream(std::vector< uint8_t > &buf) noexcept
Гаммировать сообщение ключевым потоком шифра.
std::array< uint8_t, EC_256_WIDTH > vko256(const Ec256PublicKey_t< CurveID > &other_pk, intptr_t &error_code, const uint8_t ukm[EC_256_WIDTH]) const noexcept
Выработать общий ключ.
void reset() noexcept
Сбросить состояние функции хэширования.
intptr_t decrypt_pad(uint8_t *buf, uintptr_t buf_len) const noexcept
Расшифровать сообщение.
void kuznyechik_cbc_drop(KuznyechikCbc cipher)
Уничтожить контекст шифра.
void decrypt(uint8_t *buf, uintptr_t buf_len) noexcept
Расшифровать сообщение.
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])
Подписать сообщение.
Потокововый шифр с длиной блока 64 бит в режиме гаммирования.
std::array< uint8_t, EC_512_DOUBLE_WIDTH > to_bytes() const noexcept
Сериализовать открытый ключ.
intptr_t ec512_private_key_from_bytes(Ec512 cid, const uint8_t bytes[EC_512_WIDTH], Ec512PrivateKey sk)
Десериалировать закрытый ключ.
uintptr_t Ec512
Алгоритмы формирования, проверки электронной цифровой подписи и выработки общих ключей.
#define KUZNYECHIK_BLOCK_SIZE
Размер блока шифра Kuznyechik (в байтах)
void decrypt_block(uint8_t block[MAGMA_BLOCK_SIZE]) noexcept
Расшифровать блок данных.
void reset() noexcept
Сбросить состояние режима выработки имитовставки.
intptr_t ec512_get_public_key(Ec512 cid, Ec512PrivateKey sk, Ec512PublicKey pk)
Получить открытый ключ.
KuznyechikEcb_t(const KuznyechikEcb_t &)=default
Блочный шифр с длиной блока 128 бит.
MagmaCfb_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key, const std::array< uint8_t, MAGMA_CFB_NONCE_SIZE > &nonce) noexcept
Создать контекст потокового шифра.
intptr_t encrypt_pad(uint8_t *buf, uintptr_t buf_len, uintptr_t pos) const noexcept
Зашифровать сообщение.
Потоковый шифр с длиной блока 128 бит в режиме гаммирования.
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 бит в режиме гаммирования.
Потоковый шифр с длиной блока 64 бит в режиме гаммирования с обратной связью по выходу с размером син...
Идентификатор кривой id-tc26-gost-3410-12-512-paramSetC, заданной в Р 1323565.1.024-2019.
#define KUZNYECHIK_MAC_RESULT_SIZE
Длина имитовставки KuznyechikMac (в байтах)
intptr_t magma_ecb_decrypt_pad(MagmaEcb cipher, uint8_t *buf, uintptr_t buf_len)
Расшифровать сообщение.
intptr_t verify(const std::vector< uint8_t > &msg, const std::array< uint8_t, EC_512_DOUBLE_WIDTH > &signature) const noexcept
Проверить подпись сообщения.
void encrypt(uint8_t *buf, uintptr_t buf_len) noexcept
Зашифровать сообщение.
static Ec512PublicKey_t< CurveID > from_bytes(const uint8_t bytes[EC_512_DOUBLE_WIDTH], intptr_t &error_code) noexcept
Десериалировать открытый ключ.
uint8_t MagmaMac[MAGMA_MAC_SIZE]
Режим выработки имитовставки с использованием шифра с длиной блока 64 бит.
#define EC_512_DOUBLE_WIDTH
Длина сериализованного открытого ключа и подписи кривых Ec512 (в байтах)
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 (в байтах)
std::array< uint8_t, EC_512_DOUBLE_WIDTH > sign_hash(const std::array< uint8_t, STREEBOG512_RESULT_SIZE > &hash, const std::array< uint8_t, EC_512_WIDTH > &rand_bytes, intptr_t &error_code) const noexcept
Подписать хэш сообщения.
void streebog512_finalize_reset(Streebog512 state, uint8_t res[STREEBOG512_RESULT_SIZE])
Финализировать состояние функции хэширования и заменить его новым.
void finalize_reset(uint8_t res[KUZNYECHIK_MAC_RESULT_SIZE]) noexcept
Финализировать состояние режима выработки имитовставки и заменить его новым.
intptr_t kuznyechik_cbc_encrypt_pad(KuznyechikCbc cipher, uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
Зашифровать сообщение.
KuznyechikCbc_t & operator=(const KuznyechikCbc_t &)=default
std::array< uint8_t, EC_256_DOUBLE_WIDTH > to_bytes() const noexcept
Сериализовать открытый ключ.
uint8_t Magma[MAGMA_SIZE]
Блочный шифр с длиной блока 64 бит.
Блочный шифр с длиной блока 64 бит.
uint8_t Kuznyechik[KUZNYECHIK_SIZE]
Блочный шифр с длиной блока 128 бит.
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)
Зашифровать сообщение.
MagmaEcb_t(const MagmaEcb_t &)=default
intptr_t decrypt_pad(uint8_t *buf, uintptr_t buf_len) const noexcept
Расшифровать сообщение.
bool kuznyechik_mac_verify(KuznyechikMac state, const uint8_t code[KUZNYECHIK_MAC_RESULT_SIZE])
Проверить целостность данных.
static Ec256PrivateKey_t< CurveID > from_bytes(const uint8_t bytes[EC_256_WIDTH], intptr_t &error_code) noexcept
Десериалировать закрытый ключ.
void encrypt_blocks(uint8_t(*blocks)[MAGMA_BLOCK_SIZE], uintptr_t len) noexcept
Зашифровать массив блоков.
intptr_t kuznyechik_cbc_decrypt_pad(KuznyechikCbc cipher, uint8_t *buf, uintptr_t buf_len)
Расшифровать сообщение.
KuznyechikOfb_t(const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[KUZNYECHIK_OFB_NONCE_SIZE]) noexcept
Создать контекст потокового шифра.
void kuznyechik_ctr_new(KuznyechikCtr dst, const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[KUZNYECHIK_CTR_NONCE_SIZE])
Создать контекст потокового шифра.
std::array< uint8_t, EC_256_DOUBLE_WIDTH > sign(const std::vector< uint8_t > &msg, const std::array< uint8_t, EC_256_WIDTH > &rand_bytes, intptr_t &error_code) const noexcept
Подписать сообщение.
~KuznyechikCbc_t() noexcept
static Ec512PrivateKey_t< CurveID > from_bytes(const std::array< uint8_t, EC_512_WIDTH > &rand_bytes, intptr_t &error_code) noexcept
Десериалировать закрытый ключ.
uint8_t Ec256PublicKey[EC_256_PUBLIC_KEY_SIZE]
Несериализованный открытый ключ кривых Ec256 длиной EC_256_PUBLIC_KEY_SIZE и выравниванием EC_256_PUB...
intptr_t sign_hash(const uint8_t hash[STREEBOG512_RESULT_SIZE], const uint8_t rand_bytes[EC_512_WIDTH], uint8_t signature[EC_512_DOUBLE_WIDTH]) const noexcept
Подписать хэш сообщения.
~Streebog256_t() noexcept
Режим выработки имитовставки с использованием шифра с длиной блока 64 бит.
Закрытый ключ эллиптических кривых.
intptr_t verify(const std::vector< uint8_t > &msg, const std::array< uint8_t, EC_256_DOUBLE_WIDTH > &signature) const noexcept
Проверить подпись сообщения.
Блочный шифр с длиной блока 128 бит в режиме работы блочных шифров, реализующим аутентифицирующее шиф...
intptr_t apply_keystream(std::vector< uint8_t > &buf) noexcept
Гаммировать сообщение ключевым потоком шифра.
#define GOST3410_2012_512B
Идентификатор кривой id-tc26-gost-3410-12-512-paramSetB, заданной в Р 1323565.1.024-2019.
void decrypt_blocks(uint8_t(*blocks)[KUZNYECHIK_BLOCK_SIZE], uintptr_t blocks_len) noexcept
Расшифровать массив блоков.
intptr_t encrypt_pad(uint8_t *buf, uintptr_t buf_len, uintptr_t pos) const noexcept
Зашифровать сообщение.
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])
Проверить подпись хэша сообщения.
Ec256PublicKey_t< CurveID > & operator=(const Ec256PublicKey_t< CurveID > &)=default
void kuznyechik_ecb_drop(KuznyechikEcb cipher)
Уничтожить контекст шифра.
intptr_t verify_hash(const uint8_t hash[STREEBOG512_RESULT_SIZE], const uint8_t signature[EC_512_DOUBLE_WIDTH]) const noexcept
Проверить подпись хэша сообщения.
void decrypt_blocks(uint8_t blocks[MAGMA_BLOCK_SIZE], uintptr_t len) noexcept
Расшифровать массив блоков.
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)
Зашифровать сообщение.
std::array< uint8_t, EC_256_WIDTH > vko256(const Ec512PublicKey_t< CurveID > &other_pk, intptr_t &error_code, const uint8_t ukm[EC_512_WIDTH]) const noexcept
Выработать общий ключ.
void encrypt(uint8_t *buf, uintptr_t buf_len) noexcept
Зашифровать сообщение.
#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])
Зашифровать сообщение с присоединёнными данными.
intptr_t verify(const uint8_t *msg, uintptr_t msg_len, const uint8_t signature[EC_512_DOUBLE_WIDTH]) const noexcept
Проверить подпись сообщения.
#define KUZNYECHIK_CTR_NONCE_SIZE
Размер синхропосылки KuznyechikCtr (в байтах)
void kuznyechik_drop(Kuznyechik cipher)
Уничтожить контекст.
Закрытый ключ эллиптических кривых.
void kuznyechik_mac_drop(KuznyechikMac state)
Уничтожить состояние режима выработки имитовставки.
std::array< uint8_t, EC_256_DOUBLE_WIDTH > sign_hash(const std::array< uint8_t, STREEBOG256_RESULT_SIZE > &hash, const std::array< uint8_t, EC_256_WIDTH > &rand_bytes, intptr_t &error_code) const noexcept
Подписать хэш сообщения.
~KuznyechikEcb_t() noexcept
intptr_t verify_hash(const uint8_t hash[STREEBOG256_RESULT_SIZE], const uint8_t signature[EC_256_DOUBLE_WIDTH]) const noexcept
Проверить подпись хэша сообщения.
uint8_t MagmaCbc[MAGMA_CBC_SIZE]
Блочный шифр с длиной блока 64 бит в режиме простой замены с зацеплением с размером синхропосылки 8 б...
~KuznyechikOfb_t() noexcept
void kuznyechik_ofb_apply_keystream(KuznyechikOfb cipher, uint8_t *buf, uintptr_t buf_len)
Гаммировать сообщение ключевым потоком шифра.
#define MAGMA_CTR_NONCE_SIZE
Размер синхропосылки MagmaCtr (в байтах)
MagmaEcb_t(const uint8_t key[SYMMETRIC_KEY_SIZE]) noexcept
Создать контекст блочного шифра.
~Streebog512_t() noexcept
MagmaMac_t(const MagmaMac_t &)=default
KuznyechikMgm_t(const KuznyechikMgm_t &)=default
intptr_t magma_ctr_apply_keystream(MagmaCtr cipher, uint8_t *buf, uintptr_t buf_len)
Гаммировать сообщение ключевым потоком шифра.
intptr_t kuznyechik_ctr_seek(KuznyechikCtr cipher, uint64_t pos)
Установить позицию ключевого потока шифра.
void encrypt_block(uint8_t block[KUZNYECHIK_BLOCK_SIZE]) noexcept
Зашифровать блок данных.
uint8_t Streebog256[STREEBOG256_SIZE]
Функция хэширования с длиной хэш-кода 256 бит.
uint8_t KuznyechikCbc[KUZNYECHIK_CBC_SIZE]
Блочный шифр с длиной блока 128 бит в режиме простой замены с зацеплением с размером синхропосылки 16...
intptr_t encrypt_pad(uint8_t *buf, uintptr_t buf_len, uintptr_t pos) const noexcept
Зашифровать сообщение.
void magma_mac_new(MagmaMac dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать состояние режима выработки имитовставки.
static Ec512PublicKey_t< CurveID > from_bytes(const std::array< uint8_t, EC_512_DOUBLE_WIDTH > &bytes, intptr_t &error_code) noexcept
Десериалировать открытый ключ.
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 (в байтах)
MagmaEcb_t & operator=(const MagmaEcb_t &)=default
#define GOST3410_2012_256A
Идентификатор кривой id-tc26-gost-3410-2012-256-paramSetA, заданной в Р 1323565.1.024-2019.
Gost3410_2012_256
Идентификатор эллиптических кривых, для алгоритмов формирования, проверки электронной цифровой подпис...
#define STREEBOG512_RESULT_SIZE
Длина хэш-кода Streebog512 (в байтах)
void kuznyechik_mac_new(KuznyechikMac dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать состояние режима выработки имитовставки.
KuznyechikCfb_t(const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[KUZNYECHIK_CFB_NONCE_SIZE]) noexcept
Создать контекст потокового шифра.
void reset() noexcept
Сбросить состояние режима выработки имитовставки.
void kuznyechik_cfb_decrypt(KuznyechikCfb cipher, uint8_t *buf, uintptr_t buf_len)
Расшифровать сообщение.
~KuznyechikMac_t() noexcept
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])
Подписать хэш сообщения.
void finalize_reset(uint8_t res[STREEBOG512_RESULT_SIZE]) noexcept
Финализировать состояние функции хэширования и заменить его новым.
intptr_t decrypt(const std::array< uint8_t, KUZNYECHIK_MGM_NONCE_SIZE > &nonce, const std::vector< uint8_t > &aad, std::vector< uint8_t > &buf, const std::array< uint8_t, KUZNYECHIK_MGM_TAG_SIZE > &tag) const noexcept
Расшифровать сообщение с присоединёнными данными.
uint8_t Ec512PublicKey[EC_512_PUBLIC_KEY_SIZE]
Несериализованный открытый ключ кривых Ec512 длиной EC_512_PUBLIC_KEY_SIZE и выравниванием EC_512_PUB...
void decrypt_blocks(uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t len) noexcept
Расшифровать массив блоков.
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)
Обновить состояние функции хэширования.
void update(const std::vector< uint8_t > &message) noexcept
Обновить состояние функции хэширования.
intptr_t encrypt(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]) const noexcept
Зашифровать сообщение с присоединёнными данными.
KuznyechikEcb_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key) noexcept
Создать контекст блочного шифра.
KuznyechikCbc_t(const KuznyechikCbc_t &)=default
void kuznyechik_mac_finalize_reset(KuznyechikMac state, uint8_t res[KUZNYECHIK_MAC_RESULT_SIZE])
Финализировать состояние режима выработки имитовставки и заменить его новым.
void decrypt(uint8_t *buf, uintptr_t buf_len) noexcept
Расшифровать сообщение.
KuznyechikMgm_t & operator=(const KuznyechikMgm_t &)=default
void encrypt_blocks(uint8_t(*blocks)[KUZNYECHIK_BLOCK_SIZE], uintptr_t blocks_len) noexcept
Зашифровать массив блоков.
bool verify(const std::array< uint8_t, MAGMA_MAC_RESULT_SIZE > &code) const noexcept
Проверить целостность данных.
std::array< uint8_t, STREEBOG512_RESULT_SIZE > finalize() const noexcept
Финализировать состояние функции хэширования.
static Ec256PublicKey_t< CurveID > from_bytes(const uint8_t bytes[EC_256_DOUBLE_WIDTH], intptr_t &error_code) noexcept
Десериалировать открытый ключ.
void encrypt(std::vector< uint8_t > &buf) noexcept
Зашифровать сообщение.
#define SYMMETRIC_KEY_SIZE
Размер ключа симметричного шифра (в байтах)
intptr_t magma_ecb_encrypt_pad(MagmaEcb cipher, uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
Зашифровать сообщение.
intptr_t verify(const uint8_t *msg, uintptr_t msg_len, const uint8_t signature[EC_256_DOUBLE_WIDTH]) const noexcept
Проверить подпись сообщения.
void streebog256_finalize_reset(Streebog256 state, uint8_t res[STREEBOG256_RESULT_SIZE])
Финализировать состояние функции хэширования и заменить его новым.
Gost3410_2012_512
Идентификатор эллиптических кривых, для алгоритмов формирования, проверки электронной цифровой подпис...
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)
Уничтожить контекст шифра.
MagmaCbc_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key, const std::array< uint8_t, MAGMA_CBC_NONCE_SIZE > &nonce) noexcept
Создать контекст блочного шифра.
bool magma_mac_verify(MagmaMac state, const uint8_t code[MAGMA_MAC_RESULT_SIZE])
Проверить целостность данных.
void decrypt(std::vector< uint8_t > &buf) noexcept
Расшифровать сообщение.
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])
Выработать общий ключ.
bool verify(const uint8_t code[KUZNYECHIK_MAC_RESULT_SIZE]) const noexcept
Проверить целостность данных.
uint64_t magma_ctr_get_pos(MagmaCtr cipher)
Получить позицию ключевого потока шифра.
void update(const uint8_t *msg, uintptr_t len) noexcept
Обновить состояние режиму выработки имитовставки.
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])
Финализировать состояние режима выработки имитовставки.
std::array< uint8_t, STREEBOG256_RESULT_SIZE > finalize() const noexcept
Финализировать состояние функции хэширования.
void update(const std::vector< uint8_t > &message) noexcept
Обновить состояние функции хэширования.
intptr_t apply_keystream(uint8_t *buf, uintptr_t buf_len) noexcept
Гаммировать сообщение ключевым потоком шифра.
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)
Уничтожить закрытый ключ.
MagmaOfb_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key, const std::array< uint8_t, MAGMA_OFB_NONCE_SIZE > &nonce) noexcept
Создать контекст потокового шифра.
intptr_t seek(uint64_t pos) noexcept
Установить позицию ключевого потока шифра.
intptr_t sign(const std::vector< uint8_t > &msg, const std::array< uint8_t, EC_256_WIDTH > &rand_bytes, std::array< uint8_t, EC_256_DOUBLE_WIDTH > &signature) const noexcept
Подписать сообщение.
MagmaMac_t & operator=(const MagmaMac_t &)=default
void kuznyechik_ecb_new(KuznyechikEcb dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать контекст блочного шифра.
static Ec512PrivateKey_t< CurveID > from_bytes(const uint8_t bytes[EC_512_WIDTH], intptr_t &error_code) noexcept
Десериалировать закрытый ключ.
void finalize_reset(uint8_t res[STREEBOG256_RESULT_SIZE]) noexcept
Финализировать состояние функции хэширования и заменить его новым.
Идентификатор кривой id-tc26-gost-3410-12-512-paramSetA, заданной в Р 1323565.1.024-2019.
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])
Создать контекст блочного шифра.
Блочный шифр с длиной блока 64 бит в режиме простой замены.
void decrypt_blocks(uint8_t(*blocks)[KUZNYECHIK_BLOCK_SIZE], uintptr_t len) noexcept
Расшифровать массив блоков.
intptr_t ec256_private_key_to_bytes(Ec256 cid, Ec256PrivateKey sk, uint8_t bytes[EC_256_WIDTH])
Сериализовать закрытый ключ.
KuznyechikOfb_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key, const std::array< uint8_t, KUZNYECHIK_OFB_NONCE_SIZE > &nonce) noexcept
Создать контекст потокового шифра.
#define MAGMA_MAC_RESULT_SIZE
Длина имитовставки MagmaMac (в байтах)
#define KUZNYECHIK_OFB_NONCE_SIZE
Размер синхропосылки KuznyechikOfb (в байтах)
std::array< uint8_t, MAGMA_MAC_RESULT_SIZE > finalize_reset() noexcept
Финализировать состояние режима выработки имитовставки и заменить его новым.
KuznyechikCtr_t & operator=(const KuznyechikCtr_t &)=default
void streebog256_reset(Streebog256 state)
Сбросить состояние функции хэширования.
static Ec256PrivateKey_t< CurveID > from_bytes(const std::array< uint8_t, EC_256_WIDTH > &rand_bytes, intptr_t &error_code) noexcept
Десериалировать закрытый ключ.
Потоковый шифр с длиной блока 128 бит в режиме гаммирования с обратной связью по выходу с размером си...
void encrypt_block(uint8_t block[MAGMA_BLOCK_SIZE]) noexcept
Зашифровать блок данных.
std::array< uint8_t, EC_512_WIDTH > to_bytes() const noexcept
Сериализовать закрытый ключ.
Блочный шифр с длиной блока 128 бит в режиме простой замены.
static void digest(const uint8_t *msg, uintptr_t len, uint8_t res[STREEBOG512_RESULT_SIZE]) noexcept
Хэшировать сообщение.
MagmaOfb_t(const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[MAGMA_OFB_NONCE_SIZE]) noexcept
Создать контекст потокового шифра.
void update(const uint8_t *msg, uintptr_t len) noexcept
Обновить состояние функции хэширования.
void update(const std::vector< uint8_t > &message) noexcept
Обновить состояние режиму выработки имитовставки.
void magma_cfb_encrypt(MagmaCfb cipher, uint8_t *buf, uintptr_t buf_len)
Зашифровать сообщение.
std::array< uint8_t, EC_256_WIDTH > vko256(const Ec512PublicKey_t< CurveID > &other_pk, intptr_t &error_code) const noexcept
Выработать общий ключ.
#define MAGMA_OFB_NONCE_SIZE
Размер синхропосылки MagmaOfb (в байтах)
#define GOST3410_2012_256B
Идентификатор кривой id-tc26-gost-3410-2012-256-paramSetB, заданной в Р 1323565.1.024-2019.
MagmaCtr_t(const MagmaCtr_t &)=default
intptr_t sign_hash(const uint8_t hash[STREEBOG256_RESULT_SIZE], const uint8_t rand_bytes[EC_256_WIDTH], uint8_t signature[EC_256_DOUBLE_WIDTH]) const noexcept
Подписать хэш сообщения.
intptr_t verify_hash(const std::array< uint8_t, STREEBOG256_RESULT_SIZE > &hash, const std::array< uint8_t, EC_256_DOUBLE_WIDTH > &signature) const noexcept
Проверить подпись хэша сообщения.
#define KUZNYECHIK_CFB_NONCE_SIZE
Размер синхропосылки KuznyechikCfb (в байтах)
intptr_t kuznyechik_ecb_encrypt_pad(KuznyechikEcb cipher, uint8_t *buf, uintptr_t buf_len, uintptr_t pos)
Зашифровать сообщение.
void finalize_reset(uint8_t res[MAGMA_MAC_RESULT_SIZE]) noexcept
Финализировать состояние режима выработки имитовставки и заменить его новым.
intptr_t ec512_public_key_to_bytes(Ec512 cid, Ec512PublicKey pk, uint8_t bytes[EC_512_DOUBLE_WIDTH])
Сериализовать открытый ключ.
std::array< uint8_t, EC_512_DOUBLE_WIDTH > sign(const std::vector< uint8_t > &msg, const std::array< uint8_t, EC_512_WIDTH > &rand_bytes, intptr_t &error_code) const noexcept
Подписать сообщение.
Streebog256_t() noexcept
Создать состояние функции хэширования.
void streebog512_drop(Streebog512 state)
Уничтожить состояние функции хэширования.
std::array< uint8_t, EC_512_WIDTH > vko512(const Ec512PublicKey_t< CurveID > &other_pk, intptr_t &error_code, const uint8_t ukm[EC_512_WIDTH]) const noexcept
Выработать общий ключ.
void magma_cfb_new(MagmaCfb dst, const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[MAGMA_CFB_NONCE_SIZE])
Создать контекст потокового шифра.
MagmaCtr_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key, const std::array< uint8_t, MAGMA_CTR_NONCE_SIZE > &nonce) noexcept
Создать контекст потокового шифра.
Потоковый шифр с длиной блока 128 бит в режиме гаммирования с обратной связью по шифртексту с размеро...
Открытый ключ эллиптических кривых.
void decrypt_blocks(uint8_t(*blocks)[MAGMA_BLOCK_SIZE], uintptr_t blocks_len) noexcept
Расшифровать массив блоков.
~KuznyechikCfb_t() noexcept
KuznyechikEcb_t(const uint8_t key[SYMMETRIC_KEY_SIZE]) noexcept
Создать контекст блочного шифра.
Функция хэширования с длиной хэш-кода 256 бит.
uint64_t get_pos() const noexcept
Получить позицию ключевого потока шифра.
Kuznyechik_t & operator=(const Kuznyechik_t &)=default
KuznyechikMac_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key) noexcept
Создать состояние режима выработки имитовставки.
void decrypt(std::vector< uint8_t > &buf) noexcept
Расшифровать сообщение.
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)
Обновить состояние режиму выработки имитовставки.
Потоковый шифр с длиной блока 64 бит в режиме гаммирования с обратной связью по шифртексту с размером...
#define MAGMA_BLOCK_SIZE
Размер блока Magma (в байтах)
void magma_encrypt_blocks(Magma cipher, uint8_t blocks[MAGMA_BLOCK_SIZE], uintptr_t len)
Зашифровать массив блоков.
void apply_keystream(std::vector< uint8_t > &buf) noexcept
Гаммировать сообщение ключевым потоком шифра.
MagmaOfb_t(const MagmaOfb_t &)=default
uint8_t KuznyechikMac[KUZNYECHIK_MAC_SIZE]
Режим выработки имитовставки с использованием шифра с длиной блока 128 бит.
std::array< uint8_t, STREEBOG256_RESULT_SIZE > finalize_reset() noexcept
Финализировать состояние функции хэширования и заменить его новым.
void update(const std::vector< uint8_t > &message) noexcept
Обновить состояние режиму выработки имитовставки.
void apply_keystream(uint8_t *buf, uintptr_t buf_len) noexcept
Гаммировать сообщение ключевым потоком шифра.
Magma_t(const Magma_t &)=default
void decrypt_blocks(uint8_t(*blocks)[MAGMA_BLOCK_SIZE], uintptr_t len) noexcept
Расшифровать массив блоков.
void streebog256_new(Streebog256 dst)
Создать состояние функции хэширования.
void apply_keystream(uint8_t *buf, uintptr_t buf_len) noexcept
Гаммировать сообщение ключевым потоком шифра.
~KuznyechikCtr_t() noexcept
Идентификатор кривой id-tc26-gost-3410-2012-256-paramSetD, заданной в Р 1323565.1.024-2019.
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)
Уничтожить состояние режима выработки имитовставки.
intptr_t encrypt_pad(uint8_t *buf, uintptr_t buf_len, uintptr_t pos) const noexcept
Зашифровать сообщение.
void kuznyechik_ctr_drop(KuznyechikCtr cipher)
Уничтожить контекст шифра.
void streebog256_drop(Streebog256 state)
Уничтожить состояние функции хэширования.
void magma_ofb_drop(MagmaOfb cipher)
Уничтожить контекст шифра.
#define GOST3410_2012_256D
Идентификатор кривой id-tc26-gost-3410-2012-256-paramSetD, заданной в Р 1323565.1.024-2019.
Функция хэширования с длиной хэш-кода 512 бит.
void kuznyechik_new(Kuznyechik dst, const uint8_t key[SYMMETRIC_KEY_SIZE])
Создать контекст блочного шифра.
KuznyechikCfb_t(const KuznyechikCfb_t &)=default
MagmaCfb_t(const MagmaCfb_t &)=default
uint8_t Ec512PrivateKey[EC_512_WIDTH]
Несериализованный закрытый ключ кривых Ec512 длиной EC_512_WIDTH и выравниванием EC_512_PRIVATE_KEY_A...
void finalize(uint8_t res[KUZNYECHIK_MAC_RESULT_SIZE]) const noexcept
Финализировать состояние режима выработки имитовставки.
void magma_cbc_decrypt_blocks(MagmaCbc cipher, uint8_t blocks[MAGMA_BLOCK_SIZE], uintptr_t blocks_len)
Расшифровать массив блоков.
bool verify(const std::array< uint8_t, KUZNYECHIK_MAC_RESULT_SIZE > &code) const noexcept
Проверить целостность данных.
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)
Расшифровать массив блоков.
intptr_t decrypt(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]) const noexcept
Расшифровать сообщение с присоединёнными данными.
static std::array< uint8_t, STREEBOG512_RESULT_SIZE > digest(const uint8_t *msg, uintptr_t len) noexcept
Хэшировать сообщение.
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])
Выработать общий ключ.
Magma_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key) noexcept
Создать контекст блочного шифра.
#define GOST3410_2012_256C
Идентификатор кривой id-tc26-gost-3410-2012-256-paramSetC, заданной в Р 1323565.1.024-2019.
std::array< uint8_t, EC_256_WIDTH > vko256(const Ec256PublicKey_t< CurveID > &other_pk, intptr_t &error_code) const noexcept
Выработать общий ключ.
#define EC_256_WIDTH
Длина закрытого ключа и хэша сообщения кривых Ec256 (в байтах)
intptr_t seek(uint64_t pos) noexcept
Установить позицию ключевого потока шифра.
Библиотека криптографических алгоритмов ГОСТ.
uint8_t MagmaCfb[MAGMA_CFB_SIZE]
Потоковый шифр с длиной блока 64 бит в режиме гаммирования с обратной связью по шифртексту с размером...
void update(const uint8_t *msg, uintptr_t len) noexcept
Обновить состояние режиму выработки имитовставки.
Ec512PublicKey_t< CurveID > & operator=(const Ec512PublicKey_t< CurveID > &)=default
static void digest(const uint8_t *msg, uintptr_t len, uint8_t res[STREEBOG256_RESULT_SIZE]) noexcept
Хэшировать сообщение.
KuznyechikEcb_t & operator=(const KuznyechikEcb_t &)=default
std::array< uint8_t, KUZNYECHIK_MAC_RESULT_SIZE > finalize() const noexcept
Финализировать состояние режима выработки имитовставки.
void kuznyechik_cbc_decrypt_blocks(KuznyechikCbc cipher, uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t blocks_len)
Расшифровать массив блоков.
MagmaCbc_t(const MagmaCbc_t &)=default
uint8_t Ec256PrivateKey[EC_256_WIDTH]
Несериализованный закрытый ключ кривых Ec256 длиной EC_256_WIDTH и выравниванием EC_256_PRIVATE_KEY_A...
Magma_t(const uint8_t key[SYMMETRIC_KEY_SIZE]) noexcept
Создать контекст блочного шифра.
KuznyechikMgm_t(const std::array< uint8_t, SYMMETRIC_KEY_SIZE > &key) noexcept
Создать контекст AEAD.
MagmaCfb_t(const uint8_t key[SYMMETRIC_KEY_SIZE], const uint8_t nonce[MAGMA_CFB_NONCE_SIZE]) noexcept
Создать контекст потокового шифра.
void finalize(uint8_t res[MAGMA_MAC_RESULT_SIZE]) const noexcept
Финализировать состояние режима выработки имитовставки.
void kuznyechik_decrypt_blocks(Kuznyechik cipher, uint8_t blocks[KUZNYECHIK_BLOCK_SIZE], uintptr_t len)
Расшифровать массив блоков.
Режим выработки имитовставки с использованием шифра с длиной блока 128 бит.
KuznyechikMac_t(const KuznyechikMac_t &)=default
Kuznyechik_t(const uint8_t key[SYMMETRIC_KEY_SIZE]) noexcept
Создать контекст блочного шифра.
void ec256_private_key_drop(Ec256PrivateKey sk)
Уничтожить закрытый ключ.
intptr_t verify_hash(const std::array< uint8_t, STREEBOG512_RESULT_SIZE > &hash, const std::array< uint8_t, EC_512_DOUBLE_WIDTH > &signature) const noexcept
Проверить подпись хэша сообщения.
bool verify(const uint8_t code[MAGMA_MAC_RESULT_SIZE]) const noexcept
Проверить целостность данных.
void magma_cfb_decrypt(MagmaCfb cipher, uint8_t *buf, uintptr_t buf_len)
Расшифровать сообщение.
Ec512PublicKey_t< CurveID > get_public_key() const noexcept
Получить открытый ключ.
std::array< uint8_t, KUZNYECHIK_MAC_RESULT_SIZE > finalize_reset() noexcept
Финализировать состояние режима выработки имитовставки и заменить его новым.
void encrypt_blocks(uint8_t blocks[MAGMA_BLOCK_SIZE], uintptr_t len) noexcept
Зашифровать массив блоков.
intptr_t encrypt(const std::array< uint8_t, KUZNYECHIK_MGM_NONCE_SIZE > &nonce, const std::vector< uint8_t > &aad, std::vector< uint8_t > &buf, std::array< uint8_t, KUZNYECHIK_MGM_TAG_SIZE > &tag) const noexcept
Зашифровать сообщение с присоединёнными данными.
std::array< uint8_t, EC_512_WIDTH > vko512(const Ec512PublicKey_t< CurveID > &other_pk, intptr_t &error_code) const noexcept
Выработать общий ключ.
void finalize(uint8_t res[STREEBOG512_RESULT_SIZE]) const noexcept
Финализировать состояние функции хэширования.