10#ifndef BOTAN_DILITHIUM_ASYM_PRIMITIVES_H_
11#define BOTAN_DILITHIUM_ASYM_PRIMITIVES_H_
13#include <botan/dilithium.h>
14#include <botan/stream_cipher.h>
16#include <botan/internal/shake.h>
56 uint16_t nonce,
size_t out_len)
const
62 virtual std::unique_ptr<StreamCipher>
XOF(
const XofType type, std::span<const uint8_t> seed,
63 uint16_t matrix_position)
const = 0;
79 static constexpr int32_t
N = 256;
80 static constexpr int32_t
Q = 8380417;
81 static constexpr int32_t
D = 13;
90 static constexpr int32_t
QINV = 58728449;
93 0, 25847, -2608894, -518909, 237124, -777960, -876248, 466468,
94 1826347, 2353451, -359251, -2091905, 3119733, -2884855, 3111497, 2680103,
95 2725464, 1024112, -1079900, 3585928, -549488, -1119584, 2619752, -2108549,
96 -2118186, -3859737, -1399561, -3277672, 1757237, -19422, 4010497, 280005,
97 2706023, 95776, 3077325, 3530437, -1661693, -3592148, -2537516, 3915439,
98 -3861115, -3043716, 3574422, -2867647, 3539968, -300467, 2348700, -539299,
99 -1699267, -1643818, 3505694, -3821735, 3507263, -2140649, -1600420, 3699596,
100 811944, 531354, 954230, 3881043, 3900724, -2556880, 2071892, -2797779,
101 -3930395, -1528703, -3677745, -3041255, -1452451, 3475950, 2176455, -1585221,
102 -1257611, 1939314, -4083598, -1000202, -3190144, -3157330, -3632928, 126922,
103 3412210, -983419, 2147896, 2715295, -2967645, -3693493, -411027, -2477047,
104 -671102, -1228525, -22981, -1308169, -381987, 1349076, 1852771, -1430430,
105 -3343383, 264944, 508951, 3097992, 44288, -1100098, 904516, 3958618,
106 -3724342, -8578, 1653064, -3249728, 2389356, -210977, 759969, -1316856,
107 189548, -3553272, 3159746, -1851402, -2409325, -177440, 1315589, 1341330,
108 1285669, -1584928, -812732, -1439742, -3019102, -3881060, -3628969, 3839961,
109 2091667, 3407706, 2316500, 3817976, -3342478, 2244091, -2446433, -3562462,
110 266997, 2434439, -1235728, 3513181, -3520352, -3759364, -1197226, -3193378,
111 900702, 1859098, 909542, 819034, 495491, -1613174, -43260, -522500,
112 -655327, -3122442, 2031748, 3207046, -3556995, -525098, -768622, -3595838,
113 342297, 286988, -2437823, 4108315, 3437287, -3342277, 1735879, 203044,
114 2842341, 2691481, -2590150, 1265009, 4055324, 1247620, 2486353, 1595974,
115 -3767016, 1250494, 2635921, -3548272, -2994039, 1869119, 1903435, -1050970,
116 -1333058, 1237275, -3318210, -1430225, -451100, 1312455, 3306115, -1962642,
117 -1279661, 1917081, -2546312, -1374803, 1500165, 777191, 2235880, 3406031,
118 -542412, -2831860, -1671176, -1846953, -2584293, -3724270, 594136, -3776993,
119 -2013608, 2432395, 2454455, -164721, 1957272, 3369112, 185531, -1207385,
120 -3183426, 162844, 1616392, 3014001, 810149, 1652634, -3694233, -1799107,
121 -3038916, 3523897, 3866901, 269760, 2213111, -975884, 1717735, 472078,
122 -426683, 1723600, -1803090, 1910376, -1667432, -1104333, -260646, -3833893,
123 -2939036, -2235985, -420899, -2286327, 183443, -976891, 1612842, -3545687,
124 -554416, 3919660, -48306, -1362209, 3937738, 1400424, -846154, 1976782
156 return m_poly_uniform_gamma1_nblocks;
160 return m_stream256_blockbytes;
164 return m_stream128_blockbytes;
168 return m_polyw1_packedbytes;
176 return m_polyz_packedbytes;
192 return m_poly_uniform_eta_nblocks;
196 return m_poly_uniform_nblocks;
200 return m_polyeta_packedbytes;
204 return m_public_key_bytes;
208 return m_crypto_bytes;
216 return m_private_key_bytes;
221 return m_nist_security_strength;
225 decltype(
auto)
H(std::span<const uint8_t> seed,
size_t out_len)
const
227 return m_symmetric_primitives->H(seed, out_len);
235 std::unique_ptr<StreamCipher>
XOF_128(std::span<const uint8_t> seed,
236 uint16_t nonce)
const
240 std::unique_ptr<StreamCipher>
XOF_256(std::span<const uint8_t> seed,
241 uint16_t nonce)
const
248 return this->m_symmetric_primitives->ExpandMask(seed, nonce,
255 uint16_t m_nist_security_strength;
266 int32_t m_stream128_blockbytes;
267 int32_t m_stream256_blockbytes;
268 int32_t m_poly_uniform_nblocks;
269 int32_t m_poly_uniform_eta_nblocks;
270 int32_t m_poly_uniform_gamma1_nblocks;
271 int32_t m_polyvech_packedbytes;
272 int32_t m_polyz_packedbytes;
273 int32_t m_polyw1_packedbytes;
274 int32_t m_polyeta_packedbytes;
275 int32_t m_private_key_bytes;
276 int32_t m_public_key_bytes;
277 int32_t m_crypto_bytes;
280 std::unique_ptr<Dilithium_Symmetric_Primitives> m_symmetric_primitives;
T process(const uint8_t in[], size_t length)
static constexpr int32_t SEEDBYTES
static constexpr int32_t SHA3_512_RATE
size_t poly_uniform_gamma1_nblocks() const
DilithiumModeConstants & operator=(const DilithiumModeConstants &other)=delete
static constexpr int32_t ROOT_OF_UNITY
size_t private_key_bytes() const
size_t nist_security_strength() const
static constexpr int32_t kSerializedPolynomialByteLength
secure_vector< uint8_t > CRH(const std::span< const uint8_t > in) const
size_t polyz_packedbytes() const
size_t polyw1_packedbytes() const
size_t crypto_bytes() const
static constexpr int32_t POLYT0_PACKEDBYTES
static constexpr int32_t SHAKE256_RATE
size_t polyeta_packedbytes() const
size_t stream128_blockbytes() const
size_t poly_uniform_nblocks() const
static constexpr int32_t Q
static constexpr int32_t POLYT1_PACKEDBYTES
static constexpr int32_t N
static constexpr int32_t SHA3_256_RATE
size_t stream256_blockbytes() const
static constexpr int32_t SHAKE128_RATE
std::unique_ptr< StreamCipher > XOF_128(std::span< const uint8_t > seed, uint16_t nonce) const
DilithiumModeConstants & operator=(DilithiumModeConstants &&other)=default
DilithiumModeConstants(const DilithiumModeConstants &other)
secure_vector< uint8_t > ExpandMask(const secure_vector< uint8_t > &seed, uint16_t nonce) const
static constexpr int32_t ZETAS[DilithiumModeConstants::N]
decltype(auto) H(std::span< const uint8_t > seed, size_t out_len) const
static constexpr int32_t CRHBYTES
static constexpr int32_t QINV
std::unique_ptr< StreamCipher > XOF_256(std::span< const uint8_t > seed, uint16_t nonce) const
size_t public_key_bytes() const
static constexpr int32_t D
static constexpr int32_t AES256CTR_BLOCKBYTES
DilithiumModeConstants(DilithiumModeConstants &&other)=default
size_t poly_uniform_eta_nblocks() const
OID object_identifier() const
secure_vector< uint8_t > CRH(std::span< const uint8_t > in, size_t out_len) const
secure_vector< uint8_t > ExpandMask(std::span< const uint8_t > seed, uint16_t nonce, size_t out_len) const
secure_vector< uint8_t > H(std::span< const uint8_t > seed, size_t out_len) const
virtual std::unique_ptr< StreamCipher > XOF(const XofType type, std::span< const uint8_t > seed, uint16_t matrix_position) const =0
static std::unique_ptr< Dilithium_Symmetric_Primitives > create(DilithiumMode mode)
virtual ~Dilithium_Symmetric_Primitives()=default
std::vector< T, secure_allocator< T > > secure_vector