1*4418919fSjohnjiang /* SPDX-License-Identifier: BSD-3-Clause
2*4418919fSjohnjiang * Copyright(c) 2019 Intel Corporation
3*4418919fSjohnjiang */
4*4418919fSjohnjiang
5*4418919fSjohnjiang #include <rte_cryptodev.h>
6*4418919fSjohnjiang #include <rte_cryptodev_pmd.h>
7*4418919fSjohnjiang
8*4418919fSjohnjiang #include "fips_dev_self_test.h"
9*4418919fSjohnjiang
10*4418919fSjohnjiang #define IV_OFF (sizeof(struct rte_crypto_op) + sizeof(struct rte_crypto_sym_op))
11*4418919fSjohnjiang
12*4418919fSjohnjiang #define FIPS_DEV_TEST_DATA_MAX_SIZE 8096
13*4418919fSjohnjiang #define AES_CCM_AAD_PAD_SIZE 18
14*4418919fSjohnjiang
15*4418919fSjohnjiang struct fips_dev_self_test_vector {
16*4418919fSjohnjiang const char *name;
17*4418919fSjohnjiang enum rte_crypto_sym_xform_type operation_type;
18*4418919fSjohnjiang
19*4418919fSjohnjiang struct {
20*4418919fSjohnjiang uint8_t data[64];
21*4418919fSjohnjiang uint16_t len;
22*4418919fSjohnjiang } digest;
23*4418919fSjohnjiang
24*4418919fSjohnjiang struct {
25*4418919fSjohnjiang uint8_t data[256];
26*4418919fSjohnjiang uint16_t len;
27*4418919fSjohnjiang } key;
28*4418919fSjohnjiang
29*4418919fSjohnjiang struct {
30*4418919fSjohnjiang uint8_t data[16];
31*4418919fSjohnjiang uint8_t len;
32*4418919fSjohnjiang } iv;
33*4418919fSjohnjiang
34*4418919fSjohnjiang union {
35*4418919fSjohnjiang struct {
36*4418919fSjohnjiang enum rte_crypto_cipher_algorithm algo;
37*4418919fSjohnjiang } cipher;
38*4418919fSjohnjiang
39*4418919fSjohnjiang struct {
40*4418919fSjohnjiang enum rte_crypto_aead_algorithm algo;
41*4418919fSjohnjiang struct {
42*4418919fSjohnjiang uint8_t data[FIPS_DEV_TEST_DATA_MAX_SIZE];
43*4418919fSjohnjiang uint16_t len;
44*4418919fSjohnjiang } aad;
45*4418919fSjohnjiang } aead;
46*4418919fSjohnjiang
47*4418919fSjohnjiang struct {
48*4418919fSjohnjiang enum rte_crypto_auth_algorithm algo;
49*4418919fSjohnjiang } auth;
50*4418919fSjohnjiang };
51*4418919fSjohnjiang
52*4418919fSjohnjiang struct {
53*4418919fSjohnjiang const uint8_t data[FIPS_DEV_TEST_DATA_MAX_SIZE];
54*4418919fSjohnjiang uint16_t len;
55*4418919fSjohnjiang } input;
56*4418919fSjohnjiang
57*4418919fSjohnjiang struct {
58*4418919fSjohnjiang uint8_t data[FIPS_DEV_TEST_DATA_MAX_SIZE];
59*4418919fSjohnjiang uint16_t len;
60*4418919fSjohnjiang } output;
61*4418919fSjohnjiang };
62*4418919fSjohnjiang
63*4418919fSjohnjiang #define GET_MBUF_DATA(data, len, m) \
64*4418919fSjohnjiang do { \
65*4418919fSjohnjiang len = rte_pktmbuf_pkt_len(m); \
66*4418919fSjohnjiang data = rte_pktmbuf_mtod(m, uint8_t *); \
67*4418919fSjohnjiang } while (0)
68*4418919fSjohnjiang
69*4418919fSjohnjiang
70*4418919fSjohnjiang /* <-- SHA-x HMAC --> */
71*4418919fSjohnjiang static struct fips_dev_self_test_vector
72*4418919fSjohnjiang SELF_TEST_SHA1_HMAC_test_vector = {
73*4418919fSjohnjiang .name = "SELF_TEST_SHA1_HMAC_test_vector",
74*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH,
75*4418919fSjohnjiang
76*4418919fSjohnjiang .auth = {
77*4418919fSjohnjiang .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
78*4418919fSjohnjiang },
79*4418919fSjohnjiang .input = {
80*4418919fSjohnjiang .data = {
81*4418919fSjohnjiang 0xed, 0xb2, 0xba, 0x09, 0x99, 0x61, 0xd3, 0x8f,
82*4418919fSjohnjiang 0xd0, 0xa0, 0xa6, 0xa2, 0x35, 0xd6, 0x12, 0x71,
83*4418919fSjohnjiang 0xcb, 0x4d, 0x49, 0x3b, 0x64, 0xd9, 0xde, 0x13,
84*4418919fSjohnjiang 0x5c, 0xbb, 0x1f, 0xe0, 0x86, 0xc4, 0xa4, 0xa7,
85*4418919fSjohnjiang 0x67, 0xbe, 0x28, 0x0d, 0xa2, 0x07, 0x98, 0x17,
86*4418919fSjohnjiang 0xb4, 0x7f, 0x6a, 0x35, 0xe1, 0xa4, 0x30, 0x7f,
87*4418919fSjohnjiang 0x6e, 0xfc, 0x6d, 0x3e, 0x11, 0xb4, 0xa7, 0xae,
88*4418919fSjohnjiang 0xa6, 0x86, 0xbd, 0x02, 0x23, 0xe0, 0x7b, 0xa9,
89*4418919fSjohnjiang 0xce, 0x42, 0x6c, 0xd0, 0xae, 0xe7, 0xef, 0x28,
90*4418919fSjohnjiang 0x3f, 0xa9, 0x8d, 0xe9, 0x6a, 0x1f, 0x8a, 0x17,
91*4418919fSjohnjiang 0xb3, 0x08, 0xba, 0x04, 0xb5, 0xec, 0x96, 0x16,
92*4418919fSjohnjiang 0xcb, 0x00, 0x8f, 0xca, 0x11, 0x4b, 0xa3, 0xf9,
93*4418919fSjohnjiang 0x8b, 0x07, 0x2d, 0x5a, 0xa3, 0x4a, 0x01, 0x49,
94*4418919fSjohnjiang 0xd9, 0xe5, 0xb8, 0xc6, 0xb6, 0x8c, 0x49, 0xc1,
95*4418919fSjohnjiang 0x01, 0x38, 0xda, 0x95, 0x36, 0xca, 0xd5, 0xd2,
96*4418919fSjohnjiang 0x34, 0xf1, 0x3d, 0x3f, 0x36, 0x4d, 0x43, 0x1f
97*4418919fSjohnjiang },
98*4418919fSjohnjiang .len = 128,
99*4418919fSjohnjiang },
100*4418919fSjohnjiang .key = {
101*4418919fSjohnjiang .data = {
102*4418919fSjohnjiang 0x8d, 0x8d, 0x15, 0xd8, 0xa9, 0x57, 0x9a, 0xdb,
103*4418919fSjohnjiang 0x2d, 0x62
104*4418919fSjohnjiang },
105*4418919fSjohnjiang .len = 10,
106*4418919fSjohnjiang },
107*4418919fSjohnjiang .digest = {
108*4418919fSjohnjiang .data = {
109*4418919fSjohnjiang 0x0c, 0x66, 0x2e, 0x47, 0x93, 0x93, 0x8c, 0xc3,
110*4418919fSjohnjiang 0x7f, 0x3d, 0x51, 0xd2, 0xb4, 0x05, 0x48, 0xec,
111*4418919fSjohnjiang 0x55, 0x91, 0x4f, 0x0d
112*4418919fSjohnjiang },
113*4418919fSjohnjiang .len = 20,
114*4418919fSjohnjiang },
115*4418919fSjohnjiang };
116*4418919fSjohnjiang
117*4418919fSjohnjiang static struct fips_dev_self_test_vector
118*4418919fSjohnjiang SELF_TEST_SHA224_HMAC_test_vector = {
119*4418919fSjohnjiang .name = "SELF_TEST_SHA224_HMAC_test_vector",
120*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH,
121*4418919fSjohnjiang .auth = {
122*4418919fSjohnjiang .algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
123*4418919fSjohnjiang },
124*4418919fSjohnjiang .input = {
125*4418919fSjohnjiang .data = {
126*4418919fSjohnjiang 0x41, 0x18, 0x43, 0xa2, 0x13, 0x87, 0x84, 0x6f,
127*4418919fSjohnjiang 0x3b, 0x9e, 0xd5, 0xfc, 0x54, 0x5a, 0xca, 0xdf,
128*4418919fSjohnjiang 0xa5, 0xb7, 0x03, 0x86, 0xf6, 0x2d, 0xa4, 0xd9,
129*4418919fSjohnjiang 0xa2, 0x7b, 0x04, 0x1b, 0xee, 0xa3, 0xaa, 0x11,
130*4418919fSjohnjiang 0x99, 0x36, 0x75, 0x67, 0xb4, 0xd1, 0x1a, 0x4f,
131*4418919fSjohnjiang 0xb4, 0xe8, 0xd4, 0x6b, 0xc6, 0xc2, 0x56, 0xed,
132*4418919fSjohnjiang 0x62, 0xc5, 0x05, 0xfd, 0x23, 0xf4, 0x64, 0x5b,
133*4418919fSjohnjiang 0xd6, 0xb6, 0xcf, 0x45, 0xd1, 0xd9, 0x6d, 0x9b,
134*4418919fSjohnjiang 0x86, 0xd6, 0x60, 0x41, 0x57, 0x57, 0x3e, 0xc5,
135*4418919fSjohnjiang 0xac, 0xf6, 0xc5, 0x41, 0x43, 0x48, 0xca, 0x83,
136*4418919fSjohnjiang 0xc8, 0x1a, 0x73, 0x6c, 0xa6, 0xfa, 0xa6, 0x96,
137*4418919fSjohnjiang 0x1c, 0xfa, 0xc1, 0x39, 0x93, 0xb0, 0x8c, 0x50,
138*4418919fSjohnjiang 0x2f, 0x81, 0x6c, 0xf7, 0xa4, 0x20, 0xd9, 0x18,
139*4418919fSjohnjiang 0x4b, 0x51, 0x11, 0x46, 0x75, 0xf3, 0x0e, 0xe9,
140*4418919fSjohnjiang 0xff, 0x3d, 0xb6, 0x9c, 0x26, 0x48, 0x53, 0xd3,
141*4418919fSjohnjiang 0x9d, 0xcd, 0x42, 0xc1, 0xdd, 0x31, 0xef, 0x79
142*4418919fSjohnjiang
143*4418919fSjohnjiang },
144*4418919fSjohnjiang .len = 128,
145*4418919fSjohnjiang },
146*4418919fSjohnjiang .key = {
147*4418919fSjohnjiang .data = {
148*4418919fSjohnjiang 0x37, 0x14, 0x70, 0x78, 0x39, 0xda, 0xf7, 0x91,
149*4418919fSjohnjiang 0x22, 0xc7, 0x82, 0x41, 0x63, 0x51, 0x38, 0x5e,
150*4418919fSjohnjiang 0x88, 0xa8, 0x1d, 0x31, 0xc9, 0xf6, 0x41, 0xd8,
151*4418919fSjohnjiang 0xdc, 0xe5, 0x38, 0xe9, 0x0e, 0x63, 0xc9, 0x58,
152*4418919fSjohnjiang 0x92, 0xa2, 0xea, 0x9b, 0x19, 0x62, 0xed, 0x0b,
153*4418919fSjohnjiang 0xa3, 0x72, 0xf4, 0x8e, 0x94, 0x74, 0xaa, 0x73,
154*4418919fSjohnjiang 0x0a, 0xe2
155*4418919fSjohnjiang },
156*4418919fSjohnjiang .len = 50,
157*4418919fSjohnjiang },
158*4418919fSjohnjiang .digest = {
159*4418919fSjohnjiang .data = {
160*4418919fSjohnjiang 0x33, 0xf1, 0x7a, 0xc8, 0xa5, 0xc6, 0xb5, 0x25,
161*4418919fSjohnjiang 0xdb, 0x8b, 0x86, 0x44, 0xb6, 0xab
162*4418919fSjohnjiang
163*4418919fSjohnjiang },
164*4418919fSjohnjiang .len = 14,
165*4418919fSjohnjiang },
166*4418919fSjohnjiang };
167*4418919fSjohnjiang
168*4418919fSjohnjiang
169*4418919fSjohnjiang static struct fips_dev_self_test_vector
170*4418919fSjohnjiang SELF_TEST_SHA256_HMAC_test_vector = {
171*4418919fSjohnjiang .name = "SELF_TEST_SHA256_HMAC_test_vector",
172*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH,
173*4418919fSjohnjiang .auth = {
174*4418919fSjohnjiang .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
175*4418919fSjohnjiang },
176*4418919fSjohnjiang .input = {
177*4418919fSjohnjiang .data = {
178*4418919fSjohnjiang 0x1c, 0x43, 0x96, 0xf7, 0xb7, 0xf9, 0x22, 0x8e,
179*4418919fSjohnjiang 0x83, 0x2a, 0x13, 0x69, 0x20, 0x02, 0xba, 0x2a,
180*4418919fSjohnjiang 0xff, 0x43, 0x9d, 0xcb, 0x7f, 0xdd, 0xbf, 0xd4,
181*4418919fSjohnjiang 0x56, 0xc0, 0x22, 0xd1, 0x33, 0xee, 0x89, 0x03,
182*4418919fSjohnjiang 0xa2, 0xd4, 0x82, 0x56, 0x2f, 0xda, 0xa4, 0x93,
183*4418919fSjohnjiang 0xce, 0x39, 0x16, 0xd7, 0x7a, 0x0c, 0x51, 0x44,
184*4418919fSjohnjiang 0x1d, 0xab, 0x26, 0xf6, 0xb0, 0x34, 0x02, 0x38,
185*4418919fSjohnjiang 0xa3, 0x6a, 0x71, 0xf8, 0x7f, 0xc3, 0xe1, 0x79,
186*4418919fSjohnjiang 0xca, 0xbc, 0xa9, 0x48, 0x2b, 0x70, 0x49, 0x71,
187*4418919fSjohnjiang 0xce, 0x69, 0xf3, 0xf2, 0x0a, 0xb6, 0x4b, 0x70,
188*4418919fSjohnjiang 0x41, 0x3d, 0x6c, 0x29, 0x08, 0x53, 0x2b, 0x2a,
189*4418919fSjohnjiang 0x88, 0x8a, 0x9f, 0xc2, 0x24, 0xca, 0xe1, 0x36,
190*4418919fSjohnjiang 0x5d, 0xa4, 0x10, 0xb6, 0xf2, 0xe2, 0x98, 0x90,
191*4418919fSjohnjiang 0x4b, 0x63, 0xb4, 0xa4, 0x17, 0x26, 0x32, 0x18,
192*4418919fSjohnjiang 0x35, 0xa4, 0x77, 0x4d, 0xd0, 0x63, 0xc2, 0x11,
193*4418919fSjohnjiang 0xcf, 0xc8, 0xb5, 0x16, 0x6c, 0x2d, 0x11, 0xa2
194*4418919fSjohnjiang },
195*4418919fSjohnjiang .len = 128,
196*4418919fSjohnjiang },
197*4418919fSjohnjiang .key = {
198*4418919fSjohnjiang .data = {
199*4418919fSjohnjiang 0x54, 0x48, 0x99, 0x8f, 0x9d, 0x8f, 0x98, 0x53,
200*4418919fSjohnjiang 0x4a, 0xdd, 0xf0, 0xc8, 0xba, 0x63, 0x1c, 0x49,
201*4418919fSjohnjiang 0x6b, 0xf8, 0xa8, 0x00, 0x6c, 0xbb, 0x46, 0xad,
202*4418919fSjohnjiang 0x15, 0xfa, 0x1f, 0xa2, 0xf5, 0x53, 0x67, 0x12,
203*4418919fSjohnjiang 0x0c, 0x19, 0x34, 0x8c, 0x3a, 0xfa, 0x90, 0xc3
204*4418919fSjohnjiang },
205*4418919fSjohnjiang .len = 40,
206*4418919fSjohnjiang },
207*4418919fSjohnjiang .digest = {
208*4418919fSjohnjiang .data = {
209*4418919fSjohnjiang 0x7e, 0x8c, 0xba, 0x9d, 0xd9, 0xf0, 0x6e, 0xbd,
210*4418919fSjohnjiang 0xd7, 0xf9, 0x2e, 0x0f, 0x1a, 0x67, 0xc7, 0xf4,
211*4418919fSjohnjiang 0xdf, 0x52, 0x69, 0x3c, 0x21, 0x2b, 0xdd, 0x84,
212*4418919fSjohnjiang 0xf6, 0x73, 0x70, 0xb3, 0x51, 0x53, 0x3c, 0x6c
213*4418919fSjohnjiang },
214*4418919fSjohnjiang .len = 32,
215*4418919fSjohnjiang },
216*4418919fSjohnjiang };
217*4418919fSjohnjiang
218*4418919fSjohnjiang /* HMAC count=34 L=48 SHA384 GENERATE*/
219*4418919fSjohnjiang static struct fips_dev_self_test_vector
220*4418919fSjohnjiang SELF_TEST_SHA384_HMAC_test_vector = {
221*4418919fSjohnjiang .name = "SELF_TEST_SHA384_HMAC_test_vector",
222*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH,
223*4418919fSjohnjiang .auth = {
224*4418919fSjohnjiang .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
225*4418919fSjohnjiang },
226*4418919fSjohnjiang .input = {
227*4418919fSjohnjiang .data = {
228*4418919fSjohnjiang 0xf5, 0x10, 0x86, 0xfe, 0x78, 0x15, 0x0f, 0xe4,
229*4418919fSjohnjiang 0x8b, 0xd1, 0x41, 0x5a, 0x47, 0x85, 0xac, 0xc0,
230*4418919fSjohnjiang 0x5a, 0xb8, 0x0e, 0xf0, 0x0b, 0x29, 0x75, 0xce,
231*4418919fSjohnjiang 0x78, 0x07, 0xa4, 0x21, 0x22, 0x64, 0xb8, 0xa1,
232*4418919fSjohnjiang 0xac, 0xe8, 0x0b, 0x50, 0xe0, 0xc2, 0x59, 0x0e,
233*4418919fSjohnjiang 0xf3, 0xe4, 0x21, 0x68, 0x0a, 0x70, 0x4e, 0xb2,
234*4418919fSjohnjiang 0xfc, 0x6d, 0x17, 0x55, 0x5a, 0xbf, 0x24, 0x69,
235*4418919fSjohnjiang 0xad, 0x56, 0xf2, 0x87, 0xfe, 0xa5, 0x78, 0xd8,
236*4418919fSjohnjiang 0x9c, 0x56, 0x0b, 0x72, 0x19, 0x3c, 0x7f, 0xe5,
237*4418919fSjohnjiang 0x96, 0x89, 0x8f, 0x10, 0x40, 0x41, 0x7e, 0x3a,
238*4418919fSjohnjiang 0x1b, 0xee, 0xff, 0x5e, 0xff, 0x96, 0x53, 0xc5,
239*4418919fSjohnjiang 0xe0, 0xea, 0xb1, 0xda, 0x52, 0xc0, 0xea, 0x3b,
240*4418919fSjohnjiang 0x4b, 0xc3, 0x4d, 0x0c, 0x2b, 0x69, 0xc8, 0x90,
241*4418919fSjohnjiang 0xfb, 0x26, 0x51, 0xfa, 0xf2, 0xe0, 0x84, 0x80,
242*4418919fSjohnjiang 0x3e, 0xa2, 0x8e, 0xb2, 0x01, 0x94, 0x49, 0x0a,
243*4418919fSjohnjiang 0x99, 0x2b, 0xa8, 0xc4, 0x24, 0x9d, 0x56, 0xef
244*4418919fSjohnjiang },
245*4418919fSjohnjiang .len = 128,
246*4418919fSjohnjiang },
247*4418919fSjohnjiang .key = {
248*4418919fSjohnjiang .data = {
249*4418919fSjohnjiang 0x91, 0x7a, 0x69, 0x8c, 0x82, 0xf4, 0x4f, 0x19,
250*4418919fSjohnjiang 0x57, 0x3b, 0x64, 0x5c, 0x48, 0x79, 0xb8, 0x73,
251*4418919fSjohnjiang 0x0b, 0x58, 0xdf, 0xf4, 0xed, 0xc6, 0xa0, 0xd3,
252*4418919fSjohnjiang 0x21, 0xf5, 0xf1, 0x86, 0x58, 0xa5, 0x24, 0x66,
253*4418919fSjohnjiang 0x92, 0xa5, 0x5b, 0x59, 0x33, 0x97, 0x41, 0xae,
254*4418919fSjohnjiang 0x59, 0xf5, 0xfc, 0x48, 0x6d, 0x51, 0x5d, 0xff,
255*4418919fSjohnjiang 0xf8, 0xe1
256*4418919fSjohnjiang },
257*4418919fSjohnjiang .len = 50,
258*4418919fSjohnjiang },
259*4418919fSjohnjiang .digest = {
260*4418919fSjohnjiang .data = {
261*4418919fSjohnjiang 0x77, 0xbf, 0x56, 0x15, 0xec, 0x52, 0xf7, 0x06,
262*4418919fSjohnjiang 0xca, 0x74, 0x64, 0x01, 0xe9, 0xfd, 0xe4, 0x3f,
263*4418919fSjohnjiang 0x15, 0x60, 0x52, 0x37, 0xe5, 0x50, 0xb9, 0x3a,
264*4418919fSjohnjiang 0x84, 0x72, 0xfd, 0x14, 0x4f, 0xc3, 0x9e, 0x5e,
265*4418919fSjohnjiang 0xca, 0x0f, 0xe8, 0x90, 0x83, 0x88, 0x28, 0xa0
266*4418919fSjohnjiang },
267*4418919fSjohnjiang .len = 40,
268*4418919fSjohnjiang },
269*4418919fSjohnjiang };
270*4418919fSjohnjiang
271*4418919fSjohnjiang /* HMAC count=28 L=64 SHA512 GENERATE*/
272*4418919fSjohnjiang static struct fips_dev_self_test_vector
273*4418919fSjohnjiang SELF_TEST_SHA512_HMAC_test_vector = {
274*4418919fSjohnjiang .name = "SELF_TEST_SHA512_HMAC_test_vector",
275*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH,
276*4418919fSjohnjiang .auth = {
277*4418919fSjohnjiang .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
278*4418919fSjohnjiang },
279*4418919fSjohnjiang .input = {
280*4418919fSjohnjiang .data = {
281*4418919fSjohnjiang 0x0a, 0x33, 0x1c, 0xe2, 0x00, 0x89, 0xb2, 0x9e,
282*4418919fSjohnjiang 0x94, 0xb2, 0xc5, 0xf5, 0x18, 0xc8, 0xdb, 0xea,
283*4418919fSjohnjiang 0xd4, 0x04, 0x17, 0xa2, 0xa8, 0xd5, 0x00, 0x18,
284*4418919fSjohnjiang 0xf3, 0x2f, 0x85, 0x12, 0xb3, 0x26, 0x3d, 0x54,
285*4418919fSjohnjiang 0xed, 0xbb, 0xf3, 0x13, 0x4f, 0xf6, 0x61, 0xac,
286*4418919fSjohnjiang 0x14, 0x35, 0x3c, 0x96, 0x28, 0xc3, 0x71, 0x95,
287*4418919fSjohnjiang 0x8c, 0xac, 0xaf, 0x31, 0xfd, 0xd0, 0x25, 0x67,
288*4418919fSjohnjiang 0xd0, 0x37, 0x8d, 0x9e, 0x21, 0xa4, 0x69, 0xdd,
289*4418919fSjohnjiang 0x2c, 0x6d, 0x8c, 0x3a, 0xfb, 0x89, 0xdd, 0x96,
290*4418919fSjohnjiang 0x42, 0xeb, 0x58, 0x87, 0x87, 0x0e, 0x55, 0x96,
291*4418919fSjohnjiang 0x85, 0xd2, 0x0d, 0xab, 0xd3, 0x86, 0x5a, 0xc5,
292*4418919fSjohnjiang 0xc1, 0x46, 0xbe, 0xee, 0x83, 0x87, 0xa7, 0x6f,
293*4418919fSjohnjiang 0x91, 0xf0, 0xf1, 0x40, 0x4d, 0x6c, 0xad, 0xc2,
294*4418919fSjohnjiang 0xe6, 0x7d, 0x21, 0xb0, 0x7d, 0xd3, 0x0f, 0x53,
295*4418919fSjohnjiang 0x87, 0x1d, 0x3b, 0xf6, 0x73, 0x1f, 0x27, 0x9a,
296*4418919fSjohnjiang 0x8c, 0x04, 0x21, 0xeb, 0x20, 0xf6, 0x7f, 0x72
297*4418919fSjohnjiang },
298*4418919fSjohnjiang .len = 128,
299*4418919fSjohnjiang },
300*4418919fSjohnjiang .key = {
301*4418919fSjohnjiang .data = {
302*4418919fSjohnjiang 0x39, 0xb8, 0x77, 0xb8, 0xe8, 0x2e, 0xcb, 0xd9,
303*4418919fSjohnjiang 0x74, 0x03, 0x25, 0x82, 0x8f, 0xaf, 0x67, 0x21,
304*4418919fSjohnjiang 0xc1, 0x29, 0x04, 0x6e, 0xb0, 0x13, 0x61, 0x44,
305*4418919fSjohnjiang 0xa0, 0x31, 0x82, 0xb1, 0x36, 0x20, 0xe2, 0x49,
306*4418919fSjohnjiang 0x81, 0x45, 0xa2, 0xbf, 0x3b, 0x03, 0xe6, 0xb6,
307*4418919fSjohnjiang 0x4b, 0x31, 0x7d, 0xd4, 0x8f, 0xcb, 0xc0, 0x18,
308*4418919fSjohnjiang 0xd9, 0xe7, 0xbc, 0x6e, 0x37, 0xeb, 0x93, 0x81,
309*4418919fSjohnjiang 0x78, 0xfe, 0x1f, 0xd1, 0xeb, 0xbc, 0xd9, 0x05,
310*4418919fSjohnjiang 0x6a, 0x2e, 0xf9, 0x82, 0x97, 0xf9, 0xdf, 0x3c,
311*4418919fSjohnjiang 0x66, 0xd5, 0xb2, 0xcc, 0xdc, 0x41, 0x47, 0xc4,
312*4418919fSjohnjiang 0x16, 0x76, 0x44, 0x3f, 0x8c, 0x99, 0x85, 0xbc,
313*4418919fSjohnjiang 0x97, 0x34, 0xbe, 0x2c, 0x31, 0xe7, 0x62, 0x49,
314*4418919fSjohnjiang 0xfc, 0x5b, 0xc4, 0x2a
315*4418919fSjohnjiang },
316*4418919fSjohnjiang .len = 100,
317*4418919fSjohnjiang },
318*4418919fSjohnjiang .digest = {
319*4418919fSjohnjiang .data = {
320*4418919fSjohnjiang 0x97, 0x16, 0x8f, 0x55, 0x13, 0xc2, 0xe9, 0xbc,
321*4418919fSjohnjiang 0x4b, 0xc5, 0x25, 0xce, 0x27, 0x03, 0x74, 0x0b,
322*4418919fSjohnjiang 0xce, 0x1a, 0x06, 0xec, 0xfe, 0x99, 0xa5, 0x70,
323*4418919fSjohnjiang 0xac, 0x66, 0xc8, 0x3e, 0xde, 0x96, 0x67, 0xcc,
324*4418919fSjohnjiang 0x07, 0xed, 0xf6, 0x64, 0x61, 0x7c, 0xe5, 0x3c
325*4418919fSjohnjiang },
326*4418919fSjohnjiang .len = 40,
327*4418919fSjohnjiang },
328*4418919fSjohnjiang };
329*4418919fSjohnjiang
330*4418919fSjohnjiang /* <-- AES CMAC --> */
331*4418919fSjohnjiang static struct fips_dev_self_test_vector
332*4418919fSjohnjiang SELF_TEST_AES_CMAC_test_vector = {
333*4418919fSjohnjiang .name = "SELF_TEST_AES_CMAC_test_vector",
334*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_AUTH,
335*4418919fSjohnjiang .auth = {
336*4418919fSjohnjiang .algo = RTE_CRYPTO_AUTH_AES_CMAC,
337*4418919fSjohnjiang },
338*4418919fSjohnjiang .input = {
339*4418919fSjohnjiang .data = {
340*4418919fSjohnjiang 0x57, 0x88, 0xf6, 0x1e, 0x02, 0x30, 0x47, 0x91,
341*4418919fSjohnjiang 0xb5, 0x2f, 0x40, 0x05, 0x7a, 0xbb, 0x4e, 0x04,
342*4418919fSjohnjiang 0x46, 0x40, 0x3e, 0xf3, 0x74, 0x02, 0x53, 0xdf,
343*4418919fSjohnjiang 0x72, 0x05, 0x96, 0x79, 0xbb, 0x2a, 0x6e, 0x5e,
344*4418919fSjohnjiang 0x05, 0x9a, 0x70, 0x9c, 0xbb
345*4418919fSjohnjiang },
346*4418919fSjohnjiang .len = 37,
347*4418919fSjohnjiang },
348*4418919fSjohnjiang .key = {
349*4418919fSjohnjiang .data = {
350*4418919fSjohnjiang 0x18, 0x42, 0x15, 0x14, 0x5d, 0xa4, 0x9d, 0xb4,
351*4418919fSjohnjiang 0x17, 0xe8, 0xbd, 0xd5, 0x73, 0xd6, 0x28, 0x2d
352*4418919fSjohnjiang },
353*4418919fSjohnjiang .len = 16,
354*4418919fSjohnjiang },
355*4418919fSjohnjiang .digest = {
356*4418919fSjohnjiang .data = {
357*4418919fSjohnjiang 0x8d, 0xa8, 0xcc, 0xa9, 0xb3, 0x6f, 0x68, 0x57,
358*4418919fSjohnjiang 0x1c, 0x6c, 0x0e, 0x40, 0xa3, 0xf4, 0x10
359*4418919fSjohnjiang },
360*4418919fSjohnjiang .len = 15,
361*4418919fSjohnjiang },
362*4418919fSjohnjiang };
363*4418919fSjohnjiang
364*4418919fSjohnjiang /* <-- AES CCM --> */
365*4418919fSjohnjiang static struct fips_dev_self_test_vector
366*4418919fSjohnjiang SELF_TEST_AES128_CCM_test_vector = {
367*4418919fSjohnjiang .name = "SELF_TEST_AES128_CCM_test_vector",
368*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD,
369*4418919fSjohnjiang .iv = {
370*4418919fSjohnjiang .data = {
371*4418919fSjohnjiang 0x00, 0x50, 0x30, 0xF1, 0x84, 0x44, 0x08, 0xB5,
372*4418919fSjohnjiang 0x03, 0x97, 0x76, 0xE7, 0x0C
373*4418919fSjohnjiang },
374*4418919fSjohnjiang .len = 13,
375*4418919fSjohnjiang },
376*4418919fSjohnjiang .aead = {
377*4418919fSjohnjiang .algo = RTE_CRYPTO_AEAD_AES_CCM,
378*4418919fSjohnjiang .aad = {
379*4418919fSjohnjiang .data = {
380*4418919fSjohnjiang /* 18 bytes padding for AAD */
381*4418919fSjohnjiang 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
382*4418919fSjohnjiang 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
383*4418919fSjohnjiang 0x00, 0x00,
384*4418919fSjohnjiang 0x08, 0x40, 0x0F, 0xD2, 0xE1, 0x28, 0xA5, 0x7C,
385*4418919fSjohnjiang 0x50, 0x30, 0xF1, 0x84, 0x44, 0x08, 0xAB, 0xAE,
386*4418919fSjohnjiang 0xA5, 0xB8, 0xFC, 0xBA, 0x00, 0x00
387*4418919fSjohnjiang },
388*4418919fSjohnjiang .len = 22,
389*4418919fSjohnjiang },
390*4418919fSjohnjiang },
391*4418919fSjohnjiang .input = {
392*4418919fSjohnjiang .data = {
393*4418919fSjohnjiang 0xF8, 0xBA, 0x1A, 0x55, 0xD0, 0x2F, 0x85, 0xAE,
394*4418919fSjohnjiang 0x96, 0x7B, 0xB6, 0x2F, 0xB6, 0xCD, 0xA8, 0xEB,
395*4418919fSjohnjiang 0x7E, 0x78, 0xA0, 0x50
396*4418919fSjohnjiang },
397*4418919fSjohnjiang .len = 20,
398*4418919fSjohnjiang },
399*4418919fSjohnjiang .key = {
400*4418919fSjohnjiang .data = {
401*4418919fSjohnjiang 0xC9, 0x7C, 0x1F, 0x67, 0xCE, 0x37, 0x11, 0x85,
402*4418919fSjohnjiang 0x51, 0x4A, 0x8A, 0x19, 0xF2, 0xBD, 0xD5, 0x2F
403*4418919fSjohnjiang },
404*4418919fSjohnjiang .len = 16,
405*4418919fSjohnjiang },
406*4418919fSjohnjiang .output = {
407*4418919fSjohnjiang .data = {
408*4418919fSjohnjiang 0xF3, 0xD0, 0xA2, 0xFE, 0x9A, 0x3D, 0xBF, 0x23,
409*4418919fSjohnjiang 0x42, 0xA6, 0x43, 0xE4, 0x32, 0x46, 0xE8, 0x0C,
410*4418919fSjohnjiang 0x3C, 0x04, 0xD0, 0x19
411*4418919fSjohnjiang },
412*4418919fSjohnjiang .len = 20,
413*4418919fSjohnjiang },
414*4418919fSjohnjiang .digest = {
415*4418919fSjohnjiang .data = {
416*4418919fSjohnjiang 0x78, 0x45, 0xCE, 0x0B, 0x16, 0xF9, 0x76, 0x23
417*4418919fSjohnjiang },
418*4418919fSjohnjiang .len = 8,
419*4418919fSjohnjiang },
420*4418919fSjohnjiang };
421*4418919fSjohnjiang
422*4418919fSjohnjiang /* <-- AES CBC --> */
423*4418919fSjohnjiang static struct fips_dev_self_test_vector
424*4418919fSjohnjiang SELF_TEST_AES128_CBC_test_vector = {
425*4418919fSjohnjiang .name = "SELF_TEST_AES128_CBC_test_vector",
426*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
427*4418919fSjohnjiang
428*4418919fSjohnjiang .iv = {
429*4418919fSjohnjiang .data = {
430*4418919fSjohnjiang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
431*4418919fSjohnjiang 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
432*4418919fSjohnjiang },
433*4418919fSjohnjiang .len = 16,
434*4418919fSjohnjiang },
435*4418919fSjohnjiang .cipher = {
436*4418919fSjohnjiang .algo = RTE_CRYPTO_CIPHER_AES_CBC,
437*4418919fSjohnjiang },
438*4418919fSjohnjiang .input = {
439*4418919fSjohnjiang .data = {
440*4418919fSjohnjiang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C,
441*4418919fSjohnjiang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72,
442*4418919fSjohnjiang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77,
443*4418919fSjohnjiang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20,
444*4418919fSjohnjiang },
445*4418919fSjohnjiang .len = 32,
446*4418919fSjohnjiang },
447*4418919fSjohnjiang .key = {
448*4418919fSjohnjiang .data = {
449*4418919fSjohnjiang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
450*4418919fSjohnjiang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A
451*4418919fSjohnjiang },
452*4418919fSjohnjiang .len = 16,
453*4418919fSjohnjiang },
454*4418919fSjohnjiang .output = {
455*4418919fSjohnjiang .data = {
456*4418919fSjohnjiang 0x8B, 0x4D, 0xDA, 0x1B, 0xCF, 0x04, 0xA0, 0x31,
457*4418919fSjohnjiang 0xB4, 0xBF, 0xBD, 0x68, 0x43, 0x20, 0x7E, 0x76,
458*4418919fSjohnjiang 0xB1, 0x96, 0x8B, 0xA2, 0x7C, 0xA2, 0x83, 0x9E,
459*4418919fSjohnjiang 0x39, 0x5A, 0x2F, 0x7E, 0x92, 0xB4, 0x48, 0x1A,
460*4418919fSjohnjiang },
461*4418919fSjohnjiang .len = 32,
462*4418919fSjohnjiang },
463*4418919fSjohnjiang };
464*4418919fSjohnjiang
465*4418919fSjohnjiang static struct fips_dev_self_test_vector
466*4418919fSjohnjiang SELF_TEST_AES192_CBC_test_vector = {
467*4418919fSjohnjiang .name = "SELF_TEST_AES192_CBC_test_vector",
468*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
469*4418919fSjohnjiang
470*4418919fSjohnjiang .iv = {
471*4418919fSjohnjiang .data = {
472*4418919fSjohnjiang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
473*4418919fSjohnjiang 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
474*4418919fSjohnjiang },
475*4418919fSjohnjiang .len = 16,
476*4418919fSjohnjiang },
477*4418919fSjohnjiang .cipher = {
478*4418919fSjohnjiang .algo = RTE_CRYPTO_CIPHER_AES_CBC,
479*4418919fSjohnjiang },
480*4418919fSjohnjiang .input = {
481*4418919fSjohnjiang .data = {
482*4418919fSjohnjiang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C,
483*4418919fSjohnjiang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72,
484*4418919fSjohnjiang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77,
485*4418919fSjohnjiang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20,
486*4418919fSjohnjiang },
487*4418919fSjohnjiang .len = 32,
488*4418919fSjohnjiang },
489*4418919fSjohnjiang .key = {
490*4418919fSjohnjiang .data = {
491*4418919fSjohnjiang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
492*4418919fSjohnjiang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
493*4418919fSjohnjiang 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0
494*4418919fSjohnjiang },
495*4418919fSjohnjiang .len = 24,
496*4418919fSjohnjiang },
497*4418919fSjohnjiang .output = {
498*4418919fSjohnjiang .data = {
499*4418919fSjohnjiang 0x45, 0xEE, 0x9A, 0xEA, 0x3C, 0x03, 0xFC, 0x4C,
500*4418919fSjohnjiang 0x84, 0x36, 0xB0, 0xDA, 0xB0, 0xDC, 0xF3, 0x5B,
501*4418919fSjohnjiang 0x75, 0xA7, 0xBE, 0x0E, 0xC0, 0x8D, 0x6C, 0xF8,
502*4418919fSjohnjiang 0xC1, 0x0F, 0xD0, 0x35, 0x1D, 0x82, 0xAE, 0x7C,
503*4418919fSjohnjiang },
504*4418919fSjohnjiang .len = 32,
505*4418919fSjohnjiang },
506*4418919fSjohnjiang };
507*4418919fSjohnjiang
508*4418919fSjohnjiang /* AES-256 CBC ENCRYPT*/
509*4418919fSjohnjiang static struct fips_dev_self_test_vector
510*4418919fSjohnjiang SELF_TEST_AES256_CBC_test_vector = {
511*4418919fSjohnjiang .name = "SELF_TEST_AES256_CBC_test_vector",
512*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
513*4418919fSjohnjiang
514*4418919fSjohnjiang .iv = {
515*4418919fSjohnjiang .data = {
516*4418919fSjohnjiang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
517*4418919fSjohnjiang 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
518*4418919fSjohnjiang },
519*4418919fSjohnjiang .len = 16,
520*4418919fSjohnjiang },
521*4418919fSjohnjiang .cipher = {
522*4418919fSjohnjiang .algo = RTE_CRYPTO_CIPHER_AES_CBC,
523*4418919fSjohnjiang },
524*4418919fSjohnjiang .input = {
525*4418919fSjohnjiang .data = {
526*4418919fSjohnjiang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C,
527*4418919fSjohnjiang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72,
528*4418919fSjohnjiang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77,
529*4418919fSjohnjiang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20,
530*4418919fSjohnjiang },
531*4418919fSjohnjiang .len = 32,
532*4418919fSjohnjiang },
533*4418919fSjohnjiang .key = {
534*4418919fSjohnjiang .data = {
535*4418919fSjohnjiang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
536*4418919fSjohnjiang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
537*4418919fSjohnjiang 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0,
538*4418919fSjohnjiang 0x37, 0x07, 0xB8, 0x23, 0xA2, 0xA3, 0xB5, 0x8D
539*4418919fSjohnjiang },
540*4418919fSjohnjiang .len = 32,
541*4418919fSjohnjiang },
542*4418919fSjohnjiang .output = {
543*4418919fSjohnjiang .data = {
544*4418919fSjohnjiang 0xF3, 0xDD, 0xF0, 0x0B, 0xFF, 0xA2, 0x6A, 0x04,
545*4418919fSjohnjiang 0xBE, 0xDA, 0x52, 0xA6, 0xFE, 0x6B, 0xA6, 0xA7,
546*4418919fSjohnjiang 0x48, 0x1D, 0x7D, 0x98, 0x65, 0xDB, 0xEF, 0x06,
547*4418919fSjohnjiang 0x26, 0xB5, 0x8E, 0xEB, 0x05, 0x0E, 0x77, 0x98,
548*4418919fSjohnjiang },
549*4418919fSjohnjiang .len = 32,
550*4418919fSjohnjiang },
551*4418919fSjohnjiang };
552*4418919fSjohnjiang
553*4418919fSjohnjiang /* DES-128 CBC ENCRYPT*/
554*4418919fSjohnjiang static struct fips_dev_self_test_vector
555*4418919fSjohnjiang SELF_TEST_3DES_2KEY_CBC_test_vector = {
556*4418919fSjohnjiang .name = "SELF_TEST_3DES_2KEY_CBC_test_vector",
557*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
558*4418919fSjohnjiang .iv = {
559*4418919fSjohnjiang .data = {
560*4418919fSjohnjiang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
561*4418919fSjohnjiang },
562*4418919fSjohnjiang .len = 8,
563*4418919fSjohnjiang },
564*4418919fSjohnjiang .cipher = {
565*4418919fSjohnjiang .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
566*4418919fSjohnjiang },
567*4418919fSjohnjiang .input = {
568*4418919fSjohnjiang .data = {
569*4418919fSjohnjiang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C,
570*4418919fSjohnjiang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72,
571*4418919fSjohnjiang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77,
572*4418919fSjohnjiang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20,
573*4418919fSjohnjiang },
574*4418919fSjohnjiang .len = 32,
575*4418919fSjohnjiang },
576*4418919fSjohnjiang .key = {
577*4418919fSjohnjiang .data = {
578*4418919fSjohnjiang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
579*4418919fSjohnjiang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
580*4418919fSjohnjiang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2
581*4418919fSjohnjiang },
582*4418919fSjohnjiang .len = 24,
583*4418919fSjohnjiang },
584*4418919fSjohnjiang .output = {
585*4418919fSjohnjiang .data = {
586*4418919fSjohnjiang 0x28, 0x2a, 0xff, 0x15, 0x5c, 0xdf, 0xd9, 0x6b,
587*4418919fSjohnjiang 0x54, 0xbc, 0x7b, 0xfb, 0xc5, 0x64, 0x4d, 0xdd,
588*4418919fSjohnjiang 0x3e, 0xf2, 0x9e, 0xb7, 0x53, 0x65, 0x37, 0x05,
589*4418919fSjohnjiang 0xe0, 0xdf, 0xae, 0xf7, 0xc9, 0x27, 0xe4, 0xec,
590*4418919fSjohnjiang },
591*4418919fSjohnjiang .len = 32,
592*4418919fSjohnjiang },
593*4418919fSjohnjiang };
594*4418919fSjohnjiang
595*4418919fSjohnjiang static struct fips_dev_self_test_vector
596*4418919fSjohnjiang SELF_TEST_3DES_3KEY_CBC_test_vector = {
597*4418919fSjohnjiang .name = "SELF_TEST_3DES_3KEY_CBC_test_vector",
598*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
599*4418919fSjohnjiang
600*4418919fSjohnjiang .iv = {
601*4418919fSjohnjiang .data = {
602*4418919fSjohnjiang 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
603*4418919fSjohnjiang },
604*4418919fSjohnjiang .len = 8,
605*4418919fSjohnjiang },
606*4418919fSjohnjiang .cipher = {
607*4418919fSjohnjiang .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
608*4418919fSjohnjiang },
609*4418919fSjohnjiang .input = {
610*4418919fSjohnjiang .data = {
611*4418919fSjohnjiang 0x57, 0x68, 0x61, 0x74, 0x20, 0x61, 0x20, 0x6C,
612*4418919fSjohnjiang 0x6F, 0x75, 0x73, 0x79, 0x20, 0x65, 0x61, 0x72,
613*4418919fSjohnjiang 0x74, 0x68, 0x21, 0x20, 0x48, 0x65, 0x20, 0x77,
614*4418919fSjohnjiang 0x6F, 0x6E, 0x64, 0x65, 0x72, 0x65, 0x64, 0x20,
615*4418919fSjohnjiang },
616*4418919fSjohnjiang .len = 32,
617*4418919fSjohnjiang },
618*4418919fSjohnjiang .key = {
619*4418919fSjohnjiang .data = {
620*4418919fSjohnjiang 0xE4, 0x23, 0x33, 0x8A, 0x35, 0x64, 0x61, 0xE2,
621*4418919fSjohnjiang 0x49, 0x03, 0xDD, 0xC6, 0xB8, 0xCA, 0x55, 0x7A,
622*4418919fSjohnjiang 0xD4, 0xC3, 0xA3, 0xAA, 0x33, 0x62, 0x61, 0xE0
623*4418919fSjohnjiang },
624*4418919fSjohnjiang .len = 24,
625*4418919fSjohnjiang },
626*4418919fSjohnjiang .output = {
627*4418919fSjohnjiang .data = {
628*4418919fSjohnjiang 0xd0, 0xc9, 0xdc, 0x51, 0x29, 0x97, 0x03, 0x64,
629*4418919fSjohnjiang 0xcd, 0x22, 0xba, 0x3d, 0x2b, 0xbc, 0x21, 0x37,
630*4418919fSjohnjiang 0x7b, 0x1e, 0x29, 0x23, 0xeb, 0x51, 0x6e, 0xac,
631*4418919fSjohnjiang 0xbe, 0x5b, 0xd3, 0x67, 0xe0, 0x3f, 0xc3, 0xb5,
632*4418919fSjohnjiang },
633*4418919fSjohnjiang .len = 32,
634*4418919fSjohnjiang },
635*4418919fSjohnjiang };
636*4418919fSjohnjiang
637*4418919fSjohnjiang /* <-- AES GCM --> */
638*4418919fSjohnjiang static struct fips_dev_self_test_vector
639*4418919fSjohnjiang SELF_TEST_AES128_GCM_encrypt_test_vector = {
640*4418919fSjohnjiang .name = "SELF_TEST_AES128_GCM_encrypt_test_vector",
641*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD,
642*4418919fSjohnjiang
643*4418919fSjohnjiang .iv = {
644*4418919fSjohnjiang .data = {
645*4418919fSjohnjiang 0x5a, 0xdb, 0x96, 0x09, 0xdb, 0xae, 0xb5, 0x8c,
646*4418919fSjohnjiang 0xbd, 0x6e, 0x72, 0x75
647*4418919fSjohnjiang },
648*4418919fSjohnjiang .len = 12,
649*4418919fSjohnjiang },
650*4418919fSjohnjiang .aead = {
651*4418919fSjohnjiang .algo = RTE_CRYPTO_AEAD_AES_GCM,
652*4418919fSjohnjiang .aad = {
653*4418919fSjohnjiang .data = {
654*4418919fSjohnjiang 0x88, 0x31, 0x9d, 0x6e, 0x1d, 0x3f, 0xfa, 0x5f,
655*4418919fSjohnjiang 0x98, 0x71, 0x99, 0x16, 0x6c, 0x8a, 0x9b, 0x56,
656*4418919fSjohnjiang 0xc2, 0xae, 0xba, 0x5a
657*4418919fSjohnjiang },
658*4418919fSjohnjiang .len = 20,
659*4418919fSjohnjiang },
660*4418919fSjohnjiang },
661*4418919fSjohnjiang .input = {
662*4418919fSjohnjiang .data = {
663*4418919fSjohnjiang 0x7c, 0x0e, 0x88, 0xc8, 0x88, 0x99, 0xa7, 0x79,
664*4418919fSjohnjiang 0x22, 0x84, 0x65, 0x07, 0x47, 0x97, 0xcd, 0x4c,
665*4418919fSjohnjiang 0x2e, 0x14, 0x98, 0xd2, 0x59, 0xb5, 0x43, 0x90,
666*4418919fSjohnjiang 0xb8, 0x5e, 0x3e, 0xef, 0x1c, 0x02, 0xdf, 0x60,
667*4418919fSjohnjiang 0xe7, 0x43, 0xf1, 0xb8, 0x40, 0x38, 0x2c, 0x4b,
668*4418919fSjohnjiang 0xcc, 0xaf, 0x3b, 0xaf, 0xb4, 0xca, 0x84, 0x29,
669*4418919fSjohnjiang 0xbe, 0xa0, 0x63
670*4418919fSjohnjiang },
671*4418919fSjohnjiang .len = 51,
672*4418919fSjohnjiang },
673*4418919fSjohnjiang .key = {
674*4418919fSjohnjiang .data = {
675*4418919fSjohnjiang 0xfe, 0x47, 0xfc, 0xce, 0x5f, 0xc3, 0x26, 0x65,
676*4418919fSjohnjiang 0xd2, 0xae, 0x39, 0x9e, 0x4e, 0xec, 0x72, 0xba
677*4418919fSjohnjiang },
678*4418919fSjohnjiang .len = 16,
679*4418919fSjohnjiang },
680*4418919fSjohnjiang .output = {
681*4418919fSjohnjiang .data = {
682*4418919fSjohnjiang 0x98, 0xf4, 0x82, 0x6f, 0x05, 0xa2, 0x65, 0xe6,
683*4418919fSjohnjiang 0xdd, 0x2b, 0xe8, 0x2d, 0xb2, 0x41, 0xc0, 0xfb,
684*4418919fSjohnjiang 0xbb, 0xf9, 0xff, 0xb1, 0xc1, 0x73, 0xaa, 0x83,
685*4418919fSjohnjiang 0x96, 0x4b, 0x7c, 0xf5, 0x39, 0x30, 0x43, 0x73,
686*4418919fSjohnjiang 0x63, 0x65, 0x25, 0x3d, 0xdb, 0xc5, 0xdb, 0x87,
687*4418919fSjohnjiang 0x78, 0x37, 0x14, 0x95, 0xda, 0x76, 0xd2, 0x69,
688*4418919fSjohnjiang 0xe5, 0xdb, 0x3e
689*4418919fSjohnjiang },
690*4418919fSjohnjiang .len = 51,
691*4418919fSjohnjiang },
692*4418919fSjohnjiang .digest = {
693*4418919fSjohnjiang .data = {
694*4418919fSjohnjiang 0x29, 0x1e, 0xf1, 0x98, 0x2e, 0x4d, 0xef, 0xed,
695*4418919fSjohnjiang 0xaa, 0x22, 0x49, 0xf8, 0x98, 0x55, 0x6b, 0x47
696*4418919fSjohnjiang },
697*4418919fSjohnjiang .len = 16,
698*4418919fSjohnjiang },
699*4418919fSjohnjiang };
700*4418919fSjohnjiang
701*4418919fSjohnjiang static struct fips_dev_self_test_vector
702*4418919fSjohnjiang SELF_TEST_AES192_GCM_encrypt_test_vector = {
703*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD,
704*4418919fSjohnjiang .name = "SELF_TEST_AES192_GCM_encrypt_test_vector",
705*4418919fSjohnjiang .iv = {
706*4418919fSjohnjiang .data = {
707*4418919fSjohnjiang 0x0b, 0xd4, 0x4f, 0xf4, 0xd2, 0x0c, 0x15, 0xd0,
708*4418919fSjohnjiang 0x4f, 0xc6, 0x1e, 0xe7
709*4418919fSjohnjiang },
710*4418919fSjohnjiang .len = 12,
711*4418919fSjohnjiang },
712*4418919fSjohnjiang .aead = {
713*4418919fSjohnjiang .algo = RTE_CRYPTO_AEAD_AES_GCM,
714*4418919fSjohnjiang .aad = {
715*4418919fSjohnjiang .data = {
716*4418919fSjohnjiang 0x9e, 0xa4, 0x2c, 0x50, 0xa7, 0xfd, 0xb8, 0x5e,
717*4418919fSjohnjiang 0x14, 0x1a, 0xa0, 0x84, 0xb4, 0x6b, 0xde, 0x12
718*4418919fSjohnjiang },
719*4418919fSjohnjiang .len = 16,
720*4418919fSjohnjiang },
721*4418919fSjohnjiang },
722*4418919fSjohnjiang .input = {
723*4418919fSjohnjiang .data = {
724*4418919fSjohnjiang 0x56, 0x7c, 0xcb, 0x3f, 0xa0, 0xdb, 0x89, 0x70,
725*4418919fSjohnjiang 0x8a, 0xf3, 0xff, 0x2b, 0xb0, 0x29, 0xdd, 0xec,
726*4418919fSjohnjiang 0x52, 0xc6, 0x69, 0x47, 0x58, 0x5d, 0x29, 0x1a,
727*4418919fSjohnjiang 0x28, 0x56, 0x4b, 0xf5, 0x6d, 0xb7, 0x06, 0xf7
728*4418919fSjohnjiang },
729*4418919fSjohnjiang .len = 32,
730*4418919fSjohnjiang },
731*4418919fSjohnjiang .key = {
732*4418919fSjohnjiang .data = {
733*4418919fSjohnjiang 0x0d, 0x4a, 0x90, 0x0d, 0x1b, 0x0b, 0xb5, 0xb7,
734*4418919fSjohnjiang 0xbe, 0x24, 0x38, 0xc2, 0xba, 0x48, 0xfc, 0x45,
735*4418919fSjohnjiang 0x13, 0x4c, 0xc1, 0x98, 0x10, 0x8c, 0xf8, 0x85
736*4418919fSjohnjiang },
737*4418919fSjohnjiang .len = 24,
738*4418919fSjohnjiang },
739*4418919fSjohnjiang .output = {
740*4418919fSjohnjiang .data = {
741*4418919fSjohnjiang 0x2f, 0x8a, 0x42, 0xcd, 0x18, 0x3b, 0x03, 0x14,
742*4418919fSjohnjiang 0xfd, 0x20, 0xa3, 0xd9, 0x7d, 0x9e, 0x0c, 0x52,
743*4418919fSjohnjiang 0x17, 0xb0, 0xf0, 0x88, 0xd2, 0xca, 0x87, 0xa8,
744*4418919fSjohnjiang 0x29, 0x0d, 0x4b, 0xae, 0x69, 0xad, 0x83, 0xf5
745*4418919fSjohnjiang },
746*4418919fSjohnjiang .len = 32,
747*4418919fSjohnjiang },
748*4418919fSjohnjiang .digest = {
749*4418919fSjohnjiang .data = {
750*4418919fSjohnjiang 0xde, 0x41, 0x45, 0x92, 0xd7, 0x7f, 0x2f, 0x0b,
751*4418919fSjohnjiang 0x50, 0xdf, 0x4a, 0xec, 0x71, 0x4f, 0xad, 0x43
752*4418919fSjohnjiang },
753*4418919fSjohnjiang .len = 16,
754*4418919fSjohnjiang },
755*4418919fSjohnjiang };
756*4418919fSjohnjiang
757*4418919fSjohnjiang static struct fips_dev_self_test_vector
758*4418919fSjohnjiang SELF_TEST_AES256_GCM_encrypt_test_vector = {
759*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_AEAD,
760*4418919fSjohnjiang .name = "SELF_TEST_AES256_GCM_encrypt_test_vector",
761*4418919fSjohnjiang .iv = {
762*4418919fSjohnjiang .data = {
763*4418919fSjohnjiang 0x5c, 0x1b, 0x21, 0xc8, 0x99, 0x8e, 0xd6, 0x29,
764*4418919fSjohnjiang 0x90, 0x06, 0xd3, 0xf9
765*4418919fSjohnjiang },
766*4418919fSjohnjiang .len = 12,
767*4418919fSjohnjiang },
768*4418919fSjohnjiang .aead = {
769*4418919fSjohnjiang .algo = RTE_CRYPTO_AEAD_AES_GCM,
770*4418919fSjohnjiang .aad = {
771*4418919fSjohnjiang .data = {
772*4418919fSjohnjiang 0x22, 0xed, 0x23, 0x59, 0x46, 0x23, 0x5a, 0x85,
773*4418919fSjohnjiang 0xa4, 0x5b, 0xc5, 0xfa, 0xd7, 0x14, 0x0b, 0xfa
774*4418919fSjohnjiang },
775*4418919fSjohnjiang .len = 16,
776*4418919fSjohnjiang },
777*4418919fSjohnjiang },
778*4418919fSjohnjiang .input = {
779*4418919fSjohnjiang .data = {
780*4418919fSjohnjiang 0xad, 0x42, 0x60, 0xe3, 0xcd, 0xc7, 0x6b, 0xcc,
781*4418919fSjohnjiang 0x10, 0xc7, 0xb2, 0xc0, 0x6b, 0x80, 0xb3, 0xbe,
782*4418919fSjohnjiang 0x94, 0x82, 0x58, 0xe5, 0xef, 0x20, 0xc5, 0x08,
783*4418919fSjohnjiang 0xa8, 0x1f, 0x51, 0xe9, 0x6a, 0x51, 0x83, 0x88
784*4418919fSjohnjiang },
785*4418919fSjohnjiang .len = 32,
786*4418919fSjohnjiang },
787*4418919fSjohnjiang .key = {
788*4418919fSjohnjiang .data = {
789*4418919fSjohnjiang 0x37, 0xcc, 0xdb, 0xa1, 0xd9, 0x29, 0xd6, 0x43,
790*4418919fSjohnjiang 0x6c, 0x16, 0xbb, 0xa5, 0xb5, 0xff, 0x34, 0xde,
791*4418919fSjohnjiang 0xec, 0x88, 0xed, 0x7d, 0xf3, 0xd1, 0x5d, 0x0f,
792*4418919fSjohnjiang 0x4d, 0xdf, 0x80, 0xc0, 0xc7, 0x31, 0xee, 0x1f
793*4418919fSjohnjiang },
794*4418919fSjohnjiang .len = 32,
795*4418919fSjohnjiang },
796*4418919fSjohnjiang .output = {
797*4418919fSjohnjiang .data = {
798*4418919fSjohnjiang 0x3b, 0x33, 0x5f, 0x8b, 0x08, 0xd3, 0x3c, 0xcd,
799*4418919fSjohnjiang 0xca, 0xd2, 0x28, 0xa7, 0x47, 0x00, 0xf1, 0x00,
800*4418919fSjohnjiang 0x75, 0x42, 0xa4, 0xd1, 0xe7, 0xfc, 0x1e, 0xbe,
801*4418919fSjohnjiang 0x3f, 0x44, 0x7f, 0xe7, 0x1a, 0xf2, 0x98, 0x16
802*4418919fSjohnjiang },
803*4418919fSjohnjiang .len = 32,
804*4418919fSjohnjiang },
805*4418919fSjohnjiang .digest = {
806*4418919fSjohnjiang .data = {
807*4418919fSjohnjiang 0x1f, 0xbf, 0x49, 0xcc, 0x46, 0xf4, 0x58, 0xbf,
808*4418919fSjohnjiang 0x6e, 0x88, 0xf6, 0x37, 0x09, 0x75, 0xe6, 0xd4
809*4418919fSjohnjiang },
810*4418919fSjohnjiang .len = 16,
811*4418919fSjohnjiang },
812*4418919fSjohnjiang };
813*4418919fSjohnjiang
814*4418919fSjohnjiang
815*4418919fSjohnjiang /* <-- AES CTR --> */
816*4418919fSjohnjiang static struct fips_dev_self_test_vector
817*4418919fSjohnjiang SELF_TEST_AES128_CTR_test_vector = {
818*4418919fSjohnjiang .name = "SELF_TEST_AES128_CTR_test_vector",
819*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
820*4418919fSjohnjiang
821*4418919fSjohnjiang .iv = {
822*4418919fSjohnjiang .data = {
823*4418919fSjohnjiang 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
824*4418919fSjohnjiang 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
825*4418919fSjohnjiang },
826*4418919fSjohnjiang .len = 16,
827*4418919fSjohnjiang },
828*4418919fSjohnjiang .cipher = {
829*4418919fSjohnjiang .algo = RTE_CRYPTO_CIPHER_AES_CTR,
830*4418919fSjohnjiang },
831*4418919fSjohnjiang .input = {
832*4418919fSjohnjiang .data = {
833*4418919fSjohnjiang 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
834*4418919fSjohnjiang 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
835*4418919fSjohnjiang 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
836*4418919fSjohnjiang 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
837*4418919fSjohnjiang },
838*4418919fSjohnjiang .len = 32,
839*4418919fSjohnjiang },
840*4418919fSjohnjiang .key = {
841*4418919fSjohnjiang .data = {
842*4418919fSjohnjiang 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
843*4418919fSjohnjiang 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
844*4418919fSjohnjiang },
845*4418919fSjohnjiang .len = 16,
846*4418919fSjohnjiang },
847*4418919fSjohnjiang .output = {
848*4418919fSjohnjiang .data = {
849*4418919fSjohnjiang 0x87, 0x4D, 0x61, 0x91, 0xB6, 0x20, 0xE3, 0x26,
850*4418919fSjohnjiang 0x1B, 0xEF, 0x68, 0x64, 0x99, 0x0D, 0xB6, 0xCE,
851*4418919fSjohnjiang 0x98, 0x06, 0xF6, 0x6B, 0x79, 0x70, 0xFD, 0xFF,
852*4418919fSjohnjiang 0x86, 0x17, 0x18, 0x7B, 0xB9, 0xFF, 0xFD, 0xFF,
853*4418919fSjohnjiang },
854*4418919fSjohnjiang .len = 32,
855*4418919fSjohnjiang },
856*4418919fSjohnjiang };
857*4418919fSjohnjiang
858*4418919fSjohnjiang static struct fips_dev_self_test_vector
859*4418919fSjohnjiang SELF_TEST_AES192_CTR_test_vector = {
860*4418919fSjohnjiang .name = "SELF_TEST_AES192_CTR_test_vector",
861*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
862*4418919fSjohnjiang
863*4418919fSjohnjiang .iv = {
864*4418919fSjohnjiang .data = {
865*4418919fSjohnjiang 0x3F, 0x69, 0xA8, 0xCD, 0xE8, 0xF0, 0xEF, 0x40,
866*4418919fSjohnjiang 0xB8, 0x7A, 0x4B, 0xED, 0x2B, 0xAF, 0xBF, 0x57
867*4418919fSjohnjiang },
868*4418919fSjohnjiang .len = 16,
869*4418919fSjohnjiang },
870*4418919fSjohnjiang .cipher = {
871*4418919fSjohnjiang .algo = RTE_CRYPTO_CIPHER_AES_CTR,
872*4418919fSjohnjiang },
873*4418919fSjohnjiang .input = {
874*4418919fSjohnjiang .data = {
875*4418919fSjohnjiang 0x01, 0x0F, 0x10, 0x1F, 0x20, 0x1C, 0x0E, 0xB8,
876*4418919fSjohnjiang 0xFB, 0x5C, 0xCD, 0xCC, 0x1F, 0xF9, 0xAF, 0x0B,
877*4418919fSjohnjiang 0x95, 0x03, 0x74, 0x99, 0x49, 0xE7, 0x62, 0x55,
878*4418919fSjohnjiang 0xDA, 0xEA, 0x13, 0x20, 0x1D, 0xC6, 0xCC, 0xCC,
879*4418919fSjohnjiang },
880*4418919fSjohnjiang .len = 32,
881*4418919fSjohnjiang },
882*4418919fSjohnjiang .key = {
883*4418919fSjohnjiang .data = {
884*4418919fSjohnjiang 0xCB, 0xC5, 0xED, 0x5B, 0xE7, 0x7C, 0xBD, 0x8C,
885*4418919fSjohnjiang 0x50, 0xD9, 0x30, 0xF2, 0xB5, 0x6A, 0x0E, 0x5F,
886*4418919fSjohnjiang 0xAA, 0xAE, 0xAD, 0xA2, 0x1F, 0x49, 0x52, 0xD4
887*4418919fSjohnjiang },
888*4418919fSjohnjiang .len = 24,
889*4418919fSjohnjiang },
890*4418919fSjohnjiang .output = {
891*4418919fSjohnjiang .data = {
892*4418919fSjohnjiang 0x4A, 0x6C, 0xC8, 0xCC, 0x96, 0x2A, 0x13, 0x84,
893*4418919fSjohnjiang 0x1C, 0x36, 0x88, 0xE9, 0xE5, 0x94, 0x70, 0xB2,
894*4418919fSjohnjiang 0x14, 0x5B, 0x13, 0x80, 0xEA, 0xD8, 0x8D, 0x37,
895*4418919fSjohnjiang 0xFD, 0x70, 0xA8, 0x83, 0xE8, 0x2B, 0x88, 0x1E,
896*4418919fSjohnjiang },
897*4418919fSjohnjiang .len = 32,
898*4418919fSjohnjiang },
899*4418919fSjohnjiang };
900*4418919fSjohnjiang
901*4418919fSjohnjiang static struct fips_dev_self_test_vector
902*4418919fSjohnjiang SELF_TEST_AES256_CTR_test_vector = {
903*4418919fSjohnjiang .name = "SELF_TEST_AES256_CTR_test_vector",
904*4418919fSjohnjiang .operation_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
905*4418919fSjohnjiang
906*4418919fSjohnjiang .iv = {
907*4418919fSjohnjiang .data = {
908*4418919fSjohnjiang 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
909*4418919fSjohnjiang 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
910*4418919fSjohnjiang },
911*4418919fSjohnjiang .len = 16,
912*4418919fSjohnjiang },
913*4418919fSjohnjiang .cipher = {
914*4418919fSjohnjiang .algo = RTE_CRYPTO_CIPHER_AES_CTR,
915*4418919fSjohnjiang },
916*4418919fSjohnjiang .input = {
917*4418919fSjohnjiang .data = {
918*4418919fSjohnjiang 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
919*4418919fSjohnjiang 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
920*4418919fSjohnjiang 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
921*4418919fSjohnjiang 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
922*4418919fSjohnjiang },
923*4418919fSjohnjiang .len = 32,
924*4418919fSjohnjiang },
925*4418919fSjohnjiang .key = {
926*4418919fSjohnjiang .data = {
927*4418919fSjohnjiang 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE,
928*4418919fSjohnjiang 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81,
929*4418919fSjohnjiang 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7,
930*4418919fSjohnjiang 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4
931*4418919fSjohnjiang },
932*4418919fSjohnjiang .len = 32,
933*4418919fSjohnjiang },
934*4418919fSjohnjiang .output = {
935*4418919fSjohnjiang .data = {
936*4418919fSjohnjiang 0x60, 0x1E, 0xC3, 0x13, 0x77, 0x57, 0x89, 0xA5,
937*4418919fSjohnjiang 0xB7, 0xA7, 0xF5, 0x04, 0xBB, 0xF3, 0xD2, 0x28,
938*4418919fSjohnjiang 0xF4, 0x43, 0xE3, 0xCA, 0x4D, 0x62, 0xB5, 0x9A,
939*4418919fSjohnjiang 0xCA, 0x84, 0xE9, 0x90, 0xCA, 0xCA, 0xF5, 0xC5,
940*4418919fSjohnjiang },
941*4418919fSjohnjiang .len = 32,
942*4418919fSjohnjiang },
943*4418919fSjohnjiang };
944*4418919fSjohnjiang
945*4418919fSjohnjiang
946*4418919fSjohnjiang struct fips_dev_self_test_vector
947*4418919fSjohnjiang *self_test_vectors[] = {
948*4418919fSjohnjiang &SELF_TEST_AES128_CBC_test_vector,
949*4418919fSjohnjiang &SELF_TEST_AES192_CBC_test_vector,
950*4418919fSjohnjiang &SELF_TEST_AES256_CBC_test_vector,
951*4418919fSjohnjiang &SELF_TEST_3DES_2KEY_CBC_test_vector,
952*4418919fSjohnjiang &SELF_TEST_3DES_3KEY_CBC_test_vector,
953*4418919fSjohnjiang &SELF_TEST_AES128_CCM_test_vector,
954*4418919fSjohnjiang &SELF_TEST_SHA1_HMAC_test_vector,
955*4418919fSjohnjiang &SELF_TEST_SHA224_HMAC_test_vector,
956*4418919fSjohnjiang &SELF_TEST_SHA256_HMAC_test_vector,
957*4418919fSjohnjiang &SELF_TEST_SHA384_HMAC_test_vector,
958*4418919fSjohnjiang &SELF_TEST_SHA512_HMAC_test_vector,
959*4418919fSjohnjiang &SELF_TEST_AES_CMAC_test_vector,
960*4418919fSjohnjiang &SELF_TEST_AES128_GCM_encrypt_test_vector,
961*4418919fSjohnjiang &SELF_TEST_AES192_GCM_encrypt_test_vector,
962*4418919fSjohnjiang &SELF_TEST_AES256_GCM_encrypt_test_vector,
963*4418919fSjohnjiang &SELF_TEST_AES128_CTR_test_vector,
964*4418919fSjohnjiang &SELF_TEST_AES192_CTR_test_vector,
965*4418919fSjohnjiang &SELF_TEST_AES256_CTR_test_vector,
966*4418919fSjohnjiang };
967*4418919fSjohnjiang
968*4418919fSjohnjiang struct fips_dev_auto_test_env {
969*4418919fSjohnjiang struct rte_mempool *mpool;
970*4418919fSjohnjiang struct rte_mempool *op_pool;
971*4418919fSjohnjiang struct rte_mempool *sess_pool;
972*4418919fSjohnjiang struct rte_mempool *sess_priv_pool;
973*4418919fSjohnjiang struct rte_mbuf *mbuf;
974*4418919fSjohnjiang struct rte_crypto_op *op;
975*4418919fSjohnjiang };
976*4418919fSjohnjiang
977*4418919fSjohnjiang typedef int (*fips_dev_self_test_prepare_xform_t)(uint8_t,
978*4418919fSjohnjiang struct rte_crypto_sym_xform *,
979*4418919fSjohnjiang struct fips_dev_self_test_vector *,
980*4418919fSjohnjiang uint32_t, uint8_t *,
981*4418919fSjohnjiang uint32_t);
982*4418919fSjohnjiang
983*4418919fSjohnjiang typedef int (*fips_dev_self_test_prepare_op_t)(struct rte_crypto_op *,
984*4418919fSjohnjiang struct rte_mbuf *, struct rte_cryptodev_sym_session *,
985*4418919fSjohnjiang uint32_t, struct fips_dev_self_test_vector *);
986*4418919fSjohnjiang
987*4418919fSjohnjiang typedef int (*fips_dev_self_test_check_result_t)(struct rte_crypto_op *,
988*4418919fSjohnjiang struct fips_dev_self_test_vector *, uint32_t);
989*4418919fSjohnjiang
990*4418919fSjohnjiang struct fips_dev_self_test_ops {
991*4418919fSjohnjiang enum rte_crypto_sym_xform_type last_operation_type;
992*4418919fSjohnjiang fips_dev_self_test_prepare_xform_t prepare_xform;
993*4418919fSjohnjiang fips_dev_self_test_prepare_op_t prepare_op;
994*4418919fSjohnjiang fips_dev_self_test_check_result_t check_result;
995*4418919fSjohnjiang };
996*4418919fSjohnjiang
997*4418919fSjohnjiang static int
prepare_cipher_xform(uint8_t dev_id,struct rte_crypto_sym_xform * xform,struct fips_dev_self_test_vector * vec,uint32_t dir,uint8_t * key,uint32_t neg_test)998*4418919fSjohnjiang prepare_cipher_xform(uint8_t dev_id,
999*4418919fSjohnjiang struct rte_crypto_sym_xform *xform,
1000*4418919fSjohnjiang struct fips_dev_self_test_vector *vec,
1001*4418919fSjohnjiang uint32_t dir,
1002*4418919fSjohnjiang uint8_t *key,
1003*4418919fSjohnjiang uint32_t neg_test)
1004*4418919fSjohnjiang {
1005*4418919fSjohnjiang const struct rte_cryptodev_symmetric_capability *cap;
1006*4418919fSjohnjiang struct rte_cryptodev_sym_capability_idx cap_idx;
1007*4418919fSjohnjiang struct rte_crypto_cipher_xform *cipher_xform = &xform->cipher;
1008*4418919fSjohnjiang
1009*4418919fSjohnjiang memset(xform, 0, sizeof(*xform));
1010*4418919fSjohnjiang
1011*4418919fSjohnjiang /** negative test, key is xored */
1012*4418919fSjohnjiang if (neg_test) {
1013*4418919fSjohnjiang uint32_t i;
1014*4418919fSjohnjiang
1015*4418919fSjohnjiang for (i = 0; i < vec->key.len; i++)
1016*4418919fSjohnjiang key[i] ^= vec->key.data[i];
1017*4418919fSjohnjiang } else
1018*4418919fSjohnjiang memcpy(key, vec->key.data, vec->key.len);
1019*4418919fSjohnjiang
1020*4418919fSjohnjiang xform->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1021*4418919fSjohnjiang
1022*4418919fSjohnjiang cipher_xform->algo = vec->cipher.algo;
1023*4418919fSjohnjiang cipher_xform->op = (dir == self_test_dir_enc_auth_gen) ?
1024*4418919fSjohnjiang RTE_CRYPTO_CIPHER_OP_ENCRYPT :
1025*4418919fSjohnjiang RTE_CRYPTO_CIPHER_OP_DECRYPT;
1026*4418919fSjohnjiang cipher_xform->key.data = key;
1027*4418919fSjohnjiang cipher_xform->key.length = vec->key.len;
1028*4418919fSjohnjiang cipher_xform->iv.length = vec->iv.len;
1029*4418919fSjohnjiang cipher_xform->iv.offset = IV_OFF;
1030*4418919fSjohnjiang
1031*4418919fSjohnjiang cap_idx.algo.cipher = cipher_xform->algo;
1032*4418919fSjohnjiang cap_idx.type = RTE_CRYPTO_SYM_XFORM_CIPHER;
1033*4418919fSjohnjiang
1034*4418919fSjohnjiang cap = rte_cryptodev_sym_capability_get(dev_id, &cap_idx);
1035*4418919fSjohnjiang if (!cap) {
1036*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Failed to get capability for cdev %u\n",
1037*4418919fSjohnjiang dev_id);
1038*4418919fSjohnjiang return -EACCES;
1039*4418919fSjohnjiang }
1040*4418919fSjohnjiang
1041*4418919fSjohnjiang if (rte_cryptodev_sym_capability_check_cipher(cap,
1042*4418919fSjohnjiang cipher_xform->key.length,
1043*4418919fSjohnjiang cipher_xform->iv.length) != 0) {
1044*4418919fSjohnjiang RTE_LOG(ERR, PMD, "PMD %s key length %u IV length %u\n",
1045*4418919fSjohnjiang rte_cryptodev_name_get(dev_id),
1046*4418919fSjohnjiang cipher_xform->key.length,
1047*4418919fSjohnjiang cipher_xform->iv.length);
1048*4418919fSjohnjiang return -EACCES;
1049*4418919fSjohnjiang }
1050*4418919fSjohnjiang
1051*4418919fSjohnjiang return 0;
1052*4418919fSjohnjiang }
1053*4418919fSjohnjiang
1054*4418919fSjohnjiang static int
prepare_auth_xform(uint8_t dev_id,struct rte_crypto_sym_xform * xform,struct fips_dev_self_test_vector * vec,uint32_t dir,uint8_t * key,uint32_t neg_test)1055*4418919fSjohnjiang prepare_auth_xform(uint8_t dev_id,
1056*4418919fSjohnjiang struct rte_crypto_sym_xform *xform,
1057*4418919fSjohnjiang struct fips_dev_self_test_vector *vec,
1058*4418919fSjohnjiang uint32_t dir,
1059*4418919fSjohnjiang uint8_t *key,
1060*4418919fSjohnjiang uint32_t neg_test)
1061*4418919fSjohnjiang {
1062*4418919fSjohnjiang const struct rte_cryptodev_symmetric_capability *cap;
1063*4418919fSjohnjiang struct rte_cryptodev_sym_capability_idx cap_idx;
1064*4418919fSjohnjiang struct rte_crypto_auth_xform *auth_xform = &xform->auth;
1065*4418919fSjohnjiang
1066*4418919fSjohnjiang memset(xform, 0, sizeof(*xform));
1067*4418919fSjohnjiang
1068*4418919fSjohnjiang /** negative test, key is xored */
1069*4418919fSjohnjiang if (neg_test) {
1070*4418919fSjohnjiang uint32_t i;
1071*4418919fSjohnjiang
1072*4418919fSjohnjiang for (i = 0; i < vec->key.len; i++)
1073*4418919fSjohnjiang key[i] ^= vec->key.data[i];
1074*4418919fSjohnjiang } else
1075*4418919fSjohnjiang memcpy(key, vec->key.data, vec->key.len);
1076*4418919fSjohnjiang
1077*4418919fSjohnjiang xform->type = RTE_CRYPTO_SYM_XFORM_AUTH;
1078*4418919fSjohnjiang
1079*4418919fSjohnjiang auth_xform->algo = vec->auth.algo;
1080*4418919fSjohnjiang auth_xform->op = (dir == self_test_dir_enc_auth_gen) ?
1081*4418919fSjohnjiang RTE_CRYPTO_AUTH_OP_GENERATE :
1082*4418919fSjohnjiang RTE_CRYPTO_AUTH_OP_VERIFY;
1083*4418919fSjohnjiang auth_xform->digest_length = vec->digest.len;
1084*4418919fSjohnjiang auth_xform->key.data = key;
1085*4418919fSjohnjiang auth_xform->key.length = vec->key.len;
1086*4418919fSjohnjiang
1087*4418919fSjohnjiang cap_idx.algo.auth = auth_xform->algo;
1088*4418919fSjohnjiang cap_idx.type = RTE_CRYPTO_SYM_XFORM_AUTH;
1089*4418919fSjohnjiang
1090*4418919fSjohnjiang cap = rte_cryptodev_sym_capability_get(dev_id, &cap_idx);
1091*4418919fSjohnjiang if (!cap) {
1092*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Failed to get capability for cdev %u\n",
1093*4418919fSjohnjiang dev_id);
1094*4418919fSjohnjiang return -EACCES;
1095*4418919fSjohnjiang }
1096*4418919fSjohnjiang
1097*4418919fSjohnjiang if (rte_cryptodev_sym_capability_check_auth(cap,
1098*4418919fSjohnjiang auth_xform->key.length,
1099*4418919fSjohnjiang auth_xform->digest_length, 0) != 0) {
1100*4418919fSjohnjiang RTE_LOG(ERR, PMD, "PMD %s key length %u Digest length %u\n",
1101*4418919fSjohnjiang rte_cryptodev_name_get(dev_id),
1102*4418919fSjohnjiang auth_xform->key.length,
1103*4418919fSjohnjiang auth_xform->digest_length);
1104*4418919fSjohnjiang return -EACCES;
1105*4418919fSjohnjiang }
1106*4418919fSjohnjiang
1107*4418919fSjohnjiang return 0;
1108*4418919fSjohnjiang }
1109*4418919fSjohnjiang
1110*4418919fSjohnjiang static int
prepare_aead_xform(uint8_t dev_id,struct rte_crypto_sym_xform * xform,struct fips_dev_self_test_vector * vec,uint32_t dir,uint8_t * key,uint32_t neg_test)1111*4418919fSjohnjiang prepare_aead_xform(uint8_t dev_id,
1112*4418919fSjohnjiang struct rte_crypto_sym_xform *xform,
1113*4418919fSjohnjiang struct fips_dev_self_test_vector *vec,
1114*4418919fSjohnjiang uint32_t dir,
1115*4418919fSjohnjiang uint8_t *key,
1116*4418919fSjohnjiang uint32_t neg_test)
1117*4418919fSjohnjiang {
1118*4418919fSjohnjiang const struct rte_cryptodev_symmetric_capability *cap;
1119*4418919fSjohnjiang struct rte_cryptodev_sym_capability_idx cap_idx;
1120*4418919fSjohnjiang struct rte_crypto_aead_xform *aead_xform = &xform->aead;
1121*4418919fSjohnjiang
1122*4418919fSjohnjiang memset(xform, 0, sizeof(*xform));
1123*4418919fSjohnjiang
1124*4418919fSjohnjiang /** negative test, key is xored */
1125*4418919fSjohnjiang if (neg_test) {
1126*4418919fSjohnjiang uint32_t i;
1127*4418919fSjohnjiang
1128*4418919fSjohnjiang for (i = 0; i < vec->key.len; i++)
1129*4418919fSjohnjiang key[i] ^= vec->key.data[i];
1130*4418919fSjohnjiang } else
1131*4418919fSjohnjiang memcpy(key, vec->key.data, vec->key.len);
1132*4418919fSjohnjiang
1133*4418919fSjohnjiang xform->type = RTE_CRYPTO_SYM_XFORM_AEAD;
1134*4418919fSjohnjiang
1135*4418919fSjohnjiang aead_xform->algo = vec->aead.algo;
1136*4418919fSjohnjiang aead_xform->op = (dir == self_test_dir_enc_auth_gen) ?
1137*4418919fSjohnjiang RTE_CRYPTO_AEAD_OP_ENCRYPT :
1138*4418919fSjohnjiang RTE_CRYPTO_AEAD_OP_DECRYPT;
1139*4418919fSjohnjiang aead_xform->aad_length = vec->aead.aad.len;
1140*4418919fSjohnjiang aead_xform->digest_length = vec->digest.len;
1141*4418919fSjohnjiang aead_xform->iv.offset = IV_OFF;
1142*4418919fSjohnjiang aead_xform->iv.length = vec->iv.len;
1143*4418919fSjohnjiang aead_xform->key.data = key;
1144*4418919fSjohnjiang aead_xform->key.length = vec->key.len;
1145*4418919fSjohnjiang
1146*4418919fSjohnjiang cap_idx.algo.aead = aead_xform->algo;
1147*4418919fSjohnjiang cap_idx.type = RTE_CRYPTO_SYM_XFORM_AEAD;
1148*4418919fSjohnjiang
1149*4418919fSjohnjiang cap = rte_cryptodev_sym_capability_get(dev_id, &cap_idx);
1150*4418919fSjohnjiang if (!cap) {
1151*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Failed to get capability for cdev %u\n",
1152*4418919fSjohnjiang dev_id);
1153*4418919fSjohnjiang return -EACCES;
1154*4418919fSjohnjiang }
1155*4418919fSjohnjiang
1156*4418919fSjohnjiang if (rte_cryptodev_sym_capability_check_aead(cap,
1157*4418919fSjohnjiang aead_xform->key.length,
1158*4418919fSjohnjiang aead_xform->digest_length, aead_xform->aad_length,
1159*4418919fSjohnjiang aead_xform->iv.length) != 0) {
1160*4418919fSjohnjiang RTE_LOG(ERR, PMD,
1161*4418919fSjohnjiang "PMD %s key_len %u tag_len %u aad_len %u iv_len %u\n",
1162*4418919fSjohnjiang rte_cryptodev_name_get(dev_id),
1163*4418919fSjohnjiang aead_xform->key.length,
1164*4418919fSjohnjiang aead_xform->digest_length,
1165*4418919fSjohnjiang aead_xform->aad_length,
1166*4418919fSjohnjiang aead_xform->iv.length);
1167*4418919fSjohnjiang return -EACCES;
1168*4418919fSjohnjiang }
1169*4418919fSjohnjiang
1170*4418919fSjohnjiang return 0;
1171*4418919fSjohnjiang }
1172*4418919fSjohnjiang
1173*4418919fSjohnjiang static int
prepare_cipher_op(struct rte_crypto_op * op,struct rte_mbuf * mbuf,struct rte_cryptodev_sym_session * session,uint32_t dir,struct fips_dev_self_test_vector * vec)1174*4418919fSjohnjiang prepare_cipher_op(struct rte_crypto_op *op,
1175*4418919fSjohnjiang struct rte_mbuf *mbuf,
1176*4418919fSjohnjiang struct rte_cryptodev_sym_session *session,
1177*4418919fSjohnjiang uint32_t dir,
1178*4418919fSjohnjiang struct fips_dev_self_test_vector *vec)
1179*4418919fSjohnjiang {
1180*4418919fSjohnjiang struct rte_crypto_sym_op *sym = op->sym;
1181*4418919fSjohnjiang uint8_t *iv = rte_crypto_op_ctod_offset(op, uint8_t *, IV_OFF);
1182*4418919fSjohnjiang uint8_t *dst;
1183*4418919fSjohnjiang const uint8_t *src;
1184*4418919fSjohnjiang uint32_t len;
1185*4418919fSjohnjiang
1186*4418919fSjohnjiang if (dir == self_test_dir_enc_auth_gen) {
1187*4418919fSjohnjiang src = vec->input.data;
1188*4418919fSjohnjiang len = vec->input.len;
1189*4418919fSjohnjiang } else {
1190*4418919fSjohnjiang src = vec->output.data;
1191*4418919fSjohnjiang len = vec->output.len;
1192*4418919fSjohnjiang }
1193*4418919fSjohnjiang
1194*4418919fSjohnjiang sym->cipher.data.offset = 0;
1195*4418919fSjohnjiang memcpy(iv, vec->iv.data, vec->iv.len);
1196*4418919fSjohnjiang
1197*4418919fSjohnjiang dst = (uint8_t *)rte_pktmbuf_append(mbuf, len);
1198*4418919fSjohnjiang if (!dst) {
1199*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Error %i: MBUF too small\n", -ENOMEM);
1200*4418919fSjohnjiang return -ENOMEM;
1201*4418919fSjohnjiang }
1202*4418919fSjohnjiang
1203*4418919fSjohnjiang memcpy(dst, src, len);
1204*4418919fSjohnjiang
1205*4418919fSjohnjiang sym->cipher.data.length = len;
1206*4418919fSjohnjiang
1207*4418919fSjohnjiang rte_crypto_op_attach_sym_session(op, session);
1208*4418919fSjohnjiang
1209*4418919fSjohnjiang return 0;
1210*4418919fSjohnjiang }
1211*4418919fSjohnjiang
1212*4418919fSjohnjiang static int
prepare_auth_op(struct rte_crypto_op * op,struct rte_mbuf * mbuf,struct rte_cryptodev_sym_session * session,uint32_t dir,struct fips_dev_self_test_vector * vec)1213*4418919fSjohnjiang prepare_auth_op(struct rte_crypto_op *op,
1214*4418919fSjohnjiang struct rte_mbuf *mbuf,
1215*4418919fSjohnjiang struct rte_cryptodev_sym_session *session,
1216*4418919fSjohnjiang uint32_t dir,
1217*4418919fSjohnjiang struct fips_dev_self_test_vector *vec)
1218*4418919fSjohnjiang {
1219*4418919fSjohnjiang struct rte_crypto_sym_op *sym = op->sym;
1220*4418919fSjohnjiang uint8_t *dst;
1221*4418919fSjohnjiang
1222*4418919fSjohnjiang if (vec->input.len + vec->digest.len > RTE_MBUF_MAX_NB_SEGS) {
1223*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Error %i: Test data too long (%u).\n",
1224*4418919fSjohnjiang -ENOMEM, vec->input.len + vec->digest.len);
1225*4418919fSjohnjiang return -ENOMEM;
1226*4418919fSjohnjiang }
1227*4418919fSjohnjiang
1228*4418919fSjohnjiang sym->auth.data.offset = 0;
1229*4418919fSjohnjiang
1230*4418919fSjohnjiang dst = (uint8_t *)rte_pktmbuf_append(mbuf, vec->input.len +
1231*4418919fSjohnjiang vec->digest.len);
1232*4418919fSjohnjiang if (!dst) {
1233*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Error %i: MBUF too small\n", -ENOMEM);
1234*4418919fSjohnjiang return -ENOMEM;
1235*4418919fSjohnjiang }
1236*4418919fSjohnjiang
1237*4418919fSjohnjiang memcpy(dst, vec->input.data, vec->input.len);
1238*4418919fSjohnjiang sym->auth.data.length = vec->input.len;
1239*4418919fSjohnjiang sym->auth.digest.data = dst + vec->input.len;
1240*4418919fSjohnjiang sym->auth.digest.phys_addr = rte_pktmbuf_iova_offset(mbuf,
1241*4418919fSjohnjiang vec->input.len);
1242*4418919fSjohnjiang
1243*4418919fSjohnjiang if (dir == self_test_dir_dec_auth_verify)
1244*4418919fSjohnjiang memcpy(dst + vec->input.len, vec->digest.data, vec->digest.len);
1245*4418919fSjohnjiang
1246*4418919fSjohnjiang rte_crypto_op_attach_sym_session(op, session);
1247*4418919fSjohnjiang
1248*4418919fSjohnjiang return 0;
1249*4418919fSjohnjiang }
1250*4418919fSjohnjiang
1251*4418919fSjohnjiang static int
prepare_aead_op(struct rte_crypto_op * op,struct rte_mbuf * mbuf,struct rte_cryptodev_sym_session * session,uint32_t dir,struct fips_dev_self_test_vector * vec)1252*4418919fSjohnjiang prepare_aead_op(struct rte_crypto_op *op,
1253*4418919fSjohnjiang struct rte_mbuf *mbuf,
1254*4418919fSjohnjiang struct rte_cryptodev_sym_session *session,
1255*4418919fSjohnjiang uint32_t dir,
1256*4418919fSjohnjiang struct fips_dev_self_test_vector *vec)
1257*4418919fSjohnjiang {
1258*4418919fSjohnjiang struct rte_crypto_sym_op *sym = op->sym;
1259*4418919fSjohnjiang uint8_t *iv = rte_crypto_op_ctod_offset(op, uint8_t *, IV_OFF);
1260*4418919fSjohnjiang uint8_t *dst;
1261*4418919fSjohnjiang const uint8_t *src;
1262*4418919fSjohnjiang uint32_t len;
1263*4418919fSjohnjiang
1264*4418919fSjohnjiang if (dir == self_test_dir_enc_auth_gen) {
1265*4418919fSjohnjiang len = vec->input.len;
1266*4418919fSjohnjiang src = vec->input.data;
1267*4418919fSjohnjiang } else {
1268*4418919fSjohnjiang len = vec->output.len;
1269*4418919fSjohnjiang src = vec->output.data;
1270*4418919fSjohnjiang }
1271*4418919fSjohnjiang
1272*4418919fSjohnjiang if (vec->aead.algo == RTE_CRYPTO_AEAD_AES_CCM)
1273*4418919fSjohnjiang memcpy(iv + 1, vec->iv.data, vec->iv.len);
1274*4418919fSjohnjiang else
1275*4418919fSjohnjiang memcpy(iv, vec->iv.data, vec->iv.len);
1276*4418919fSjohnjiang
1277*4418919fSjohnjiang if (len + vec->digest.len > RTE_MBUF_MAX_NB_SEGS) {
1278*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Error %i: Test data too long (%u).\n",
1279*4418919fSjohnjiang -ENOMEM, len + vec->digest.len);
1280*4418919fSjohnjiang return -ENOMEM;
1281*4418919fSjohnjiang }
1282*4418919fSjohnjiang
1283*4418919fSjohnjiang dst = (uint8_t *)rte_pktmbuf_append(mbuf, RTE_ALIGN_CEIL(len +
1284*4418919fSjohnjiang vec->digest.len, 16));
1285*4418919fSjohnjiang if (!dst) {
1286*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Error %i: MBUF too small\n", -ENOMEM);
1287*4418919fSjohnjiang return -ENOMEM;
1288*4418919fSjohnjiang }
1289*4418919fSjohnjiang
1290*4418919fSjohnjiang sym->m_src = mbuf;
1291*4418919fSjohnjiang sym->aead.data.length = len;
1292*4418919fSjohnjiang sym->aead.data.offset = 0;
1293*4418919fSjohnjiang memcpy(dst, src, len);
1294*4418919fSjohnjiang
1295*4418919fSjohnjiang sym->aead.digest.data = dst + vec->input.len;
1296*4418919fSjohnjiang sym->aead.digest.phys_addr = rte_pktmbuf_iova_offset(mbuf,
1297*4418919fSjohnjiang vec->input.len);
1298*4418919fSjohnjiang if (dir == self_test_dir_dec_auth_verify)
1299*4418919fSjohnjiang memcpy(sym->aead.digest.data, vec->digest.data, vec->digest.len);
1300*4418919fSjohnjiang
1301*4418919fSjohnjiang len = (vec->aead.algo == RTE_CRYPTO_AEAD_AES_CCM) ?
1302*4418919fSjohnjiang (vec->aead.aad.len + AES_CCM_AAD_PAD_SIZE) :
1303*4418919fSjohnjiang vec->aead.aad.len;
1304*4418919fSjohnjiang
1305*4418919fSjohnjiang dst = rte_malloc(NULL, len, 16);
1306*4418919fSjohnjiang if (!dst) {
1307*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Error %i: Not enough memory\n", -ENOMEM);
1308*4418919fSjohnjiang return -ENOMEM;
1309*4418919fSjohnjiang }
1310*4418919fSjohnjiang
1311*4418919fSjohnjiang sym->aead.aad.data = dst;
1312*4418919fSjohnjiang sym->aead.aad.phys_addr = rte_malloc_virt2iova(dst);
1313*4418919fSjohnjiang if (vec->aead.algo == RTE_CRYPTO_AEAD_AES_CCM)
1314*4418919fSjohnjiang memcpy(dst, vec->aead.aad.data,
1315*4418919fSjohnjiang vec->aead.aad.len + AES_CCM_AAD_PAD_SIZE);
1316*4418919fSjohnjiang else
1317*4418919fSjohnjiang memcpy(dst, vec->aead.aad.data,
1318*4418919fSjohnjiang vec->aead.aad.len);
1319*4418919fSjohnjiang
1320*4418919fSjohnjiang rte_crypto_op_attach_sym_session(op, session);
1321*4418919fSjohnjiang
1322*4418919fSjohnjiang return 0;
1323*4418919fSjohnjiang }
1324*4418919fSjohnjiang
1325*4418919fSjohnjiang static int
check_cipher_result(struct rte_crypto_op * op,struct fips_dev_self_test_vector * vec,uint32_t dir)1326*4418919fSjohnjiang check_cipher_result(struct rte_crypto_op *op,
1327*4418919fSjohnjiang struct fips_dev_self_test_vector *vec,
1328*4418919fSjohnjiang uint32_t dir)
1329*4418919fSjohnjiang {
1330*4418919fSjohnjiang struct rte_mbuf *mbuf = op->sym->m_src;
1331*4418919fSjohnjiang uint8_t *data;
1332*4418919fSjohnjiang const uint8_t *src;
1333*4418919fSjohnjiang uint32_t len, src_len;
1334*4418919fSjohnjiang int ret;
1335*4418919fSjohnjiang
1336*4418919fSjohnjiang if (!mbuf)
1337*4418919fSjohnjiang return -1;
1338*4418919fSjohnjiang
1339*4418919fSjohnjiang if (dir == self_test_dir_enc_auth_gen) {
1340*4418919fSjohnjiang src = vec->output.data;
1341*4418919fSjohnjiang src_len = vec->output.len;
1342*4418919fSjohnjiang } else {
1343*4418919fSjohnjiang src = vec->input.data;
1344*4418919fSjohnjiang src_len = vec->input.len;
1345*4418919fSjohnjiang }
1346*4418919fSjohnjiang
1347*4418919fSjohnjiang GET_MBUF_DATA(data, len, mbuf);
1348*4418919fSjohnjiang if (!len)
1349*4418919fSjohnjiang return -1;
1350*4418919fSjohnjiang
1351*4418919fSjohnjiang ret = memcmp(data, src, src_len);
1352*4418919fSjohnjiang if (ret != 0)
1353*4418919fSjohnjiang return -1;
1354*4418919fSjohnjiang
1355*4418919fSjohnjiang return 0;
1356*4418919fSjohnjiang }
1357*4418919fSjohnjiang
1358*4418919fSjohnjiang static int
check_auth_result(struct rte_crypto_op * op,struct fips_dev_self_test_vector * vec,uint32_t dir)1359*4418919fSjohnjiang check_auth_result(struct rte_crypto_op *op,
1360*4418919fSjohnjiang struct fips_dev_self_test_vector *vec,
1361*4418919fSjohnjiang uint32_t dir)
1362*4418919fSjohnjiang {
1363*4418919fSjohnjiang struct rte_mbuf *mbuf = op->sym->m_src;
1364*4418919fSjohnjiang uint8_t *data;
1365*4418919fSjohnjiang uint32_t len;
1366*4418919fSjohnjiang int ret;
1367*4418919fSjohnjiang
1368*4418919fSjohnjiang if (mbuf == NULL)
1369*4418919fSjohnjiang return -1;
1370*4418919fSjohnjiang
1371*4418919fSjohnjiang GET_MBUF_DATA(data, len, mbuf);
1372*4418919fSjohnjiang if (!len)
1373*4418919fSjohnjiang return -1;
1374*4418919fSjohnjiang
1375*4418919fSjohnjiang if (dir == self_test_dir_enc_auth_gen) {
1376*4418919fSjohnjiang data += vec->input.len;
1377*4418919fSjohnjiang ret = memcmp(data, vec->digest.data, vec->digest.len);
1378*4418919fSjohnjiang if (ret != 0)
1379*4418919fSjohnjiang return -1;
1380*4418919fSjohnjiang }
1381*4418919fSjohnjiang
1382*4418919fSjohnjiang return 0;
1383*4418919fSjohnjiang }
1384*4418919fSjohnjiang
1385*4418919fSjohnjiang static int
check_aead_result(struct rte_crypto_op * op,struct fips_dev_self_test_vector * vec,uint32_t dir)1386*4418919fSjohnjiang check_aead_result(struct rte_crypto_op *op,
1387*4418919fSjohnjiang struct fips_dev_self_test_vector *vec,
1388*4418919fSjohnjiang uint32_t dir)
1389*4418919fSjohnjiang {
1390*4418919fSjohnjiang struct rte_mbuf *mbuf = op->sym->m_src;
1391*4418919fSjohnjiang uint8_t *data;
1392*4418919fSjohnjiang const uint8_t *src;
1393*4418919fSjohnjiang uint32_t len, src_len;
1394*4418919fSjohnjiang int ret;
1395*4418919fSjohnjiang
1396*4418919fSjohnjiang if (!mbuf)
1397*4418919fSjohnjiang return -1;
1398*4418919fSjohnjiang
1399*4418919fSjohnjiang if (op->sym->aead.aad.data)
1400*4418919fSjohnjiang rte_free(op->sym->aead.aad.data);
1401*4418919fSjohnjiang
1402*4418919fSjohnjiang if (dir == self_test_dir_enc_auth_gen) {
1403*4418919fSjohnjiang src = vec->output.data;
1404*4418919fSjohnjiang src_len = vec->output.len;
1405*4418919fSjohnjiang } else {
1406*4418919fSjohnjiang src = vec->input.data;
1407*4418919fSjohnjiang src_len = vec->input.len;
1408*4418919fSjohnjiang }
1409*4418919fSjohnjiang
1410*4418919fSjohnjiang GET_MBUF_DATA(data, len, mbuf);
1411*4418919fSjohnjiang if (!len)
1412*4418919fSjohnjiang return -1;
1413*4418919fSjohnjiang
1414*4418919fSjohnjiang ret = memcmp(data, src, src_len);
1415*4418919fSjohnjiang if (ret != 0)
1416*4418919fSjohnjiang return -1;
1417*4418919fSjohnjiang
1418*4418919fSjohnjiang if (dir == self_test_dir_enc_auth_gen) {
1419*4418919fSjohnjiang data += src_len;
1420*4418919fSjohnjiang ret = memcmp(data, vec->digest.data, vec->digest.len);
1421*4418919fSjohnjiang if (ret != 0)
1422*4418919fSjohnjiang return -1;
1423*4418919fSjohnjiang }
1424*4418919fSjohnjiang
1425*4418919fSjohnjiang return 0;
1426*4418919fSjohnjiang }
1427*4418919fSjohnjiang
1428*4418919fSjohnjiang static void
init_test_op(struct fips_dev_self_test_ops * test_ops,struct fips_dev_self_test_vector * vec)1429*4418919fSjohnjiang init_test_op(struct fips_dev_self_test_ops *test_ops,
1430*4418919fSjohnjiang struct fips_dev_self_test_vector *vec)
1431*4418919fSjohnjiang {
1432*4418919fSjohnjiang if (test_ops->last_operation_type == vec->operation_type)
1433*4418919fSjohnjiang return;
1434*4418919fSjohnjiang
1435*4418919fSjohnjiang switch (vec->operation_type) {
1436*4418919fSjohnjiang case RTE_CRYPTO_SYM_XFORM_CIPHER:
1437*4418919fSjohnjiang test_ops->prepare_xform = prepare_cipher_xform;
1438*4418919fSjohnjiang test_ops->prepare_op = prepare_cipher_op;
1439*4418919fSjohnjiang test_ops->check_result = check_cipher_result;
1440*4418919fSjohnjiang break;
1441*4418919fSjohnjiang case RTE_CRYPTO_SYM_XFORM_AUTH:
1442*4418919fSjohnjiang test_ops->prepare_xform = prepare_auth_xform;
1443*4418919fSjohnjiang test_ops->prepare_op = prepare_auth_op;
1444*4418919fSjohnjiang test_ops->check_result = check_auth_result;
1445*4418919fSjohnjiang break;
1446*4418919fSjohnjiang case RTE_CRYPTO_SYM_XFORM_AEAD:
1447*4418919fSjohnjiang test_ops->prepare_xform = prepare_aead_xform;
1448*4418919fSjohnjiang test_ops->prepare_op = prepare_aead_op;
1449*4418919fSjohnjiang test_ops->check_result = check_aead_result;
1450*4418919fSjohnjiang break;
1451*4418919fSjohnjiang default:
1452*4418919fSjohnjiang break;
1453*4418919fSjohnjiang }
1454*4418919fSjohnjiang
1455*4418919fSjohnjiang test_ops->last_operation_type = vec->operation_type;
1456*4418919fSjohnjiang }
1457*4418919fSjohnjiang
1458*4418919fSjohnjiang static int
run_single_test(uint8_t dev_id,struct fips_dev_self_test_vector * vec,const struct fips_dev_self_test_ops * test_ops,struct fips_dev_auto_test_env * env,uint32_t dir,uint32_t negative_test)1459*4418919fSjohnjiang run_single_test(uint8_t dev_id,
1460*4418919fSjohnjiang struct fips_dev_self_test_vector *vec,
1461*4418919fSjohnjiang const struct fips_dev_self_test_ops *test_ops,
1462*4418919fSjohnjiang struct fips_dev_auto_test_env *env,
1463*4418919fSjohnjiang uint32_t dir,
1464*4418919fSjohnjiang uint32_t negative_test)
1465*4418919fSjohnjiang {
1466*4418919fSjohnjiang struct rte_crypto_sym_xform xform;
1467*4418919fSjohnjiang struct rte_cryptodev_sym_session *sess;
1468*4418919fSjohnjiang uint16_t n_deqd;
1469*4418919fSjohnjiang uint8_t key[256];
1470*4418919fSjohnjiang int ret;
1471*4418919fSjohnjiang
1472*4418919fSjohnjiang __rte_crypto_op_reset(env->op, RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1473*4418919fSjohnjiang rte_pktmbuf_reset(env->mbuf);
1474*4418919fSjohnjiang env->op->sym->m_src = env->mbuf;
1475*4418919fSjohnjiang
1476*4418919fSjohnjiang ret = test_ops->prepare_xform(dev_id, &xform, vec, dir, key,
1477*4418919fSjohnjiang negative_test);
1478*4418919fSjohnjiang if (ret < 0) {
1479*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Error %i: Prepare Xform\n", ret);
1480*4418919fSjohnjiang return ret;
1481*4418919fSjohnjiang }
1482*4418919fSjohnjiang
1483*4418919fSjohnjiang sess = rte_cryptodev_sym_session_create(env->sess_pool);
1484*4418919fSjohnjiang if (!sess)
1485*4418919fSjohnjiang return -ENOMEM;
1486*4418919fSjohnjiang
1487*4418919fSjohnjiang ret = rte_cryptodev_sym_session_init(dev_id,
1488*4418919fSjohnjiang sess, &xform, env->sess_priv_pool);
1489*4418919fSjohnjiang if (ret < 0) {
1490*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Error %i: Init session\n", ret);
1491*4418919fSjohnjiang return ret;
1492*4418919fSjohnjiang }
1493*4418919fSjohnjiang
1494*4418919fSjohnjiang ret = test_ops->prepare_op(env->op, env->mbuf, sess, dir, vec);
1495*4418919fSjohnjiang if (ret < 0) {
1496*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Error %i: Prepare op\n", ret);
1497*4418919fSjohnjiang return ret;
1498*4418919fSjohnjiang }
1499*4418919fSjohnjiang
1500*4418919fSjohnjiang if (rte_cryptodev_enqueue_burst(dev_id, 0, &env->op, 1) < 1) {
1501*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Error: Failed enqueue\n");
1502*4418919fSjohnjiang return ret;
1503*4418919fSjohnjiang }
1504*4418919fSjohnjiang
1505*4418919fSjohnjiang do {
1506*4418919fSjohnjiang struct rte_crypto_op *deqd_op;
1507*4418919fSjohnjiang
1508*4418919fSjohnjiang n_deqd = rte_cryptodev_dequeue_burst(dev_id, 0, &deqd_op,
1509*4418919fSjohnjiang 1);
1510*4418919fSjohnjiang } while (n_deqd == 0);
1511*4418919fSjohnjiang
1512*4418919fSjohnjiang rte_cryptodev_sym_session_clear(dev_id, sess);
1513*4418919fSjohnjiang rte_cryptodev_sym_session_free(sess);
1514*4418919fSjohnjiang
1515*4418919fSjohnjiang if (env->op->status != RTE_CRYPTO_OP_STATUS_SUCCESS)
1516*4418919fSjohnjiang return -1;
1517*4418919fSjohnjiang
1518*4418919fSjohnjiang return test_ops->check_result(env->op, vec, dir);
1519*4418919fSjohnjiang }
1520*4418919fSjohnjiang
1521*4418919fSjohnjiang
1522*4418919fSjohnjiang static void
fips_dev_auto_test_uninit(uint8_t dev_id,struct fips_dev_auto_test_env * env)1523*4418919fSjohnjiang fips_dev_auto_test_uninit(uint8_t dev_id,
1524*4418919fSjohnjiang struct fips_dev_auto_test_env *env)
1525*4418919fSjohnjiang {
1526*4418919fSjohnjiang struct rte_cryptodev *dev = rte_cryptodev_pmd_get_dev(dev_id);
1527*4418919fSjohnjiang uint32_t i;
1528*4418919fSjohnjiang
1529*4418919fSjohnjiang if (!dev)
1530*4418919fSjohnjiang return;
1531*4418919fSjohnjiang
1532*4418919fSjohnjiang if (env->mbuf)
1533*4418919fSjohnjiang rte_pktmbuf_free(env->mbuf);
1534*4418919fSjohnjiang if (env->op)
1535*4418919fSjohnjiang rte_crypto_op_free(env->op);
1536*4418919fSjohnjiang if (env->mpool)
1537*4418919fSjohnjiang rte_mempool_free(env->mpool);
1538*4418919fSjohnjiang if (env->op_pool)
1539*4418919fSjohnjiang rte_mempool_free(env->op_pool);
1540*4418919fSjohnjiang if (env->sess_pool)
1541*4418919fSjohnjiang rte_mempool_free(env->sess_pool);
1542*4418919fSjohnjiang if (env->sess_priv_pool)
1543*4418919fSjohnjiang rte_mempool_free(env->sess_priv_pool);
1544*4418919fSjohnjiang
1545*4418919fSjohnjiang if (dev->data->dev_started)
1546*4418919fSjohnjiang rte_cryptodev_stop(dev_id);
1547*4418919fSjohnjiang
1548*4418919fSjohnjiang if (dev->data->nb_queue_pairs) {
1549*4418919fSjohnjiang for (i = 0; i < dev->data->nb_queue_pairs; i++)
1550*4418919fSjohnjiang (*dev->dev_ops->queue_pair_release)(dev, i);
1551*4418919fSjohnjiang dev->data->nb_queue_pairs = 0;
1552*4418919fSjohnjiang rte_free(dev->data->queue_pairs);
1553*4418919fSjohnjiang dev->data->queue_pairs = NULL;
1554*4418919fSjohnjiang }
1555*4418919fSjohnjiang }
1556*4418919fSjohnjiang
1557*4418919fSjohnjiang static int
fips_dev_auto_test_init(uint8_t dev_id,struct fips_dev_auto_test_env * env)1558*4418919fSjohnjiang fips_dev_auto_test_init(uint8_t dev_id, struct fips_dev_auto_test_env *env)
1559*4418919fSjohnjiang {
1560*4418919fSjohnjiang struct rte_cryptodev_qp_conf qp_conf = {128, NULL, NULL};
1561*4418919fSjohnjiang uint32_t sess_sz = rte_cryptodev_sym_get_private_session_size(dev_id);
1562*4418919fSjohnjiang struct rte_cryptodev_config conf;
1563*4418919fSjohnjiang char name[128];
1564*4418919fSjohnjiang int ret;
1565*4418919fSjohnjiang
1566*4418919fSjohnjiang conf.socket_id = rte_cryptodev_socket_id(dev_id);
1567*4418919fSjohnjiang conf.nb_queue_pairs = 1;
1568*4418919fSjohnjiang conf.ff_disable = 0;
1569*4418919fSjohnjiang
1570*4418919fSjohnjiang ret = rte_cryptodev_configure(dev_id, &conf);
1571*4418919fSjohnjiang if (ret < 0)
1572*4418919fSjohnjiang return ret;
1573*4418919fSjohnjiang
1574*4418919fSjohnjiang memset(name, 0, 128);
1575*4418919fSjohnjiang snprintf(name, 128, "%s%u", "SELF_TEST_MEMPOOL", dev_id);
1576*4418919fSjohnjiang
1577*4418919fSjohnjiang memset(env, 0, sizeof(*env));
1578*4418919fSjohnjiang
1579*4418919fSjohnjiang env->mpool = rte_pktmbuf_pool_create(name, 128, 0, 0,
1580*4418919fSjohnjiang UINT16_MAX, rte_cryptodev_socket_id(dev_id));
1581*4418919fSjohnjiang if (!env->mpool) {
1582*4418919fSjohnjiang ret = -ENOMEM;
1583*4418919fSjohnjiang goto error_exit;
1584*4418919fSjohnjiang }
1585*4418919fSjohnjiang
1586*4418919fSjohnjiang memset(name, 0, 128);
1587*4418919fSjohnjiang snprintf(name, 128, "%s%u", "SELF_TEST_OP_POOL", dev_id);
1588*4418919fSjohnjiang
1589*4418919fSjohnjiang env->op_pool = rte_crypto_op_pool_create(
1590*4418919fSjohnjiang name,
1591*4418919fSjohnjiang RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1592*4418919fSjohnjiang 16, 0,
1593*4418919fSjohnjiang 16,
1594*4418919fSjohnjiang rte_socket_id());
1595*4418919fSjohnjiang if (!env->op_pool) {
1596*4418919fSjohnjiang ret = -ENOMEM;
1597*4418919fSjohnjiang goto error_exit;
1598*4418919fSjohnjiang }
1599*4418919fSjohnjiang
1600*4418919fSjohnjiang memset(name, 0, 128);
1601*4418919fSjohnjiang snprintf(name, 128, "%s%u", "SELF_TEST_SESS_POOL", dev_id);
1602*4418919fSjohnjiang
1603*4418919fSjohnjiang env->sess_pool = rte_cryptodev_sym_session_pool_create(name,
1604*4418919fSjohnjiang 128, 0, 0, 0, rte_cryptodev_socket_id(dev_id));
1605*4418919fSjohnjiang if (!env->sess_pool) {
1606*4418919fSjohnjiang ret = -ENOMEM;
1607*4418919fSjohnjiang goto error_exit;
1608*4418919fSjohnjiang }
1609*4418919fSjohnjiang
1610*4418919fSjohnjiang memset(name, 0, 128);
1611*4418919fSjohnjiang snprintf(name, 128, "%s%u", "SELF_TEST_SESS_PRIV_POOL", dev_id);
1612*4418919fSjohnjiang
1613*4418919fSjohnjiang env->sess_priv_pool = rte_mempool_create(name,
1614*4418919fSjohnjiang 128, sess_sz, 0, 0, NULL, NULL, NULL,
1615*4418919fSjohnjiang NULL, rte_cryptodev_socket_id(dev_id), 0);
1616*4418919fSjohnjiang if (!env->sess_priv_pool) {
1617*4418919fSjohnjiang ret = -ENOMEM;
1618*4418919fSjohnjiang goto error_exit;
1619*4418919fSjohnjiang }
1620*4418919fSjohnjiang
1621*4418919fSjohnjiang qp_conf.mp_session = env->sess_pool;
1622*4418919fSjohnjiang qp_conf.mp_session_private = env->sess_priv_pool;
1623*4418919fSjohnjiang
1624*4418919fSjohnjiang ret = rte_cryptodev_queue_pair_setup(dev_id, 0, &qp_conf,
1625*4418919fSjohnjiang rte_cryptodev_socket_id(dev_id));
1626*4418919fSjohnjiang if (ret < 0)
1627*4418919fSjohnjiang goto error_exit;
1628*4418919fSjohnjiang
1629*4418919fSjohnjiang env->mbuf = rte_pktmbuf_alloc(env->mpool);
1630*4418919fSjohnjiang if (!env->mbuf) {
1631*4418919fSjohnjiang ret = -ENOMEM;
1632*4418919fSjohnjiang goto error_exit;
1633*4418919fSjohnjiang }
1634*4418919fSjohnjiang
1635*4418919fSjohnjiang env->op = rte_crypto_op_alloc(env->op_pool,
1636*4418919fSjohnjiang RTE_CRYPTO_OP_TYPE_SYMMETRIC);
1637*4418919fSjohnjiang if (!env->op) {
1638*4418919fSjohnjiang ret = -ENOMEM;
1639*4418919fSjohnjiang goto error_exit;
1640*4418919fSjohnjiang }
1641*4418919fSjohnjiang
1642*4418919fSjohnjiang ret = rte_cryptodev_start(dev_id);
1643*4418919fSjohnjiang if (ret < 0)
1644*4418919fSjohnjiang goto error_exit;
1645*4418919fSjohnjiang
1646*4418919fSjohnjiang
1647*4418919fSjohnjiang return 0;
1648*4418919fSjohnjiang
1649*4418919fSjohnjiang error_exit:
1650*4418919fSjohnjiang
1651*4418919fSjohnjiang fips_dev_auto_test_uninit(dev_id, env);
1652*4418919fSjohnjiang
1653*4418919fSjohnjiang return ret;
1654*4418919fSjohnjiang }
1655*4418919fSjohnjiang
1656*4418919fSjohnjiang int
fips_dev_self_test(uint8_t dev_id,struct fips_dev_broken_test_config * config)1657*4418919fSjohnjiang fips_dev_self_test(uint8_t dev_id,
1658*4418919fSjohnjiang struct fips_dev_broken_test_config *config)
1659*4418919fSjohnjiang {
1660*4418919fSjohnjiang struct fips_dev_self_test_ops test_ops = {0};
1661*4418919fSjohnjiang struct fips_dev_auto_test_env env;
1662*4418919fSjohnjiang uint32_t i, j, negative_test;
1663*4418919fSjohnjiang int ret;
1664*4418919fSjohnjiang
1665*4418919fSjohnjiang ret = fips_dev_auto_test_init(dev_id, &env);
1666*4418919fSjohnjiang if (ret < 0) {
1667*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Failed to init self-test for PMD %u\n",
1668*4418919fSjohnjiang dev_id);
1669*4418919fSjohnjiang return ret;
1670*4418919fSjohnjiang }
1671*4418919fSjohnjiang
1672*4418919fSjohnjiang for (i = 0; i < RTE_DIM(self_test_vectors); i++) {
1673*4418919fSjohnjiang struct fips_dev_self_test_vector *vec =
1674*4418919fSjohnjiang self_test_vectors[i];
1675*4418919fSjohnjiang
1676*4418919fSjohnjiang init_test_op(&test_ops, vec);
1677*4418919fSjohnjiang
1678*4418919fSjohnjiang for (j = 0; j < self_test_dir_max; j++) {
1679*4418919fSjohnjiang if (!config)
1680*4418919fSjohnjiang negative_test = 0;
1681*4418919fSjohnjiang else {
1682*4418919fSjohnjiang if ((config->expect_fail_test_idx == i) &&
1683*4418919fSjohnjiang (config->expect_fail_dir == j))
1684*4418919fSjohnjiang negative_test = 1;
1685*4418919fSjohnjiang else
1686*4418919fSjohnjiang negative_test = 0;
1687*4418919fSjohnjiang }
1688*4418919fSjohnjiang
1689*4418919fSjohnjiang RTE_LOG(INFO, PMD, "Testing (ID %u) %s %s%s...\n",
1690*4418919fSjohnjiang i,
1691*4418919fSjohnjiang vec->name,
1692*4418919fSjohnjiang j == self_test_dir_enc_auth_gen ?
1693*4418919fSjohnjiang "Encrypt" : "Decrypt",
1694*4418919fSjohnjiang negative_test ? " (Expect Fail)" : "");
1695*4418919fSjohnjiang
1696*4418919fSjohnjiang ret = run_single_test(dev_id, vec, &test_ops,
1697*4418919fSjohnjiang &env, j, negative_test);
1698*4418919fSjohnjiang switch (ret) {
1699*4418919fSjohnjiang case 0:
1700*4418919fSjohnjiang if (!negative_test)
1701*4418919fSjohnjiang break;
1702*4418919fSjohnjiang ret = -1;
1703*4418919fSjohnjiang RTE_LOG(ERR, PMD, "PMD %u Failed test %s %s\n",
1704*4418919fSjohnjiang dev_id, vec->name,
1705*4418919fSjohnjiang j == self_test_dir_enc_auth_gen ?
1706*4418919fSjohnjiang "Encrypt" : "Decrypt");
1707*4418919fSjohnjiang goto error_exit;
1708*4418919fSjohnjiang case -EACCES:
1709*4418919fSjohnjiang RTE_LOG(ERR, PMD, "Not supported by %s. Skip\n",
1710*4418919fSjohnjiang rte_cryptodev_name_get(dev_id));
1711*4418919fSjohnjiang ret = 0;
1712*4418919fSjohnjiang break;
1713*4418919fSjohnjiang default:
1714*4418919fSjohnjiang RTE_LOG(ERR, PMD, "PMD %u Failed test %s %s\n",
1715*4418919fSjohnjiang dev_id, vec->name,
1716*4418919fSjohnjiang j == self_test_dir_enc_auth_gen ?
1717*4418919fSjohnjiang "Encrypt" : "Decrypt");
1718*4418919fSjohnjiang goto error_exit;
1719*4418919fSjohnjiang }
1720*4418919fSjohnjiang }
1721*4418919fSjohnjiang }
1722*4418919fSjohnjiang
1723*4418919fSjohnjiang error_exit:
1724*4418919fSjohnjiang fips_dev_auto_test_uninit(dev_id, &env);
1725*4418919fSjohnjiang
1726*4418919fSjohnjiang if (ret == 0) {
1727*4418919fSjohnjiang RTE_LOG(INFO, PMD, "PMD %u finished self-test successfully\n",
1728*4418919fSjohnjiang dev_id);
1729*4418919fSjohnjiang }
1730*4418919fSjohnjiang
1731*4418919fSjohnjiang return ret;
1732*4418919fSjohnjiang }
1733