1/*-
2 *   BSD LICENSE
3 *
4 *   Copyright(c) 2015 Intel Corporation. All rights reserved.
5 *
6 *   Redistribution and use in source and binary forms, with or without
7 *   modification, are permitted provided that the following conditions
8 *   are met:
9 *
10 *   * Redistributions of source code must retain the above copyright
11 *     notice, this list of conditions and the following disclaimer.
12 *   * Redistributions in binary form must reproduce the above copyright
13 *     notice, this list of conditions and the following disclaimer in
14 *     the documentation and/or other materials provided with the
15 *     distribution.
16 *   * Neither the name of Intel Corporation nor the names of its
17 *     contributors may be used to endorse or promote products derived
18 *     from this software without specific prior written permission.
19 *
20 *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23 *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
24 *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
25 *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
26 *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
30 *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33#ifndef TEST_CRYPTODEV_SNOW3G_TEST_VECTORS_H_
34#define TEST_CRYPTODEV_SNOW3G_TEST_VECTORS_H_
35
36struct snow3g_test_data {
37	struct {
38		uint8_t data[64];
39		unsigned len;
40	} key;
41
42	struct {
43		uint8_t data[64] __rte_aligned(16);
44		unsigned len;
45	} iv;
46
47	struct {
48		uint8_t data[1024];
49		unsigned len; /* length must be in Bits */
50	} plaintext;
51
52	struct {
53		uint8_t data[1024];
54		unsigned len; /* length must be in Bits */
55	} ciphertext;
56
57	struct {
58		unsigned len;
59	} validDataLenInBits;
60
61	struct {
62		unsigned len;
63	} validCipherLenInBits;
64
65	struct {
66		unsigned len;
67	} validCipherOffsetLenInBits;
68
69	struct {
70		unsigned len;
71	} validAuthLenInBits;
72
73	struct {
74		unsigned len;
75	} validAuthOffsetLenInBits;
76
77	struct {
78		uint8_t data[64];
79		unsigned len;
80	} aad;
81
82	struct {
83		uint8_t data[64];
84		unsigned len;
85	} digest;
86};
87struct snow3g_test_data snow3g_test_case_1 = {
88	.key = {
89		.data = {
90			0x2B, 0xD6, 0x45, 0x9F, 0x82, 0xC5, 0xB3, 0x00,
91			0x95, 0x2C, 0x49, 0x10, 0x48, 0x81, 0xFF, 0x48
92		},
93		.len = 16
94	},
95	.iv = {
96		.data = {
97			0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00,
98			0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00
99		},
100		.len = 16
101	},
102	.plaintext = {
103		.data = {
104			0x7E, 0xC6, 0x12, 0x72, 0x74, 0x3B, 0xF1, 0x61,
105			0x47, 0x26, 0x44, 0x6A, 0x6C, 0x38, 0xCE, 0xD1,
106			0x66, 0xF6, 0xCA, 0x76, 0xEB, 0x54, 0x30, 0x04,
107			0x42, 0x86, 0x34, 0x6C, 0xEF, 0x13, 0x0F, 0x92,
108			0x92, 0x2B, 0x03, 0x45, 0x0D, 0x3A, 0x99, 0x75,
109			0xE5, 0xBD, 0x2E, 0xA0, 0xEB, 0x55, 0xAD, 0x8E,
110			0x1B, 0x19, 0x9E, 0x3E, 0xC4, 0x31, 0x60, 0x20,
111			0xE9, 0xA1, 0xB2, 0x85, 0xE7, 0x62, 0x79, 0x53,
112			0x59, 0xB7, 0xBD, 0xFD, 0x39, 0xBE, 0xF4, 0xB2,
113			0x48, 0x45, 0x83, 0xD5, 0xAF, 0xE0, 0x82, 0xAE,
114			0xE6, 0x38, 0xBF, 0x5F, 0xD5, 0xA6, 0x06, 0x19,
115			0x39, 0x01, 0xA0, 0x8F, 0x4A, 0xB4, 0x1A, 0xAB,
116			0x9B, 0x13, 0x48, 0x80
117		},
118		.len = 800
119	},
120	.ciphertext = {
121		.data = {
122			0x8C, 0xEB, 0xA6, 0x29, 0x43, 0xDC, 0xED, 0x3A,
123			0x09, 0x90, 0xB0, 0x6E, 0xA1, 0xB0, 0xA2, 0xC4,
124			0xFB, 0x3C, 0xED, 0xC7, 0x1B, 0x36, 0x9F, 0x42,
125			0xBA, 0x64, 0xC1, 0xEB, 0x66, 0x65, 0xE7, 0x2A,
126			0xA1, 0xC9, 0xBB, 0x0D, 0xEA, 0xA2, 0x0F, 0xE8,
127			0x60, 0x58, 0xB8, 0xBA, 0xEE, 0x2C, 0x2E, 0x7F,
128			0x0B, 0xEC, 0xCE, 0x48, 0xB5, 0x29, 0x32, 0xA5,
129			0x3C, 0x9D, 0x5F, 0x93, 0x1A, 0x3A, 0x7C, 0x53,
130			0x22, 0x59, 0xAF, 0x43, 0x25, 0xE2, 0xA6, 0x5E,
131			0x30, 0x84, 0xAD, 0x5F, 0x6A, 0x51, 0x3B, 0x7B,
132			0xDD, 0xC1, 0xB6, 0x5F, 0x0A, 0xA0, 0xD9, 0x7A,
133			0x05, 0x3D, 0xB5, 0x5A, 0x88, 0xC4, 0xC4, 0xF9,
134			0x60, 0x5E, 0x41, 0x40
135		},
136		.len = 800
137	},
138	.validDataLenInBits = {
139		.len = 798
140	},
141	.validCipherLenInBits = {
142		.len = 800
143	},
144	.validCipherOffsetLenInBits = {
145		.len = 128
146	},
147	.aad = {
148		.data = {
149			 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00,
150			 0x72, 0xA4, 0xF2, 0x0F, 0x64, 0x00, 0x00, 0x00
151		},
152		.len = 16
153	}
154};
155
156struct snow3g_test_data snow3g_test_case_2 = {
157	.key = {
158		.data = {
159			0xEF, 0xA8, 0xB2, 0x22, 0x9E, 0x72, 0x0C, 0x2A,
160			0x7C, 0x36, 0xEA, 0x55, 0xE9, 0x60, 0x56, 0x95
161		},
162		.len = 16
163	},
164	.iv = {
165	       .data = {
166			0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00,
167			0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00
168		},
169	       .len = 16
170	},
171	.plaintext = {
172		.data = {
173			0x10, 0x11, 0x12, 0x31, 0xE0, 0x60, 0x25, 0x3A,
174			0x43, 0xFD, 0x3F, 0x57, 0xE3, 0x76, 0x07, 0xAB,
175			0x28, 0x27, 0xB5, 0x99, 0xB6, 0xB1, 0xBB, 0xDA,
176			0x37, 0xA8, 0xAB, 0xCC, 0x5A, 0x8C, 0x55, 0x0D,
177			0x1B, 0xFB, 0x2F, 0x49, 0x46, 0x24, 0xFB, 0x50,
178			0x36, 0x7F, 0xA3, 0x6C, 0xE3, 0xBC, 0x68, 0xF1,
179			0x1C, 0xF9, 0x3B, 0x15, 0x10, 0x37, 0x6B, 0x02,
180			0x13, 0x0F, 0x81, 0x2A, 0x9F, 0xA1, 0x69, 0xD8
181		},
182		.len = 512
183	},
184	.ciphertext = {
185		.data = {
186				0xE0, 0xDA, 0x15, 0xCA, 0x8E, 0x25, 0x54, 0xF5,
187				0xE5, 0x6C, 0x94, 0x68, 0xDC, 0x6C, 0x7C, 0x12,
188				0x9C, 0x56, 0x8A, 0xA5, 0x03, 0x23, 0x17, 0xE0,
189				0x4E, 0x07, 0x29, 0x64, 0x6C, 0xAB, 0xEF, 0xA6,
190				0x89, 0x86, 0x4C, 0x41, 0x0F, 0x24, 0xF9, 0x19,
191				0xE6, 0x1E, 0x3D, 0xFD, 0xFA, 0xD7, 0x7E, 0x56,
192				0x0D, 0xB0, 0xA9, 0xCD, 0x36, 0xC3, 0x4A, 0xE4,
193				0x18, 0x14, 0x90, 0xB2, 0x9F, 0x5F, 0xA2, 0xFC
194		},
195		.len = 512
196	},
197	.validDataLenInBits = {
198		.len = 510
199	},
200	.validCipherLenInBits = {
201		.len = 512
202	},
203	.validCipherOffsetLenInBits = {
204		.len = 128
205	},
206	.aad = {
207		.data = {
208			 0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00,
209			 0xE2, 0x8B, 0xCF, 0x7B, 0xC0, 0x00, 0x00, 0x00
210		},
211		.len = 16
212	}
213};
214
215struct snow3g_test_data snow3g_test_case_3 = {
216	.key = {
217		.data = {
218			 0x5A, 0xCB, 0x1D, 0x64, 0x4C, 0x0D, 0x51, 0x20,
219			 0x4E, 0xA5, 0xF1, 0x45, 0x10, 0x10, 0xD8, 0x52
220		},
221		.len = 16
222	},
223	.iv = {
224		.data = {
225			0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00,
226			0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00
227		},
228		.len = 16
229	},
230	.plaintext = {
231		.data = {
232			0xAD, 0x9C, 0x44, 0x1F, 0x89, 0x0B, 0x38, 0xC4,
233			0x57, 0xA4, 0x9D, 0x42, 0x14, 0x07, 0xE8
234		},
235		.len = 120
236	},
237	.ciphertext = {
238		.data = {
239			0xBA, 0x0F, 0x31, 0x30, 0x03, 0x34, 0xC5, 0x6B,
240			0x52, 0xA7, 0x49, 0x7C, 0xBA, 0xC0, 0x46
241		},
242		.len = 120
243	},
244	.validDataLenInBits = {
245		.len = 120
246	},
247	.validCipherLenInBits = {
248		.len = 120
249	},
250	.validCipherOffsetLenInBits = {
251		.len = 128
252	},
253	.aad = {
254		.data = {
255			0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00,
256			0xFA, 0x55, 0x6B, 0x26, 0x1C, 0x00, 0x00, 0x00
257		},
258		.len = 16
259	},
260	.digest = {
261		.data = {0xE8, 0x60, 0x5A, 0x3E},
262		.len  = 4
263	},
264	.validAuthLenInBits = {
265		.len = 120
266	},
267	.validAuthOffsetLenInBits = {
268		.len = 128
269	}
270};
271
272struct snow3g_test_data snow3g_test_case_4 = {
273	.key = {
274		.data = {
275			0xD3, 0xC5, 0xD5, 0x92, 0x32, 0x7F, 0xB1, 0x1C,
276			0x40, 0x35, 0xC6, 0x68, 0x0A, 0xF8, 0xC6, 0xD1
277		},
278		.len = 16
279	},
280	.iv = {
281		.data = {
282			0x39, 0x8A, 0x59, 0xB4, 0x2C, 0x00, 0x00, 0x00,
283			0x39, 0x8A, 0x59, 0xB4, 0x2C, 0x00, 0x00, 0x00
284		},
285		.len = 16
286	},
287	.plaintext = {
288		.data = {
289			0x98, 0x1B, 0xA6, 0x82, 0x4C, 0x1B, 0xFB, 0x1A,
290			0xB4, 0x85, 0x47, 0x20, 0x29, 0xB7, 0x1D, 0x80,
291			0x8C, 0xE3, 0x3E, 0x2C, 0xC3, 0xC0, 0xB5, 0xFC,
292			0x1F, 0x3D, 0xE8, 0xA6, 0xDC, 0x66, 0xB1, 0xF0
293		},
294		.len = 256
295	},
296	.ciphertext = {
297		.data = {
298			0x98, 0x9B, 0x71, 0x9C, 0xDC, 0x33, 0xCE, 0xB7,
299			0xCF, 0x27, 0x6A, 0x52, 0x82, 0x7C, 0xEF, 0x94,
300			0xA5, 0x6C, 0x40, 0xC0, 0xAB, 0x9D, 0x81, 0xF7,
301			0xA2, 0xA9, 0xBA, 0xC6, 0x0E, 0x11, 0xC4, 0xB0
302		},
303		.len = 256
304	},
305	.validDataLenInBits = {
306		.len = 253
307	},
308	.validCipherLenInBits = {
309		.len = 256
310	},
311	.validCipherOffsetLenInBits = {
312		.len = 128
313	}
314};
315
316struct snow3g_test_data snow3g_test_case_5 = {
317	.key = {
318		.data = {
319			0x60, 0x90, 0xEA, 0xE0, 0x4C, 0x83, 0x70, 0x6E,
320			0xEC, 0xBF, 0x65, 0x2B, 0xE8, 0xE3, 0x65, 0x66
321		},
322		.len = 16
323	},
324	.iv = {
325		.data = {
326			0x72, 0xA4, 0xF2, 0x0F, 0x48, 0x00, 0x00, 0x00,
327			0x72, 0xA4, 0xF2, 0x0F, 0x48, 0x00, 0x00, 0x00
328		},
329		.len = 16},
330	.plaintext = {
331		.data = {
332			0x40, 0x98, 0x1B, 0xA6, 0x82, 0x4C, 0x1B, 0xFB,
333			0x42, 0x86, 0xB2, 0x99, 0x78, 0x3D, 0xAF, 0x44,
334			0x2C, 0x09, 0x9F, 0x7A, 0xB0, 0xF5, 0x8D, 0x5C,
335			0x8E, 0x46, 0xB1, 0x04, 0xF0, 0x8F, 0x01, 0xB4,
336			0x1A, 0xB4, 0x85, 0x47, 0x20, 0x29, 0xB7, 0x1D,
337			0x36, 0xBD, 0x1A, 0x3D, 0x90, 0xDC, 0x3A, 0x41,
338			0xB4, 0x6D, 0x51, 0x67, 0x2A, 0xC4, 0xC9, 0x66,
339			0x3A, 0x2B, 0xE0, 0x63, 0xDA, 0x4B, 0xC8, 0xD2,
340			0x80, 0x8C, 0xE3, 0x3E, 0x2C, 0xCC, 0xBF, 0xC6,
341			0x34, 0xE1, 0xB2, 0x59, 0x06, 0x08, 0x76, 0xA0,
342			0xFB, 0xB5, 0xA4, 0x37, 0xEB, 0xCC, 0x8D, 0x31,
343			0xC1, 0x9E, 0x44, 0x54, 0x31, 0x87, 0x45, 0xE3,
344			0x98, 0x76, 0x45, 0x98, 0x7A, 0x98, 0x6F, 0x2C,
345			0xB0
346		},
347		.len = 840
348	},
349	.ciphertext = {
350		.data = {
351			0x58, 0x92, 0xBB, 0xA8, 0x8B, 0xBB, 0xCA, 0xAE,
352			0xAE, 0x76, 0x9A, 0xA0, 0x6B, 0x68, 0x3D, 0x3A,
353			0x17, 0xCC, 0x04, 0xA3, 0x69, 0x88, 0x16, 0x97,
354			0x43, 0x5E, 0x44, 0xFE, 0xD5, 0xFF, 0x9A, 0xF5,
355			0x7B, 0x9E, 0x89, 0x0D, 0x4D, 0x5C, 0x64, 0x70,
356			0x98, 0x85, 0xD4, 0x8A, 0xE4, 0x06, 0x90, 0xEC,
357			0x04, 0x3B, 0xAA, 0xE9, 0x70, 0x57, 0x96, 0xE4,
358			0xA9, 0xFF, 0x5A, 0x4B, 0x8D, 0x8B, 0x36, 0xD7,
359			0xF3, 0xFE, 0x57, 0xCC, 0x6C, 0xFD, 0x6C, 0xD0,
360			0x05, 0xCD, 0x38, 0x52, 0xA8, 0x5E, 0x94, 0xCE,
361			0x6B, 0xCD, 0x90, 0xD0, 0xD0, 0x78, 0x39, 0xCE,
362			0x09, 0x73, 0x35, 0x44, 0xCA, 0x8E, 0x35, 0x08,
363			0x43, 0x24, 0x85, 0x50, 0x92, 0x2A, 0xC1, 0x28,
364			0x18
365		},
366		.len = 840
367	},
368	.validDataLenInBits = {
369		.len = 837
370	},
371	.validCipherLenInBits = {
372		.len = 840
373	},
374	.validCipherOffsetLenInBits = {
375		.len = 128
376	}
377};
378struct snow3g_test_data snow3g_test_case_6 = {
379	.key = {
380		.data = {
381			0xC7, 0x36, 0xC6, 0xAA, 0xB2, 0x2B, 0xFF, 0xF9,
382			0x1E, 0x26, 0x98, 0xD2, 0xE2, 0x2A, 0xD5, 0x7E
383		},
384		.len = 16
385	},
386	.iv = {
387		.data = {
388			0x14, 0x79, 0x3E, 0x41, 0x03, 0x97, 0xE8, 0xFD,
389			0x94, 0x79, 0x3E, 0x41, 0x03, 0x97, 0x68, 0xFD
390		},
391		.len = 16
392	},
393	.aad = {
394		.data = {
395			0x14, 0x79, 0x3E, 0x41, 0x03, 0x97, 0xE8, 0xFD,
396			0x94, 0x79, 0x3E, 0x41, 0x03, 0x97, 0x68, 0xFD
397		},
398		.len = 16
399	},
400	.plaintext = {
401		.data = {
402			0xD0, 0xA7, 0xD4, 0x63, 0xDF, 0x9F, 0xB2, 0xB2,
403			0x78, 0x83, 0x3F, 0xA0, 0x2E, 0x23, 0x5A, 0xA1,
404			0x72, 0xBD, 0x97, 0x0C, 0x14, 0x73, 0xE1, 0x29,
405			0x07, 0xFB, 0x64, 0x8B, 0x65, 0x99, 0xAA, 0xA0,
406			0xB2, 0x4A, 0x03, 0x86, 0x65, 0x42, 0x2B, 0x20,
407			0xA4, 0x99, 0x27, 0x6A, 0x50, 0x42, 0x70, 0x09
408		},
409		.len = 384
410	},
411	.ciphertext = {
412	   .data = {
413			0x95, 0x2E, 0x5A, 0xE1, 0x50, 0xB8, 0x59, 0x2A,
414			0x9B, 0xA0, 0x38, 0xA9, 0x8E, 0x2F, 0xED, 0xAB,
415			0xFD, 0xC8, 0x3B, 0x47, 0x46, 0x0B, 0x50, 0x16,
416			0xEC, 0x88, 0x45, 0xB6, 0x05, 0xC7, 0x54, 0xF8,
417			0xBD, 0x91, 0xAA, 0xB6, 0xA4, 0xDC, 0x64, 0xB4,
418			0xCB, 0xEB, 0x97, 0x06, 0x4C, 0xF7, 0x02, 0x3D
419		},
420		.len = 384
421	},
422	.digest = {
423		.data = {0x38, 0xB5, 0x54, 0xC0 },
424		.len  = 4
425	},
426	.validDataLenInBits = {
427		.len = 384
428	},
429	.validCipherLenInBits = {
430		.len = 384
431	},
432	.validCipherOffsetLenInBits = {
433		.len = 128
434	},
435	.validAuthLenInBits = {
436		.len = 384
437	},
438	.validAuthOffsetLenInBits = {
439		.len = 128
440	}
441};
442
443#endif /* TEST_CRYPTODEV_SNOW3G_TEST_VECTORS_H_ */
444