1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
// Copyright © 2024 kyberlib. All rights reserved.
// SPDX-License-Identifier: Apache-2.0 OR MIT
#[cfg(test)]
mod tests {
// Import necessary items
use kyberlib::params::*;
// Test Kyber parameters related to features
#[test]
fn test_kyber_90s() {
// Test if KYBER_90S matches the feature configuration
assert_eq!(KYBER_90S, cfg!(feature = "90s"));
}
#[test]
fn test_kyber_eta1() {
// Test KYBER_ETA1 depending on feature configuration
if cfg!(feature = "kyber512") {
assert_eq!(KYBER_ETA1, 3);
} else {
assert_eq!(KYBER_ETA1, 2);
}
}
#[test]
fn test_kyber_eta2() {
// Test KYBER_ETA2
assert_eq!(KYBER_ETA2, 2);
}
#[test]
fn test_kyber_n() {
// Test KYBER_N
assert_eq!(KYBER_N, 256);
}
#[test]
fn test_kyber_poly_bytes() {
// Test KYBER_POLY_BYTES
assert_eq!(KYBER_POLY_BYTES, 384);
}
#[cfg(not(feature = "kyber1024"))]
#[test]
fn test_kyber_poly_compressed_bytes() {
// Test KYBER_POLY_COMPRESSED_BYTES for non-kyber1024
assert_eq!(KYBER_POLY_COMPRESSED_BYTES, 128);
}
#[test]
fn test_kyber_polyvec_bytes() {
// Test KYBER_POLYVEC_BYTES
assert_eq!(
KYBER_POLYVEC_BYTES,
KYBER_SECURITY_PARAMETER * KYBER_POLY_BYTES
);
}
#[cfg(not(feature = "kyber1024"))]
#[test]
fn test_kyber_polyvec_compressed_bytes() {
// Test KYBER_POLYVEC_COMPRESSED_BYTES for non-kyber1024
assert_eq!(
KYBER_POLYVEC_COMPRESSED_BYTES,
KYBER_SECURITY_PARAMETER * 320
);
}
#[test]
fn test_kyber_q() {
// Test KYBER_Q
assert_eq!(KYBER_Q, 3329);
}
// Test Kyber parameters related to sizes
#[test]
fn test_kyber_secret_key_bytes() {
// Test KYBER_SECRET_KEY_BYTES
assert_eq!(
KYBER_SECRET_KEY_BYTES,
KYBER_INDCPA_SECRET_KEY_BYTES
+ KYBER_INDCPA_PUBLIC_KEY_BYTES
+ 2 * KYBER_SYM_BYTES
);
}
#[test]
fn test_kyber_security_parameter() {
// Test KYBER_SECURITY_PARAMETER
if cfg!(feature = "kyber512") {
assert_eq!(KYBER_SECURITY_PARAMETER, 2);
} else if cfg!(feature = "kyber1024") {
assert_eq!(KYBER_SECURITY_PARAMETER, 4);
} else {
assert_eq!(KYBER_SECURITY_PARAMETER, 3);
}
}
#[test]
fn test_kyber_shared_secret_bytes() {
// Test KYBER_SHARED_SECRET_BYTES
assert_eq!(KYBER_SHARED_SECRET_BYTES, 32);
}
#[test]
fn test_kyber_sym_bytes() {
// Test KYBER_SYM_BYTES
assert_eq!(KYBER_SYM_BYTES, 32);
}
// Test Kyber parameters related to kyber1024 feature
#[cfg(feature = "kyber1024")]
#[test]
fn test_KYBER_POLY_COMPRESSED_BYTES_kyber1024() {
// Test KYBER_POLY_COMPRESSED_BYTES for kyber1024
assert_eq!(KYBER_POLY_COMPRESSED_BYTES, 160);
}
#[cfg(feature = "kyber1024")]
#[test]
fn test_KYBER_POLYVEC_COMPRESSED_BYTES_kyber1024() {
// Test KYBER_POLYVEC_COMPRESSED_BYTES for kyber1024
assert_eq!(
KYBER_POLYVEC_COMPRESSED_BYTES,
KYBER_SECURITY_PARAMETER * 352
);
}
// Test Kyber parameters related to indcpa
#[test]
fn test_kyber_indcpa_public_key_bytes() {
// Test KYBER_INDCPA_PUBLIC_KEY_BYTES
assert_eq!(
KYBER_INDCPA_PUBLIC_KEY_BYTES,
KYBER_POLYVEC_BYTES + KYBER_SYM_BYTES
);
}
#[test]
fn test_kyber_indcpa_secret_key_bytes() {
// Test KYBER_INDCPA_SECRET_KEY_BYTES
assert_eq!(KYBER_INDCPA_SECRET_KEY_BYTES, KYBER_POLYVEC_BYTES);
}
#[test]
fn test_kyber_indcpa_bytes() {
// Test KYBER_INDCPA_BYTES
assert_eq!(
KYBER_INDCPA_BYTES,
KYBER_POLYVEC_COMPRESSED_BYTES
+ KYBER_POLY_COMPRESSED_BYTES
);
}
// Test Kyber parameters related to keys and ciphertext
#[test]
fn test_kyber_public_key_bytes() {
// Test KYBER_PUBLIC_KEY_BYTES
assert_eq!(
KYBER_PUBLIC_KEY_BYTES,
KYBER_INDCPA_PUBLIC_KEY_BYTES
);
}
#[test]
fn test_kyber_ciphertext_bytes() {
// Test KYBER_CIPHERTEXT_BYTES
assert_eq!(KYBER_CIPHERTEXT_BYTES, KYBER_INDCPA_BYTES);
}
}