dcrypt_params/pqc/
kyber.rs

1//! Constants for Kyber key encapsulation mechanism
2
3/// Kyber polynomial degree
4pub const KYBER_N: usize = 256;
5
6/// Kyber modulus
7pub const KYBER_Q: u16 = 3329;
8
9/// Structure containing Kyber-512 parameters
10pub struct Kyber512Params {
11    /// Polynomial degree
12    pub n: usize,
13
14    /// Modulus
15    pub q: u16,
16
17    /// Number of polynomials (dimension)
18    pub k: usize,
19
20    /// Error distribution parameter
21    pub eta1: u8,
22
23    /// Error distribution parameter
24    pub eta2: u8,
25
26    /// Number of bits dropped for compression of public key
27    pub du: usize,
28
29    /// Number of bits dropped for compression of ciphertext
30    pub dv: usize,
31
32    /// Size of public key in bytes
33    pub public_key_size: usize,
34
35    /// Size of secret key in bytes
36    pub secret_key_size: usize,
37
38    /// Size of ciphertext in bytes
39    pub ciphertext_size: usize,
40
41    /// Size of shared secret in bytes
42    pub shared_secret_size: usize,
43}
44
45/// Kyber-512 parameters
46pub const KYBER512: Kyber512Params = Kyber512Params {
47    n: KYBER_N,
48    q: KYBER_Q,
49    k: 2,
50    eta1: 3,
51    eta2: 2,
52    du: 10,
53    dv: 4,
54    public_key_size: 800,
55    secret_key_size: 1632,
56    ciphertext_size: 768,
57    shared_secret_size: 32,
58};
59
60/// Structure containing Kyber-768 parameters
61pub struct Kyber768Params {
62    /// Polynomial degree
63    pub n: usize,
64
65    /// Modulus
66    pub q: u16,
67
68    /// Number of polynomials (dimension)
69    pub k: usize,
70
71    /// Error distribution parameter
72    pub eta1: u8,
73
74    /// Error distribution parameter
75    pub eta2: u8,
76
77    /// Number of bits dropped for compression of public key
78    pub du: usize,
79
80    /// Number of bits dropped for compression of ciphertext
81    pub dv: usize,
82
83    /// Size of public key in bytes
84    pub public_key_size: usize,
85
86    /// Size of secret key in bytes
87    pub secret_key_size: usize,
88
89    /// Size of ciphertext in bytes
90    pub ciphertext_size: usize,
91
92    /// Size of shared secret in bytes
93    pub shared_secret_size: usize,
94}
95
96/// Kyber-768 parameters
97pub const KYBER768: Kyber768Params = Kyber768Params {
98    n: KYBER_N,
99    q: KYBER_Q,
100    k: 3,
101    eta1: 2,
102    eta2: 2,
103    du: 10,
104    dv: 4,
105    public_key_size: 1184,
106    secret_key_size: 2400,
107    ciphertext_size: 1088,
108    shared_secret_size: 32,
109};
110
111/// Structure containing Kyber-1024 parameters
112pub struct Kyber1024Params {
113    /// Polynomial degree
114    pub n: usize,
115
116    /// Modulus
117    pub q: u16,
118
119    /// Number of polynomials (dimension)
120    pub k: usize,
121
122    /// Error distribution parameter
123    pub eta1: u8,
124
125    /// Error distribution parameter
126    pub eta2: u8,
127
128    /// Number of bits dropped for compression of public key
129    pub du: usize,
130
131    /// Number of bits dropped for compression of ciphertext
132    pub dv: usize,
133
134    /// Size of public key in bytes
135    pub public_key_size: usize,
136
137    /// Size of secret key in bytes
138    pub secret_key_size: usize,
139
140    /// Size of ciphertext in bytes
141    pub ciphertext_size: usize,
142
143    /// Size of shared secret in bytes
144    pub shared_secret_size: usize,
145}
146
147/// Kyber-1024 parameters
148pub const KYBER1024: Kyber1024Params = Kyber1024Params {
149    n: KYBER_N,
150    q: KYBER_Q,
151    k: 4,
152    eta1: 2,
153    eta2: 2,
154    du: 11,
155    dv: 5,
156    public_key_size: 1568,
157    secret_key_size: 3168,
158    ciphertext_size: 1568,
159    shared_secret_size: 32,
160};