xref: /dpdk/app/test/test_cryptodev_kasumi_test_vectors.h (revision 0efea35a2bb0ae9df6e204151c7f96b5eb93e130)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2016-2017 Intel Corporation
3  */
4 
5 #ifndef TEST_CRYPTODEV_KASUMI_TEST_VECTORS_H_
6 #define TEST_CRYPTODEV_KASUMI_TEST_VECTORS_H_
7 
8 struct kasumi_test_data {
9 	struct {
10 		uint8_t data[64];
11 		unsigned int len;
12 	} key;
13 
14 	struct {
15 		alignas(16) uint8_t data[64];
16 		unsigned int len;
17 	} cipher_iv;
18 
19 	/*
20 	 * Data may include COUNT (4 bytes), FRESH (4 bytes),
21 	 * DIRECTION (1 bit), plus 1 0*, with enough 0s,
22 	 * so total length is multiple of 8 or 64 bits
23 	 */
24 	struct {
25 		uint8_t data[1024];
26 		unsigned int len; /* length must be in Bits */
27 	} plaintext;
28 
29 	struct {
30 		unsigned int len;
31 	} validDataLenInBits;
32 
33 	struct {
34 		uint8_t data[1024];
35 		unsigned int len; /* length must be in Bits */
36 	} ciphertext;
37 
38 	struct {
39 		unsigned int len;
40 	} validCipherLenInBits;
41 
42 	struct {
43 		unsigned int len;
44 	} validCipherOffsetInBits;
45 
46 	/* Actual length of data to be hashed */
47 	struct {
48 		unsigned int len;
49 	} validAuthLenInBits;
50 
51 	struct {
52 		uint8_t data[64];
53 		unsigned int len;
54 		unsigned int offset_bytes; /* offset must be in Bytes */
55 	} digest;
56 
57 };
58 
59 struct kasumi_test_data kasumi_test_case_1 = {
60 	.key = {
61 		.data = {
62 			0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00,
63 			0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48
64 		},
65 		.len = 16
66 	},
67 	.cipher_iv = {
68 		.data = {
69 			0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00
70 		},
71 		.len = 8
72 	},
73 	.plaintext = {
74 		.data = {
75 			0x7E, 0xC6, 0x12, 0x72, 0x74, 0x3B, 0xF1, 0x61,
76 			0x47, 0x26, 0x44, 0x6A, 0x6C, 0x38, 0xCE, 0xD1,
77 			0x66, 0xF6, 0xCA, 0x76, 0xEB, 0x54, 0x30, 0x04,
78 			0x42, 0x86, 0x34, 0x6C, 0xEF, 0x13, 0x0F, 0x92,
79 			0x92, 0x2B, 0x03, 0x45, 0x0D, 0x3A, 0x99, 0x75,
80 			0xE5, 0xBD, 0x2E, 0xA0, 0xEB, 0x55, 0xAD, 0x8E,
81 			0x1B, 0x19, 0x9E, 0x3E, 0xC4, 0x31, 0x60, 0x20,
82 			0xE9, 0xA1, 0xB2, 0x85, 0xE7, 0x62, 0x79, 0x53,
83 			0x59, 0xB7, 0xBD, 0xFD, 0x39, 0xBE, 0xF4, 0xB2,
84 			0x48, 0x45, 0x83, 0xD5, 0xAF, 0xE0, 0x82, 0xAE,
85 			0xE6, 0x38, 0xBF, 0x5F, 0xD5, 0xA6, 0x06, 0x19,
86 			0x39, 0x01, 0xA0, 0x8F, 0x4A, 0xB4, 0x1A, 0xAB,
87 			0x9B, 0x13, 0x48, 0x80
88 		},
89 		.len = 800
90 	},
91 	.ciphertext = {
92 		.data = {
93 			0xD1, 0xE2, 0xDE, 0x70, 0xEE, 0xF8, 0x6C, 0x69,
94 			0x64, 0xFB, 0x54, 0x2B, 0xC2, 0xD4, 0x60, 0xAA,
95 			0xBF, 0xAA, 0x10, 0xA4, 0xA0, 0x93, 0x26, 0x2B,
96 			0x7D, 0x19, 0x9E, 0x70, 0x6F, 0xC2, 0xD4, 0x89,
97 			0x15, 0x53, 0x29, 0x69, 0x10, 0xF3, 0xA9, 0x73,
98 			0x01, 0x26, 0x82, 0xE4, 0x1C, 0x4E, 0x2B, 0x02,
99 			0xBE, 0x20, 0x17, 0xB7, 0x25, 0x3B, 0xBF, 0x93,
100 			0x09, 0xDE, 0x58, 0x19, 0xCB, 0x42, 0xE8, 0x19,
101 			0x56, 0xF4, 0xC9, 0x9B, 0xC9, 0x76, 0x5C, 0xAF,
102 			0x53, 0xB1, 0xD0, 0xBB, 0x82, 0x79, 0x82, 0x6A,
103 			0xDB, 0xBC, 0x55, 0x22, 0xE9, 0x15, 0xC1, 0x20,
104 			0xA6, 0x18, 0xA5, 0xA7, 0xF5, 0xE8, 0x97, 0x08,
105 			0x93, 0x39, 0x65, 0x0F
106 		},
107 		.len = 800
108 	},
109 	.validCipherLenInBits = {
110 		.len = 798
111 	},
112 	.validCipherOffsetInBits = {
113 		.len = 0
114 	}
115 };
116 
117 struct kasumi_test_data kasumi_test_case_2 = {
118 	.key = {
119 		.data = {
120 			0xEF, 0xA8, 0xB2, 0x22, 0x9E, 0x72, 0x0C, 0x2A,
121 			0x7C, 0x36, 0xEA, 0x55, 0xE9, 0x60, 0x56, 0x95
122 		},
123 		.len = 16
124 	},
125 	.cipher_iv = {
126 		.data = {
127 			0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00
128 		},
129 		.len = 8
130 	},
131 	.plaintext = {
132 		.data = {
133 			0x10, 0x11, 0x12, 0x31, 0xE0, 0x60, 0x25, 0x3A,
134 			0x43, 0xFD, 0x3F, 0x57, 0xE3, 0x76, 0x07, 0xAB,
135 			0x28, 0x27, 0xB5, 0x99, 0xB6, 0xB1, 0xBB, 0xDA,
136 			0x37, 0xA8, 0xAB, 0xCC, 0x5A, 0x8C, 0x55, 0x0D,
137 			0x1B, 0xFB, 0x2F, 0x49, 0x46, 0x24, 0xFB, 0x50,
138 			0x36, 0x7F, 0xA3, 0x6C, 0xE3, 0xBC, 0x68, 0xF1,
139 			0x1C, 0xF9, 0x3B, 0x15, 0x10, 0x37, 0x6B, 0x02,
140 			0x13, 0x0F, 0x81, 0x2A, 0x9F, 0xA1, 0x69, 0xD8
141 		},
142 		.len = 512
143 	},
144 	.ciphertext = {
145 		.data = {
146 			0x3D, 0xEA, 0xCC, 0x7C, 0x15, 0x82, 0x1C, 0xAA,
147 			0x89, 0xEE, 0xCA, 0xDE, 0x9B, 0x5B, 0xD3, 0x61,
148 			0x4B, 0xD0, 0xC8, 0x41, 0x9D, 0x71, 0x03, 0x85,
149 			0xDD, 0xBE, 0x58, 0x49, 0xEF, 0x1B, 0xAC, 0x5A,
150 			0xE8, 0xB1, 0x4A, 0x5B, 0x0A, 0x67, 0x41, 0x52,
151 			0x1E, 0xB4, 0xE0, 0x0B, 0xB9, 0xEC, 0xF3, 0xE9,
152 			0xF7, 0xCC, 0xB9, 0xCA, 0xE7, 0x41, 0x52, 0xD7,
153 			0xF4, 0xE2, 0xA0, 0x34, 0xB6, 0xEA, 0x00, 0xEC
154 		},
155 		.len = 512
156 	},
157 	.validCipherLenInBits = {
158 		.len = 510
159 	},
160 	.validCipherOffsetInBits = {
161 		.len = 0
162 	}
163 };
164 
165 struct kasumi_test_data kasumi_test_case_3 = {
166 	.key = {
167 		.data = {
168 			 0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D, 0x51, 0x20,
169 			 0x4E, 0xA5, 0xF1, 0x45, 0x10, 0x10, 0xD8, 0x52
170 		},
171 		.len = 16
172 	},
173 	.cipher_iv = {
174 		.data = {
175 			0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00
176 		},
177 		.len = 8
178 	},
179 	.plaintext = {
180 		.data = {
181 			0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49,
182 			0xAD, 0x9C, 0x44, 0x1F, 0x89, 0x0B, 0x38, 0xC4,
183 			0x57, 0xA4, 0x9D, 0x42, 0x14, 0x07, 0xE8, 0xC0
184 		},
185 		.len = 192
186 	},
187 	.ciphertext = {
188 		.data = {
189 			0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49,
190 			0x9B, 0xC9, 0x2C, 0xA8, 0x03, 0xC6, 0x7B, 0x28,
191 			0xA1, 0x1A, 0x4B, 0xEE, 0x5A, 0x0C, 0x25, 0xC0
192 		},
193 		.len = 192
194 	},
195 	.validDataLenInBits = {
196 		.len = 192
197 	},
198 	.validCipherLenInBits = {
199 		.len = 120
200 	},
201 	.validAuthLenInBits = {
202 		.len = 192
203 	},
204 	.validCipherOffsetInBits = {
205 		.len = 64
206 	},
207 	.digest = {
208 		.data = {0x87, 0x5F, 0xE4, 0x89},
209 		.len  = 4,
210 		.offset_bytes = 0
211 	}
212 };
213 
214 struct kasumi_test_data kasumi_test_case_4 = {
215 	.key = {
216 		.data = {
217 			0xD3, 0xC5, 0xD5, 0x92, 0x32, 0x7F, 0xB1, 0x1C,
218 			0x40, 0x35, 0xC6, 0x68, 0x0A, 0xF8, 0xC6, 0xD1
219 		},
220 		.len = 16
221 	},
222 	.cipher_iv = {
223 		.data = {
224 			0x39, 0x8A, 0x59, 0xB4, 0x2C, 0x00, 0x00, 0x00,
225 		},
226 		.len = 8
227 	},
228 	.plaintext = {
229 		.data = {
230 			0x98, 0x1B, 0xA6, 0x82, 0x4C, 0x1B, 0xFB, 0x1A,
231 			0xB4, 0x85, 0x47, 0x20, 0x29, 0xB7, 0x1D, 0x80,
232 			0x8C, 0xE3, 0x3E, 0x2C, 0xC3, 0xC0, 0xB5, 0xFC,
233 			0x1F, 0x3D, 0xE8, 0xA6, 0xDC, 0x66, 0xB1, 0xF0
234 		},
235 		.len = 256
236 	},
237 	.ciphertext = {
238 		.data = {
239 			0x5B, 0xB9, 0x43, 0x1B, 0xB1, 0xE9, 0x8B, 0xD1,
240 			0x1B, 0x93, 0xDB, 0x7C, 0x3D, 0x45, 0x13, 0x65,
241 			0x59, 0xBB, 0x86, 0xA2, 0x95, 0xAA, 0x20, 0x4E,
242 			0xCB, 0xEB, 0xF6, 0xF7, 0xA5, 0x10, 0x15, 0x10
243 		},
244 		.len = 256
245 	},
246 	.validCipherLenInBits = {
247 		.len = 253
248 	},
249 	.validCipherOffsetInBits = {
250 		.len = 0
251 	}
252 };
253 
254 struct kasumi_test_data kasumi_test_case_5 = {
255 	.key = {
256 		.data = {
257 			0x60, 0x90, 0xEA, 0xE0, 0x4C, 0x83, 0x70, 0x6E,
258 			0xEC, 0xBF, 0x65, 0x2B, 0xE8, 0xE3, 0x65, 0x66
259 		},
260 		.len = 16
261 	},
262 	.cipher_iv = {
263 		.data = {
264 			0x72, 0xA4, 0xF2, 0x0F, 0x48, 0x00, 0x00, 0x00
265 		},
266 		.len = 8
267 	},
268 	.plaintext = {
269 		.data = {
270 			0x40, 0x98, 0x1B, 0xA6, 0x82, 0x4C, 0x1B, 0xFB,
271 			0x42, 0x86, 0xB2, 0x99, 0x78, 0x3D, 0xAF, 0x44,
272 			0x2C, 0x09, 0x9F, 0x7A, 0xB0, 0xF5, 0x8D, 0x5C,
273 			0x8E, 0x46, 0xB1, 0x04, 0xF0, 0x8F, 0x01, 0xB4,
274 			0x1A, 0xB4, 0x85, 0x47, 0x20, 0x29, 0xB7, 0x1D,
275 			0x36, 0xBD, 0x1A, 0x3D, 0x90, 0xDC, 0x3A, 0x41,
276 			0xB4, 0x6D, 0x51, 0x67, 0x2A, 0xC4, 0xC9, 0x66,
277 			0x3A, 0x2B, 0xE0, 0x63, 0xDA, 0x4B, 0xC8, 0xD2,
278 			0x80, 0x8C, 0xE3, 0x3E, 0x2C, 0xCC, 0xBF, 0xC6,
279 			0x34, 0xE1, 0xB2, 0x59, 0x06, 0x08, 0x76, 0xA0,
280 			0xFB, 0xB5, 0xA4, 0x37, 0xEB, 0xCC, 0x8D, 0x31,
281 			0xC1, 0x9E, 0x44, 0x54, 0x31, 0x87, 0x45, 0xE3,
282 			0x98, 0x76, 0x45, 0x98, 0x7A, 0x98, 0x6F, 0x2C,
283 			0xB0
284 		},
285 		.len = 840
286 	},
287 	.ciphertext = {
288 		.data = {
289 			0xDD, 0xB3, 0x64, 0xDD, 0x2A, 0xAE, 0xC2, 0x4D,
290 			0xFF, 0x29, 0x19, 0x57, 0xB7, 0x8B, 0xAD, 0x06,
291 			0x3A, 0xC5, 0x79, 0xCD, 0x90, 0x41, 0xBA, 0xBE,
292 			0x89, 0xFD, 0x19, 0x5C, 0x05, 0x78, 0xCB, 0x9F,
293 			0xDE, 0x42, 0x17, 0x56, 0x61, 0x78, 0xD2, 0x02,
294 			0x40, 0x20, 0x6D, 0x07, 0xCF, 0xA6, 0x19, 0xEC,
295 			0x05, 0x9F, 0x63, 0x51, 0x44, 0x59, 0xFC, 0x10,
296 			0xD4, 0x2D, 0xC9, 0x93, 0x4E, 0x56, 0xEB, 0xC0,
297 			0xCB, 0xC6, 0x0D, 0x4D, 0x2D, 0xF1, 0x74, 0x77,
298 			0x4C, 0xBD, 0xCD, 0x5D, 0xA4, 0xA3, 0x50, 0x31,
299 			0x7A, 0x7F, 0x12, 0xE1, 0x94, 0x94, 0x71, 0xF8,
300 			0xA2, 0x95, 0xF2, 0x72, 0xE6, 0x8F, 0xC0, 0x71,
301 			0x59, 0xB0, 0x7D, 0x8E, 0x2D, 0x26, 0xE4, 0x59,
302 			0x9E
303 		},
304 		.len = 840
305 	},
306 	.validCipherLenInBits = {
307 		.len = 837
308 	},
309 	.validCipherOffsetInBits = {
310 		.len = 0
311 	}
312 };
313 
314 struct kasumi_test_data kasumi_test_case_6 = {
315 	.key = {
316 		.data = {
317 			 0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D, 0x51, 0x20,
318 			 0x4E, 0xA5, 0xF1, 0x45, 0x10, 0x10, 0xD8, 0x52
319 		},
320 		.len = 16
321 	},
322 	.cipher_iv = {
323 		.data = {
324 			0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00
325 		},
326 		.len = 8
327 	},
328 	.plaintext = {
329 		.data = {
330 			0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49,
331 			0xAD, 0x9C, 0x44, 0x1F, 0x89, 0x0B, 0x38, 0xC4,
332 			0x57, 0xA4, 0x9D, 0x42, 0x14, 0x07, 0xE8, 0xC0
333 		},
334 		.len = 192
335 	},
336 	.ciphertext = {
337 		.data = {
338 			0x38, 0xA6, 0xF0, 0x56, 0x05, 0xD2, 0xEC, 0x49,
339 			0x9B, 0xC9, 0x2C, 0xA8, 0x03, 0xC6, 0x7B, 0x28,
340 			0xA1, 0x1A, 0x4B, 0xEE, 0x5A, 0x0C, 0x25, 0xC0
341 		},
342 		.len = 192
343 	},
344 	.validDataLenInBits = {
345 		.len = 192
346 	},
347 	.validCipherLenInBits = {
348 		.len = 120
349 	},
350 	.validCipherOffsetInBits = {
351 		.len = 64
352 	},
353 	.validAuthLenInBits = {
354 		.len = 192
355 	},
356 	.digest = {
357 		.data = {0x0F, 0xD2, 0xAA, 0xB5},
358 		.len  = 4,
359 		.offset_bytes = 0
360 	}
361 };
362 
363 struct kasumi_test_data kasumi_auth_cipher_test_case_2 = {
364 	.key = {
365 		.data = {
366 			0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
367 			0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10
368 		},
369 		.len = 16
370 	},
371 	.cipher_iv = {
372 		.data = {
373 			0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
374 		},
375 		.len = 8
376 	},
377 	.plaintext = {
378 		.data = {
379 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
380 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
381 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
382 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
383 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
384 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
385 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
386 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
387 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
388 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
389 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
390 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
391 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
392 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
393 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A,
394 			0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A
395 		},
396 		.len = 128 << 3
397 	},
398 	.ciphertext = {
399 		.data = {
400 			0x5A, 0x5A, 0xFA, 0xC6, 0xA9, 0x09, 0x91, 0x74,
401 			0x35, 0xAA, 0x85, 0xB0, 0xE0, 0x07, 0x78, 0xDA,
402 			0x05, 0x88, 0x4E, 0x8D, 0xEC, 0x41, 0xF3, 0xBC,
403 			0x0D, 0x9F, 0xE3, 0xEF, 0x8E, 0x33, 0x22, 0xF3,
404 			0x15, 0x4B, 0x12, 0xC2, 0x22, 0x12, 0xD6, 0x46,
405 			0xD7, 0x27, 0x20, 0x1D, 0x50, 0x60, 0x9D, 0x42,
406 			0xF6, 0x73, 0xF5, 0x28, 0x88, 0xBE, 0x60, 0xEC,
407 			0x9C, 0x18, 0x81, 0xC4, 0x0A, 0xF4, 0xD5, 0x7A,
408 			0xB5, 0x3F, 0x1A, 0x79, 0xAB, 0x79, 0xDB, 0x24,
409 			0xF9, 0x6E, 0x86, 0x78, 0x10, 0x19, 0xAE, 0xD8,
410 			0xB2, 0xCA, 0x32, 0x8D, 0xD8, 0x28, 0x8B, 0x2F,
411 			0x5B, 0x3C, 0xE3, 0x7D, 0xD3, 0x70, 0x11, 0xDE,
412 			0x2C, 0xDC, 0xC1, 0xC6, 0xB6, 0xFD, 0xF3, 0x7D,
413 			0x38, 0x97, 0x8B, 0x81, 0x02, 0x88, 0x62, 0x3C,
414 			0x1E, 0x1A, 0x93, 0x21, 0xE3, 0x6D, 0xD7, 0x20,
415 			0x80, 0xA8, 0xDA, 0x18, 0x8F, 0x58, 0x0F, 0x4E
416 		},
417 		.len = 128 << 3
418 	},
419 	.validDataLenInBits = {
420 		.len = 128 << 3
421 	},
422 	.validCipherLenInBits = {
423 		.len = 126 << 3
424 	},
425 	.validAuthLenInBits = {
426 		.len = 124 << 3
427 	},
428 	.validCipherOffsetInBits = {
429 		.len = 2 << 3
430 	},
431 	.digest = {
432 		.data = {0x8F, 0x58, 0x0F, 0x4E},
433 		.len  = 4,
434 		.offset_bytes = 124
435 	}
436 };
437 #endif /* TEST_CRYPTODEV_KASUMI_TEST_VECTORS_H_ */
438