test/crypto: add IPv6 tunnel mode cases
[dpdk.git] / app / test / test_cryptodev_security_ipsec_test_vectors.h
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(c) 2021 Marvell
3  */
4
5 #ifndef TEST_CRYPTODEV_SECURITY_IPSEC_TEST_VECTORS_H_
6 #define TEST_CRYPTODEV_SECURITY_IPSEC_TEST_VECTORS_H_
7
8 #include <rte_crypto.h>
9 #include <rte_security.h>
10
11 #include "test_cryptodev_security_ipsec.h"
12
13 /*
14  * Known vectors
15  *
16  * AES-GCM vectors are based on :
17  * https://datatracker.ietf.org/doc/html/draft-mcgrew-gcm-test-01
18  *
19  * Vectors are updated to have corrected L4 checksum and sequence number 1.
20  */
21
22 struct ipsec_test_data pkt_aes_128_gcm = {
23         .key = {
24                 .data = {
25                         0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
26                         0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08
27                 },
28         },
29         .input_text = {
30                 .data = {
31                         /* IP */
32                         0x45, 0x00, 0x00, 0x3e, 0x69, 0x8f, 0x00, 0x00,
33                         0x80, 0x11, 0x4d, 0xcc, 0xc0, 0xa8, 0x01, 0x02,
34                         0xc0, 0xa8, 0x01, 0x01,
35
36                         /* UDP */
37                         0x0a, 0x98, 0x00, 0x35, 0x00, 0x2a, 0x23, 0x43,
38                         0xb2, 0xd0, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
39                         0x00, 0x00, 0x00, 0x00, 0x03, 0x73, 0x69, 0x70,
40                         0x09, 0x63, 0x79, 0x62, 0x65, 0x72, 0x63, 0x69,
41                         0x74, 0x79, 0x02, 0x64, 0x6b, 0x00, 0x00, 0x01,
42                         0x00, 0x01,
43                 },
44                 .len = 62,
45         },
46         .output_text = {
47                 .data = {
48                         /* IP - outer header */
49                         0x45, 0x00, 0x00, 0x74, 0x69, 0x8f, 0x00, 0x00,
50                         0x80, 0x32, 0x4d, 0x75, 0xc0, 0xa8, 0x01, 0x02,
51                         0xc0, 0xa8, 0x01, 0x01,
52
53                         /* ESP */
54                         0x00, 0x00, 0xa5, 0xf8, 0x00, 0x00, 0x00, 0x01,
55
56                         /* IV */
57                         0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88,
58
59                         /* Data */
60                         0xde, 0xb2, 0x2c, 0xd9, 0xb0, 0x7c, 0x72, 0xc1,
61                         0x6e, 0x3a, 0x65, 0xbe, 0xeb, 0x8d, 0xf3, 0x04,
62                         0xa5, 0xa5, 0x89, 0x7d, 0x33, 0xae, 0x53, 0x0f,
63                         0x1b, 0xa7, 0x6d, 0x5d, 0x11, 0x4d, 0x2a, 0x5c,
64                         0x3d, 0xe8, 0x18, 0x27, 0xc1, 0x0e, 0x9a, 0x4f,
65                         0x51, 0x33, 0x0d, 0x0e, 0xec, 0x41, 0x66, 0x42,
66                         0xcf, 0xbb, 0x85, 0xa5, 0xb4, 0x7e, 0x48, 0xa4,
67                         0xec, 0x3b, 0x9b, 0xa9, 0x5d, 0x91, 0x8b, 0xd4,
68                         0x29, 0xc7, 0x37, 0x57, 0x9f, 0xf1, 0x9e, 0x58,
69                         0xcf, 0xfc, 0x60, 0x7a, 0x3b, 0xce, 0x89, 0x94,
70
71                 },
72                 .len = 116,
73         },
74         .salt = {
75                 .data = {
76                         0xca, 0xfe, 0xba, 0xbe
77                 },
78                 .len = 4,
79         },
80
81         .iv = {
82                 .data = {
83                         0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88
84                 },
85         },
86
87         .ipsec_xform = {
88                 .spi = 0xa5f8,
89                 .options.esn = 0,
90                 .options.udp_encap = 0,
91                 .options.copy_dscp = 0,
92                 .options.copy_flabel = 0,
93                 .options.copy_df = 0,
94                 .options.dec_ttl = 0,
95                 .options.ecn = 0,
96                 .options.stats = 0,
97                 .options.tunnel_hdr_verify = 0,
98                 .options.ip_csum_enable = 0,
99                 .options.l4_csum_enable = 0,
100                 .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
101                 .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
102                 .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
103                 .tunnel.type = RTE_SECURITY_IPSEC_TUNNEL_IPV4,
104                 .replay_win_sz = 0,
105         },
106
107         .aead = true,
108
109         .xform = {
110                 .aead = {
111                         .next = NULL,
112                         .type = RTE_CRYPTO_SYM_XFORM_AEAD,
113                         .aead = {
114                                 .op = RTE_CRYPTO_AEAD_OP_ENCRYPT,
115                                 .algo = RTE_CRYPTO_AEAD_AES_GCM,
116                                 .key.length = 16,
117                                 .iv.length = 12,
118                                 .iv.offset = IV_OFFSET,
119                                 .digest_length = 16,
120                                 .aad_length = 12,
121                         },
122                 },
123         },
124 };
125
126 struct ipsec_test_data pkt_aes_192_gcm = {
127         .key = {
128                 .data = {
129                         0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c,
130                         0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08,
131                         0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c
132                 },
133         },
134         .input_text = {
135                 .data = {
136                         /* IP */
137                         0x45, 0x00, 0x00, 0x28, 0xa4, 0xad, 0x40, 0x00,
138                         0x40, 0x06, 0x78, 0x80, 0x0a, 0x01, 0x03, 0x8f,
139                         0x0a, 0x01, 0x06, 0x12,
140
141                         /* TCP */
142                         0x80, 0x23, 0x06, 0xb8, 0xcb, 0x71, 0x26, 0x02,
143                         0xdd, 0x6b, 0xb0, 0x3e, 0x50, 0x10, 0x16, 0xd0,
144                         0x75, 0x67, 0x00, 0x01
145                 },
146                 .len = 40,
147         },
148         .output_text = {
149                 .data = {
150                         /* IP - outer header */
151                         0x45, 0x00, 0x00, 0x60, 0x69, 0x8f, 0x00, 0x00,
152                         0x80, 0x32, 0x4d, 0x89, 0xc0, 0xa8, 0x01, 0x02,
153                         0xc0, 0xa8, 0x01, 0x01,
154
155                         /* ESP */
156                         0x00, 0x00, 0xa5, 0xf8, 0x00, 0x00, 0x00, 0x01,
157
158                         /* IV */
159                         0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88,
160
161                         /* Data */
162                         0xa5, 0xb1, 0xf8, 0x06, 0x60, 0x29, 0xae, 0xa4,
163                         0x0e, 0x59, 0x8b, 0x81, 0x22, 0xde, 0x02, 0x42,
164                         0x09, 0x38, 0xb3, 0xab, 0x33, 0xf8, 0x28, 0xe6,
165                         0x87, 0xb8, 0x85, 0x8b, 0x5b, 0xfb, 0xdb, 0xd0,
166                         0x31, 0x5b, 0x27, 0x45, 0x21, 0x4b, 0xcc, 0x77,
167                         0x82, 0xac, 0x91, 0x38, 0xf2, 0xbb, 0xbe, 0xe4,
168                         0xcf, 0x03, 0x36, 0x89, 0xdd, 0x40, 0xd3, 0x6e,
169                         0x54, 0x05, 0x22, 0x22,
170                 },
171                 .len = 96,
172         },
173         .salt = {
174                 .data = {
175                         0xca, 0xfe, 0xba, 0xbe
176                 },
177                 .len = 4,
178         },
179
180         .iv = {
181                 .data = {
182                         0xfa, 0xce, 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88
183                 },
184         },
185
186         .ipsec_xform = {
187                 .spi = 0xa5f8,
188                 .options.esn = 0,
189                 .options.udp_encap = 0,
190                 .options.copy_dscp = 0,
191                 .options.copy_flabel = 0,
192                 .options.copy_df = 0,
193                 .options.dec_ttl = 0,
194                 .options.ecn = 0,
195                 .options.stats = 0,
196                 .options.tunnel_hdr_verify = 0,
197                 .options.ip_csum_enable = 0,
198                 .options.l4_csum_enable = 0,
199                 .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
200                 .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
201                 .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
202                 .tunnel.type = RTE_SECURITY_IPSEC_TUNNEL_IPV4,
203                 .replay_win_sz = 0,
204         },
205
206         .aead = true,
207
208         .xform = {
209                 .aead = {
210                         .next = NULL,
211                         .type = RTE_CRYPTO_SYM_XFORM_AEAD,
212                         .aead = {
213                                 .op = RTE_CRYPTO_AEAD_OP_ENCRYPT,
214                                 .algo = RTE_CRYPTO_AEAD_AES_GCM,
215                                 .key.length = 24,
216                                 .iv.length = 12,
217                                 .iv.offset = IV_OFFSET,
218                                 .digest_length = 16,
219                                 .aad_length = 12,
220                         },
221                 },
222         },
223 };
224
225 struct ipsec_test_data pkt_aes_256_gcm = {
226         .key = {
227                 .data = {
228                         0xab, 0xbc, 0xcd, 0xde, 0xf0, 0x01, 0x12, 0x23,
229                         0x34, 0x45, 0x56, 0x67, 0x78, 0x89, 0x9a, 0xab,
230                         0xab, 0xbc, 0xcd, 0xde, 0xf0, 0x01, 0x12, 0x23,
231                         0x34, 0x45, 0x56, 0x67, 0x78, 0x89, 0x9a, 0xab,
232                 },
233         },
234         .input_text = {
235                 .data = {
236                         /* IP */
237                         0x45, 0x00, 0x00, 0x30, 0x69, 0xa6, 0x40, 0x00,
238                         0x80, 0x06, 0x26, 0x90, 0xc0, 0xa8, 0x01, 0x02,
239                         0x93, 0x89, 0x15, 0x5e,
240
241                         /* TCP */
242                         0x0a, 0x9e, 0x00, 0x8b, 0x2d, 0xc5, 0x7e, 0xe0,
243                         0x00, 0x00, 0x00, 0x00, 0x70, 0x02, 0x40, 0x00,
244                         0x20, 0xbf, 0x00, 0x00, 0x02, 0x04, 0x05, 0xb4,
245                         0x01, 0x01, 0x04, 0x02,
246                 },
247                 .len = 48,
248         },
249         .output_text = {
250                 .data = {
251                         /* IP - outer header */
252                         0x45, 0x00, 0x00, 0x68, 0x69, 0x8f, 0x00, 0x00,
253                         0x80, 0x32, 0x4d, 0x81, 0xc0, 0xa8, 0x01, 0x02,
254                         0xc0, 0xa8, 0x01, 0x01,
255
256                         /* ESP */
257                         0x4a, 0x2c, 0xbf, 0xe3, 0x00, 0x00, 0x00, 0x01,
258
259                         /* IV */
260                         0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
261
262                         /* Data */
263                         0xff, 0x42, 0x5c, 0x9b, 0x72, 0x45, 0x99, 0xdf,
264                         0x7a, 0x3b, 0xcd, 0x51, 0x01, 0x94, 0xe0, 0x0d,
265                         0x6a, 0x78, 0x10, 0x7f, 0x1b, 0x0b, 0x1c, 0xbf,
266                         0x06, 0xef, 0xae, 0x9d, 0x65, 0xa5, 0xd7, 0x63,
267                         0x74, 0x8a, 0x63, 0x79, 0x85, 0x77, 0x1d, 0x34,
268                         0x7f, 0x05, 0x45, 0x65, 0x9f, 0x14, 0xe9, 0x9d,
269                         0xef, 0x84, 0x2d, 0x8b, 0x00, 0x14, 0x4a, 0x1f,
270                         0xec, 0x6a, 0xdf, 0x0c, 0x9a, 0x92, 0x7f, 0xee,
271                         0xa6, 0xc5, 0x11, 0x60,
272                 },
273                 .len = 104,
274         },
275         .salt = {
276                 .data = {
277                         0x11, 0x22, 0x33, 0x44
278                 },
279                 .len = 4,
280         },
281
282         .iv = {
283                 .data = {
284                         0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
285                 },
286         },
287
288         .ipsec_xform = {
289                 .spi = 0x4a2cbfe3,
290                 .options.esn = 0,
291                 .options.udp_encap = 0,
292                 .options.copy_dscp = 0,
293                 .options.copy_flabel = 0,
294                 .options.copy_df = 0,
295                 .options.dec_ttl = 0,
296                 .options.ecn = 0,
297                 .options.stats = 0,
298                 .options.tunnel_hdr_verify = 0,
299                 .options.ip_csum_enable = 0,
300                 .options.l4_csum_enable = 0,
301                 .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
302                 .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
303                 .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
304                 .tunnel.type = RTE_SECURITY_IPSEC_TUNNEL_IPV4,
305                 .replay_win_sz = 0,
306         },
307
308         .aead = true,
309
310         .xform = {
311                 .aead = {
312                         .next = NULL,
313                         .type = RTE_CRYPTO_SYM_XFORM_AEAD,
314                         .aead = {
315                                 .op = RTE_CRYPTO_AEAD_OP_ENCRYPT,
316                                 .algo = RTE_CRYPTO_AEAD_AES_GCM,
317                                 .key.length = 32,
318                                 .iv.length = 12,
319                                 .iv.offset = IV_OFFSET,
320                                 .digest_length = 16,
321                                 .aad_length = 12,
322                         },
323                 },
324         },
325 };
326
327 /* Known vectors for AES-CBC
328  * https://datatracker.ietf.org/doc/html/rfc3602#section-4
329  */
330
331 struct ipsec_test_data pkt_aes_128_cbc_null = {
332         .key = {
333                 .data = {
334                         0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
335                         0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
336                 },
337         },
338         .input_text = {
339                 .data = {
340                         /* IP - outer header */
341                         0x45, 0x00, 0x00, 0x8c, 0x00, 0x02, 0x00, 0x00,
342                         0x40, 0x32, 0x27, 0xbc, 0x00, 0x01, 0xa8, 0xc0,
343                         0x01, 0x01, 0xa8, 0xc0,
344
345                         /* ESP */
346                         0x00, 0x00, 0x87, 0x65, 0x00, 0x00, 0x00, 0x02,
347
348                         /* IV */
349                         0xf4, 0xe7, 0x65, 0x24, 0x4f, 0x64, 0x07, 0xad,
350                         0xf1, 0x3d, 0xc1, 0x38, 0x0f, 0x67, 0x3f, 0x37,
351
352                         /* Data */
353                         0x77, 0x3b, 0x52, 0x41, 0xa4, 0xc4, 0x49, 0x22,
354                         0x5e, 0x4f, 0x3c, 0xe5, 0xed, 0x61, 0x1b, 0x0c,
355                         0x23, 0x7c, 0xa9, 0x6c, 0xf7, 0x4a, 0x93, 0x01,
356                         0x3c, 0x1b, 0x0e, 0xa1, 0xa0, 0xcf, 0x70, 0xf8,
357                         0xe4, 0xec, 0xae, 0xc7, 0x8a, 0xc5, 0x3a, 0xad,
358                         0x7a, 0x0f, 0x02, 0x2b, 0x85, 0x92, 0x43, 0xc6,
359                         0x47, 0x75, 0x2e, 0x94, 0xa8, 0x59, 0x35, 0x2b,
360                         0x8a, 0x4d, 0x4d, 0x2d, 0xec, 0xd1, 0x36, 0xe5,
361                         0xc1, 0x77, 0xf1, 0x32, 0xad, 0x3f, 0xbf, 0xb2,
362                         0x20, 0x1a, 0xc9, 0x90, 0x4c, 0x74, 0xee, 0x0a,
363                         0x10, 0x9e, 0x0c, 0xa1, 0xe4, 0xdf, 0xe9, 0xd5,
364                         0xa1, 0x00, 0xb8, 0x42, 0xf1, 0xc2, 0x2f, 0x0d,
365                 },
366                 .len = 140,
367         },
368         .output_text = {
369                 .data = {
370                         /* IP */
371                         0x45, 0x00, 0x00, 0x54, 0x09, 0x04, 0x00, 0x00,
372                         0x40, 0x01, 0xf9, 0x88, 0xc0, 0xa8, 0x7b, 0x03,
373                         0xc0, 0xa8, 0x7b, 0xc8,
374
375                         /* ICMP */
376                         0x08, 0x00, 0x9f, 0x76, 0xa9, 0x0a, 0x01, 0x00,
377                         0xb4, 0x9c, 0x08, 0x3d, 0x02, 0xa2, 0x04, 0x00,
378                         0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
379                         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
380                         0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
381                         0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
382                         0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
383                         0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
384                         0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
385                         0x09, 0x0a, 0x0a, 0x04,
386                 },
387                 .len = 84,
388         },
389         .iv = {
390                 .data = {
391                         0xf4, 0xe7, 0x65, 0x24, 0x4f, 0x64, 0x07, 0xad,
392                         0xf1, 0x3d, 0xc1, 0x38, 0x0f, 0x67, 0x3f, 0x37,
393                 },
394         },
395
396         .ipsec_xform = {
397                 .spi = 0x8765,
398                 .options.esn = 0,
399                 .options.udp_encap = 0,
400                 .options.copy_dscp = 0,
401                 .options.copy_flabel = 0,
402                 .options.copy_df = 0,
403                 .options.dec_ttl = 0,
404                 .options.ecn = 0,
405                 .options.stats = 0,
406                 .options.tunnel_hdr_verify = 0,
407                 .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
408                 .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
409                 .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
410                 .tunnel.type = RTE_SECURITY_IPSEC_TUNNEL_IPV4,
411                 .replay_win_sz = 0,
412         },
413
414         .aead = false,
415
416         .xform = {
417                 .chain.cipher = {
418                         .next = NULL,
419                         .type = RTE_CRYPTO_SYM_XFORM_CIPHER,
420                         .cipher = {
421                                 .op = RTE_CRYPTO_CIPHER_OP_DECRYPT,
422                                 .algo = RTE_CRYPTO_CIPHER_AES_CBC,
423                                 .key.length = 16,
424                                 .iv.length = 16,
425                         },
426                 },
427                 .chain.auth = {
428                         .next = NULL,
429                         .type = RTE_CRYPTO_SYM_XFORM_AUTH,
430                         .auth = {
431                                 .algo = RTE_CRYPTO_AUTH_NULL,
432                         },
433                 },
434         },
435 };
436
437 struct ipsec_test_data pkt_aes_256_gcm_v6 = {
438         .key = {
439                 .data = {
440                         0xde, 0x12, 0xbe, 0x56, 0xde, 0xad, 0xbe, 0xef,
441                         0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef,
442                         0x12, 0x78, 0xbe, 0x34, 0x01, 0x02, 0x03, 0x07,
443                         0xaa, 0xbb, 0xcc, 0xf1, 0x08, 0x07, 0x06, 0x05,
444                 },
445         },
446         .input_text = {
447                 .data = {
448                         0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x06, 0x38,
449                         0x26, 0x07, 0xf8, 0xb0, 0x40, 0x0c, 0x0c, 0x03,
450                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a,
451                         0x20, 0x01, 0x04, 0x70, 0xe5, 0xbf, 0xde, 0xad,
452                         0x49, 0x57, 0x21, 0x74, 0xe8, 0x2c, 0x48, 0x87,
453                         0x00, 0x19, 0xf9, 0xc7, 0x95, 0x63, 0x97, 0x9c,
454                         0x03, 0xa0, 0x88, 0x31, 0x80, 0x12, 0xa7, 0xd6,
455                         0x25, 0x83, 0x00, 0x00, 0x02, 0x04, 0x05, 0x6a,
456                         0x01, 0x01, 0x04, 0x02, 0x01, 0x03, 0x03, 0x07,
457                 },
458                 .len = 72,
459         },
460         .output_text = {
461                 .data = {
462                         0x60, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x32, 0x40,
463                         0x12, 0x34, 0x12, 0x21, 0x17, 0x45, 0x11, 0x34,
464                         0x11, 0xfc, 0x89, 0x71, 0xdf, 0x22, 0x56, 0x78,
465                         0x12, 0x34, 0x12, 0x21, 0x17, 0x45, 0x11, 0x34,
466                         0x11, 0xfc, 0x89, 0x71, 0xdf, 0x22, 0x34, 0x56,
467                         0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01,
468                         0x45, 0xad, 0xfe, 0x23, 0x78, 0x56, 0x12, 0x00,
469                         0xe7, 0xdf, 0xc4, 0x7e, 0x21, 0xbd, 0xec, 0x1b,
470                         0x74, 0x5a, 0xe4, 0x7e, 0x2e, 0x94, 0x21, 0x0a,
471                         0x9b, 0x0e, 0x59, 0xbe, 0x06, 0x2a, 0xda, 0xb8,
472                         0x6b, 0x48, 0x7f, 0x0b, 0x88, 0x3a, 0xa9, 0xfd,
473                         0x3c, 0xfe, 0x9f, 0xb1, 0x8c, 0x67, 0xd2, 0xf8,
474                         0xaf, 0xb5, 0xad, 0x16, 0xdb, 0xff, 0x8d, 0x50,
475                         0xd3, 0x48, 0xf5, 0x6c, 0x3c, 0x0c, 0x27, 0x34,
476                         0x2b, 0x65, 0xc8, 0xff, 0xeb, 0x5f, 0xb8, 0xff,
477                         0x12, 0x00, 0x1c, 0x9f, 0xb7, 0x85, 0xdd, 0x7d,
478                         0x40, 0x19, 0xcb, 0x18, 0xeb, 0x15, 0xc4, 0x88,
479                         0xe1, 0xc2, 0x91, 0xc7, 0xb1, 0x65, 0xc3, 0x27,
480                         0x16, 0x06, 0x8f, 0xf2,
481                 },
482                 .len = 148,
483         },
484         .salt = {
485                 .data = {
486                         0x11, 0x22, 0x33, 0x44
487                 },
488                 .len = 4,
489         },
490
491         .iv = {
492                 .data = {
493                         0x45, 0xad, 0xfe, 0x23, 0x78, 0x56, 0x12, 0x00,
494                 },
495         },
496
497         .ipsec_xform = {
498                 .spi = 52,
499                 .options.esn = 0,
500                 .options.udp_encap = 0,
501                 .options.copy_dscp = 0,
502                 .options.copy_flabel = 0,
503                 .options.copy_df = 0,
504                 .options.dec_ttl = 0,
505                 .options.ecn = 0,
506                 .options.stats = 0,
507                 .options.tunnel_hdr_verify = 0,
508                 .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
509                 .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
510                 .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
511                 .tunnel.type = RTE_SECURITY_IPSEC_TUNNEL_IPV6,
512                 .replay_win_sz = 0,
513         },
514
515         .aead = true,
516
517         .xform = {
518                 .aead = {
519                         .next = NULL,
520                         .type = RTE_CRYPTO_SYM_XFORM_AEAD,
521                         .aead = {
522                                 .op = RTE_CRYPTO_AEAD_OP_ENCRYPT,
523                                 .algo = RTE_CRYPTO_AEAD_AES_GCM,
524                                 .key.length = 32,
525                                 .iv.length = 12,
526                                 .iv.offset = IV_OFFSET,
527                                 .digest_length = 16,
528                                 .aad_length = 12,
529                         },
530                 },
531         },
532 };
533
534 struct ipsec_test_data pkt_aes_128_cbc_hmac_sha256 = {
535         .key = {
536                 .data = {
537                         0x00, 0x04, 0x05, 0x01, 0x23, 0x00, 0x00, 0x00,
538                         0x00, 0x00, 0x0a, 0x0b, 0x0c, 0x0f, 0x00, 0x00,
539                 },
540         },
541         .auth_key = {
542                 .data = {
543                         0xde, 0x34, 0x56, 0x00, 0x00, 0x00, 0x78, 0x00,
544                         0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
545                         0x10, 0x30, 0x40, 0x00, 0x01, 0x02, 0x03, 0x04,
546                         0x0a, 0x0b, 0x0c, 0x0d, 0x05, 0x06, 0x07, 0x08,
547                 },
548         },
549         .input_text = {
550                 .data = {
551                         /* IP */
552                         0x45, 0x00, 0x00, 0x32, 0x00, 0x01, 0x00, 0x00,
553                         0x1f, 0x11, 0x17, 0x8b, 0xc0, 0xa8, 0x01, 0x6f,
554                         0xc0, 0xa8, 0x01, 0x70,
555
556                         /* UDP */
557                         0x00, 0x09, 0x00, 0x09, 0x00, 0x1e, 0x00, 0x00,
558                         0xbe, 0x9b, 0xe9, 0x55, 0x00, 0x00, 0x00, 0x21,
559                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
560                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
561                 },
562                 .len = 50,
563         },
564         .output_text = {
565                 .data = {
566                         /* IP - outer header */
567                         0x45, 0x00, 0x00, 0x7c, 0x00, 0x01, 0x00, 0x00,
568                         0x40, 0x32, 0x52, 0x4d, 0x14, 0x00, 0x00, 0x01,
569                         0x14, 0x00, 0x00, 0x02,
570
571                         /* ESP */
572                         0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01,
573
574                         /* IV */
575                         0x34, 0x12, 0x67, 0x45, 0xff, 0xff, 0x00, 0x00,
576                         0x20, 0xbf, 0xe8, 0x39, 0x00, 0x00, 0x00, 0x00,
577
578                         /* Data */
579                         0x67, 0xb5, 0x46, 0x6e, 0x78, 0x17, 0xd3, 0x5a,
580                         0xac, 0x62, 0x62, 0x62, 0xb0, 0x57, 0x9b, 0x09,
581                         0x19, 0x4f, 0x06, 0x59, 0xc8, 0xb0, 0x30, 0x65,
582                         0x1f, 0x45, 0x57, 0x41, 0x72, 0x17, 0x28, 0xe9,
583                         0xad, 0x50, 0xbe, 0x44, 0x1d, 0x2d, 0x9a, 0xd0,
584                         0x48, 0x75, 0x0d, 0x1c, 0x8d, 0x24, 0xa8, 0x6f,
585                         0x6b, 0x24, 0xb6, 0x5d, 0x43, 0x1e, 0x55, 0xf0,
586                         0xf7, 0x14, 0x1f, 0xf2, 0x61, 0xd4, 0xe0, 0x30,
587                         0x16, 0xbe, 0x1b, 0x5c, 0xcc, 0xb7, 0x66, 0x1c,
588                         0x47, 0xad, 0x07, 0x6c, 0xd5, 0xcb, 0xce, 0x6c,
589                 },
590                 .len = 124,
591         },
592         .iv = {
593                 .data = {
594                         0x34, 0x12, 0x67, 0x45, 0xff, 0xff, 0x00, 0x00,
595                         0x20, 0xbf, 0xe8, 0x39, 0x00, 0x00, 0x00, 0x00,
596                 },
597         },
598
599         .ipsec_xform = {
600                 .spi = 52,
601                 .options.esn = 0,
602                 .options.udp_encap = 0,
603                 .options.copy_dscp = 0,
604                 .options.copy_flabel = 0,
605                 .options.copy_df = 0,
606                 .options.dec_ttl = 0,
607                 .options.ecn = 0,
608                 .options.stats = 0,
609                 .options.tunnel_hdr_verify = 0,
610                 .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
611                 .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
612                 .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
613                 .tunnel.type = RTE_SECURITY_IPSEC_TUNNEL_IPV4,
614                 .replay_win_sz = 0,
615         },
616
617         .aead = false,
618
619         .xform = {
620                 .chain.cipher = {
621                         .next = NULL,
622                         .type = RTE_CRYPTO_SYM_XFORM_CIPHER,
623                         .cipher = {
624                                 .op = RTE_CRYPTO_CIPHER_OP_ENCRYPT,
625                                 .algo = RTE_CRYPTO_CIPHER_AES_CBC,
626                                 .key.length = 16,
627                                 .iv.length = 16,
628                         },
629                 },
630                 .chain.auth = {
631                         .next = NULL,
632                         .type = RTE_CRYPTO_SYM_XFORM_AUTH,
633                         .auth = {
634                                 .op = RTE_CRYPTO_AUTH_OP_GENERATE,
635                                 .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
636                                 .key.length = 32,
637                                 .digest_length = 16,
638                         },
639                 },
640         },
641 };
642
643 struct ipsec_test_data pkt_aes_128_cbc_hmac_sha256_v6 = {
644         .key = {
645                 .data = {
646                         0x00, 0x04, 0x05, 0x01, 0x23, 0x00, 0x00, 0x00,
647                         0x00, 0x00, 0x0a, 0x0b, 0x0c, 0x0f, 0x00, 0x00,
648                 },
649         },
650         .auth_key = {
651                 .data = {
652                         0xde, 0x34, 0x56, 0x00, 0x00, 0x00, 0x78, 0x00,
653                         0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,
654                         0x10, 0x30, 0x40, 0x00, 0x01, 0x02, 0x03, 0x04,
655                         0x0a, 0x0b, 0x0c, 0x0d, 0x05, 0x06, 0x07, 0x08,
656                 },
657         },
658         .input_text = {
659                 .data = {
660                         0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x06, 0x38,
661                         0x26, 0x07, 0xf8, 0xb0, 0x40, 0x0c, 0x0c, 0x03,
662                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a,
663                         0x20, 0x01, 0x04, 0x70, 0xe5, 0xbf, 0xde, 0xad,
664                         0x49, 0x57, 0x21, 0x74, 0xe8, 0x2c, 0x48, 0x87,
665                         0x00, 0x19, 0xf9, 0xc7, 0x95, 0x63, 0x97, 0x9c,
666                         0x03, 0xa0, 0x88, 0x31, 0x80, 0x12, 0xa7, 0xd6,
667                         0x25, 0x83, 0x00, 0x00, 0x02, 0x04, 0x05, 0x6a,
668                         0x01, 0x01, 0x04, 0x02, 0x01, 0x03, 0x03, 0x07,
669                 },
670                 .len = 72,
671         },
672         .output_text = {
673                 .data = {
674                         0x60, 0x00, 0x00, 0x00, 0x00, 0x78, 0x32, 0x40,
675                         0x12, 0x34, 0x12, 0x21, 0x17, 0x45, 0x11, 0x34,
676                         0x11, 0xfc, 0x89, 0x71, 0xdf, 0x22, 0x56, 0x78,
677                         0x12, 0x34, 0x12, 0x21, 0x17, 0x45, 0x11, 0x34,
678                         0x11, 0xfc, 0x89, 0x71, 0xdf, 0x22, 0x34, 0x56,
679                         0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01,
680                         0x45, 0xad, 0xfe, 0x23, 0x78, 0x56, 0x12, 0x00,
681                         0xf0, 0xc1, 0x05, 0x3c, 0x00, 0x00, 0x00, 0x00,
682                         0x1b, 0x1c, 0x98, 0x6e, 0x2a, 0xce, 0x61, 0xef,
683                         0xc1, 0xdd, 0x25, 0x96, 0x5c, 0xb1, 0xb0, 0x15,
684                         0x47, 0x25, 0xb7, 0x8b, 0x00, 0xb6, 0xbb, 0xe6,
685                         0x2e, 0x29, 0xcb, 0x4a, 0x94, 0x00, 0xf0, 0x73,
686                         0xdb, 0x14, 0x32, 0xd9, 0xa2, 0xdf, 0x22, 0x2f,
687                         0x52, 0x3e, 0x79, 0x77, 0xf3, 0x17, 0xaa, 0x40,
688                         0x1c, 0x57, 0x27, 0x12, 0x82, 0x44, 0x35, 0xb8,
689                         0x64, 0xe0, 0xaa, 0x5c, 0x10, 0xc7, 0x97, 0x35,
690                         0x9c, 0x6b, 0x1c, 0xf7, 0xe7, 0xbd, 0x83, 0x33,
691                         0x77, 0x48, 0x44, 0x7d, 0xa4, 0x13, 0x74, 0x3b,
692                         0x6a, 0x91, 0xd0, 0xd8, 0x7d, 0x41, 0x45, 0x23,
693                         0x5d, 0xc9, 0x2d, 0x08, 0x7a, 0xd8, 0x25, 0x8e,
694                 },
695                 .len = 160,
696         },
697         .iv = {
698                 .data = {
699                         0x45, 0xad, 0xfe, 0x23, 0x78, 0x56, 0x12, 0x00,
700                         0xf0, 0xc1, 0x05, 0x3c, 0x00, 0x00, 0x00, 0x00,
701                 },
702         },
703
704         .ipsec_xform = {
705                 .spi = 52,
706                 .options.esn = 0,
707                 .options.udp_encap = 0,
708                 .options.copy_dscp = 0,
709                 .options.copy_flabel = 0,
710                 .options.copy_df = 0,
711                 .options.dec_ttl = 0,
712                 .options.ecn = 0,
713                 .options.stats = 0,
714                 .options.tunnel_hdr_verify = 0,
715                 .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
716                 .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
717                 .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
718                 .tunnel.type = RTE_SECURITY_IPSEC_TUNNEL_IPV6,
719                 .replay_win_sz = 0,
720         },
721
722         .aead = false,
723
724         .xform = {
725                 .chain.cipher = {
726                         .next = NULL,
727                         .type = RTE_CRYPTO_SYM_XFORM_CIPHER,
728                         .cipher = {
729                                 .op = RTE_CRYPTO_CIPHER_OP_ENCRYPT,
730                                 .algo = RTE_CRYPTO_CIPHER_AES_CBC,
731                                 .key.length = 16,
732                                 .iv.length = 16,
733                         },
734                 },
735                 .chain.auth = {
736                         .next = NULL,
737                         .type = RTE_CRYPTO_SYM_XFORM_AUTH,
738                         .auth = {
739                                 .op = RTE_CRYPTO_AUTH_OP_GENERATE,
740                                 .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
741                                 .key.length = 32,
742                                 .digest_length = 16,
743                         },
744                 },
745         },
746 };
747
748 #endif /* TEST_CRYPTODEV_SECURITY_IPSEC_TEST_VECTORS_H_ */