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};