binius_field/
packed_aes_field.rs1pub use crate::arch::{
4 packed_aes_8::*, packed_aes_16::*, packed_aes_32::*, packed_aes_64::*, packed_aes_128::*,
5 packed_aes_256::*, packed_aes_512::*,
6};
7
8#[cfg(test)]
9mod test_utils {
10 macro_rules! define_multiply_tests {
13 ($mult_func:path, $constraint:ty) => {
14 $crate::packed_binary_field::test_utils::define_check_packed_mul!(
15 $mult_func,
16 $constraint
17 );
18
19 proptest! {
20 #[test]
21 fn test_mul_packed_8(a_val in any::<u8>(), b_val in any::<u8>()) {
22 use $crate::arch::packed_aes_8::*;
23
24 TestMult::<PackedAESBinaryField1x8b>::test_mul(
25 a_val.into(),
26 b_val.into(),
27 );
28 }
29
30 #[test]
31 fn test_mul_packed_16(a_val in any::<u16>(), b_val in any::<u16>()) {
32 use $crate::arch::packed_aes_16::*;
33
34 TestMult::<PackedAESBinaryField2x8b>::test_mul(
35 a_val.into(),
36 b_val.into(),
37 );
38 }
39
40 #[test]
41 fn test_mul_packed_32(a_val in any::<u32>(), b_val in any::<u32>()) {
42 use $crate::arch::packed_aes_32::*;
43
44 TestMult::<PackedAESBinaryField4x8b>::test_mul(
45 a_val.into(),
46 b_val.into(),
47 );
48 }
49
50 #[test]
51 fn test_mul_packed_64(a_val in any::<u64>(), b_val in any::<u64>()) {
52 use $crate::arch::packed_aes_64::*;
53
54 TestMult::<PackedAESBinaryField8x8b>::test_mul(
55 a_val.into(),
56 b_val.into(),
57 );
58 }
59
60 #[test]
61 fn test_mul_packed_128(a_val in any::<u128>(), b_val in any::<u128>()) {
62 use $crate::arch::packed_aes_128::*;
63
64 TestMult::<PackedAESBinaryField16x8b>::test_mul(
65 a_val.into(),
66 b_val.into(),
67 );
68 }
69
70 #[test]
71 fn test_mul_packed_256(a_val in any::<[u128; 2]>(), b_val in any::<[u128; 2]>()) {
72 use $crate::arch::packed_aes_256::*;
73
74 TestMult::<PackedAESBinaryField32x8b>::test_mul(
75 a_val.into(),
76 b_val.into(),
77 );
78 }
79
80 #[test]
81 fn test_mul_packed_512(a_val in any::<[u128; 4]>(), b_val in any::<[u128; 4]>()) {
82 use $crate::arch::packed_aes_512::*;
83
84 TestMult::<PackedAESBinaryField64x8b>::test_mul(
85 a_val.into(),
86 b_val.into(),
87 );
88 }
89 }
90 };
91 }
92
93 macro_rules! define_square_tests {
96 ($square_func:path, $constraint:ident) => {
97 $crate::packed_binary_field::test_utils::define_check_packed_square!(
98 $square_func,
99 $constraint
100 );
101
102 proptest! {
103 #[test]
104 fn test_square_packed_8(a_val in any::<u8>()) {
105 use $crate::arch::packed_aes_8::*;
106
107 TestSquare::<PackedAESBinaryField1x8b>::test_square(a_val.into());
108 }
109
110 #[test]
111 fn test_square_packed_16(a_val in any::<u16>()) {
112 use $crate::arch::packed_aes_16::*;
113
114 TestSquare::<PackedAESBinaryField2x8b>::test_square(a_val.into());
115 }
116
117 #[test]
118 fn test_square_packed_32(a_val in any::<u32>()) {
119 use $crate::arch::packed_aes_32::*;
120
121 TestSquare::<PackedAESBinaryField4x8b>::test_square(a_val.into());
122 }
123
124 #[test]
125 fn test_square_packed_64(a_val in any::<u64>()) {
126 use $crate::arch::packed_aes_64::*;
127
128 TestSquare::<PackedAESBinaryField8x8b>::test_square(a_val.into());
129 }
130
131 #[test]
132 fn test_square_packed_128(a_val in any::<u128>()) {
133 use $crate::arch::packed_aes_128::*;
134
135 TestSquare::<PackedAESBinaryField16x8b>::test_square(a_val.into());
136 }
137
138 #[test]
139 fn test_square_packed_256(a_val in any::<[u128; 2]>()) {
140 use $crate::arch::packed_aes_256::*;
141
142 TestSquare::<PackedAESBinaryField32x8b>::test_square(a_val.into());
143 }
144
145 #[test]
146 fn test_square_packed_512(a_val in any::<[u128; 4]>()) {
147 use $crate::arch::packed_aes_512::*;
148
149 TestSquare::<PackedAESBinaryField64x8b>::test_square(a_val.into());
150 }
151 }
152 };
153 }
154
155 macro_rules! define_invert_tests {
158 ($invert_func:path, $constraint:ident) => {
159 $crate::packed_binary_field::test_utils::define_check_packed_inverse!(
160 $invert_func,
161 $constraint
162 );
163
164 proptest! {
165 #[test]
166 fn test_invert_packed_8(a_val in any::<u8>()) {
167 use $crate::arch::packed_aes_8::*;
168
169 TestSquare::<PackedAESBinaryField1x8b>::test_invert(a_val.into());
170 }
171
172 #[test]
173 fn test_invert_packed_16(a_val in any::<u16>()) {
174 use $crate::arch::packed_aes_16::*;
175
176 TestSquare::<PackedAESBinaryField2x8b>::test_invert(a_val.into());
177 }
178
179 #[test]
180 fn test_invert_packed_32(a_val in any::<u32>()) {
181 use $crate::arch::packed_aes_32::*;
182
183 TestSquare::<PackedAESBinaryField4x8b>::test_invert(a_val.into());
184 }
185
186 #[test]
187 fn test_invert_packed_64(a_val in any::<u64>()) {
188 use $crate::arch::packed_aes_64::*;
189
190 TestSquare::<PackedAESBinaryField8x8b>::test_invert(a_val.into());
191 }
192
193 #[test]
194 fn test_invert_packed_128(a_val in any::<u128>()) {
195 use $crate::arch::packed_aes_128::*;
196
197 TestInvert::<PackedAESBinaryField16x8b>::test_invert(a_val.into());
198 }
199
200 #[test]
201 fn test_invert_packed_256(a_val in any::<[u128; 2]>()) {
202 use $crate::arch::packed_aes_256::*;
203
204 TestInvert::<PackedAESBinaryField32x8b>::test_invert(a_val.into());
205 }
206
207 #[test]
208 fn test_invert_packed_512(a_val in any::<[u128; 4]>()) {
209 use $crate::arch::packed_aes_512::*;
210
211 TestInvert::<PackedAESBinaryField64x8b>::test_invert(a_val.into());
212 }
213 }
214 };
215 }
216
217 macro_rules! define_transformation_tests {
218 ($constraint:path) => {
219 $crate::packed_binary_field::test_utils::define_check_packed_transformation!(
220 $constraint
221 );
222
223 proptest::proptest! {
224 #[test]
225 fn test_transformation_packed_aes_8(a_val in proptest::prelude::any::<u8>()) {
226 use crate::arch::packed_aes_8::*;
227
228 TestTransformation::<PackedAESBinaryField1x8b>::test_transformation(a_val.into());
229 }
230
231 #[test]
232 fn test_transformation_packed_aes_16(a_val in proptest::prelude::any::<u16>()) {
233 use crate::arch::packed_aes_16::*;
234
235 TestTransformation::<PackedAESBinaryField2x8b>::test_transformation(a_val.into());
236 }
237
238 #[test]
239 fn test_transformation_packed_aes_32(a_val in proptest::prelude::any::<u32>()) {
240 use crate::arch::packed_aes_32::*;
241
242 TestTransformation::<PackedAESBinaryField4x8b>::test_transformation(a_val.into());
243 }
244
245 #[test]
246 fn test_transformation_packed_aes_64(a_val in proptest::prelude::any::<u64>()) {
247 use crate::arch::packed_aes_64::*;
248
249 TestTransformation::<PackedAESBinaryField8x8b>::test_transformation(a_val.into());
250 }
251
252 #[test]
253 fn test_transformation_packed_aes_128(a_val in proptest::prelude::any::<u128>()) {
254 use crate::arch::packed_aes_128::*;
255
256 TestTransformation::<PackedAESBinaryField16x8b>::test_transformation(a_val.into());
257 }
258
259 #[test]
260 fn test_transformation_packed_aes_256(a_val in proptest::prelude::any::<[u128; 2]>()) {
261 use crate::arch::packed_aes_256::*;
262
263 TestTransformation::<PackedAESBinaryField32x8b>::test_transformation(a_val.into());
264 }
265
266 #[test]
267 fn test_transformation_packed_aes_512(a_val in proptest::prelude::any::<[u128; 4]>()) {
268 use crate::arch::packed_aes_512::*;
269
270 TestTransformation::<PackedAESBinaryField64x8b>::test_transformation(a_val.into());
271 }
272 }
273 };
274 }
275
276 pub(crate) use define_invert_tests;
277 pub(crate) use define_multiply_tests;
278 pub(crate) use define_square_tests;
279 pub(crate) use define_transformation_tests;
280}
281
282#[cfg(test)]
283mod tests {
284 use std::ops::Mul;
285
286 use proptest::prelude::*;
287
288 use super::test_utils::{
289 define_invert_tests, define_multiply_tests, define_square_tests,
290 define_transformation_tests,
291 };
292 use crate::{PackedField, linear_transformation::PackedTransformationFactory};
293
294 define_multiply_tests!(Mul::mul, PackedField);
295
296 define_square_tests!(PackedField::square, PackedField);
297
298 define_invert_tests!(PackedField::invert_or_zero, PackedField);
299
300 #[allow(unused)]
301 trait SelfTransformationFactory: PackedTransformationFactory<Self> {}
302
303 impl<T: PackedTransformationFactory<T>> SelfTransformationFactory for T {}
304
305 define_transformation_tests!(SelfTransformationFactory);
306}