1*42600bbcSGagandeep Singh /* SPDX-License-Identifier: BSD-3-Clause
2*42600bbcSGagandeep Singh * Copyright 2017-2018 NXP
3*42600bbcSGagandeep Singh */
4*42600bbcSGagandeep Singh
5*42600bbcSGagandeep Singh #include <caam_jr_capabilities.h>
6*42600bbcSGagandeep Singh
7*42600bbcSGagandeep Singh static const struct rte_cryptodev_capabilities caam_jr_capabilities[] = {
8*42600bbcSGagandeep Singh { /* MD5 HMAC */
9*42600bbcSGagandeep Singh .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
10*42600bbcSGagandeep Singh {.sym = {
11*42600bbcSGagandeep Singh .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
12*42600bbcSGagandeep Singh {.auth = {
13*42600bbcSGagandeep Singh .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
14*42600bbcSGagandeep Singh .block_size = 64,
15*42600bbcSGagandeep Singh .key_size = {
16*42600bbcSGagandeep Singh .min = 1,
17*42600bbcSGagandeep Singh .max = 64,
18*42600bbcSGagandeep Singh .increment = 1
19*42600bbcSGagandeep Singh },
20*42600bbcSGagandeep Singh .digest_size = {
21*42600bbcSGagandeep Singh .min = 1,
22*42600bbcSGagandeep Singh .max = 16,
23*42600bbcSGagandeep Singh .increment = 1
24*42600bbcSGagandeep Singh },
25*42600bbcSGagandeep Singh .iv_size = { 0 }
26*42600bbcSGagandeep Singh }, }
27*42600bbcSGagandeep Singh }, }
28*42600bbcSGagandeep Singh },
29*42600bbcSGagandeep Singh { /* SHA1 HMAC */
30*42600bbcSGagandeep Singh .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
31*42600bbcSGagandeep Singh {.sym = {
32*42600bbcSGagandeep Singh .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
33*42600bbcSGagandeep Singh {.auth = {
34*42600bbcSGagandeep Singh .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
35*42600bbcSGagandeep Singh .block_size = 64,
36*42600bbcSGagandeep Singh .key_size = {
37*42600bbcSGagandeep Singh .min = 1,
38*42600bbcSGagandeep Singh .max = 64,
39*42600bbcSGagandeep Singh .increment = 1
40*42600bbcSGagandeep Singh },
41*42600bbcSGagandeep Singh .digest_size = {
42*42600bbcSGagandeep Singh .min = 1,
43*42600bbcSGagandeep Singh .max = 20,
44*42600bbcSGagandeep Singh .increment = 1
45*42600bbcSGagandeep Singh },
46*42600bbcSGagandeep Singh .iv_size = { 0 }
47*42600bbcSGagandeep Singh }, }
48*42600bbcSGagandeep Singh }, }
49*42600bbcSGagandeep Singh },
50*42600bbcSGagandeep Singh { /* SHA224 HMAC */
51*42600bbcSGagandeep Singh .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
52*42600bbcSGagandeep Singh {.sym = {
53*42600bbcSGagandeep Singh .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
54*42600bbcSGagandeep Singh {.auth = {
55*42600bbcSGagandeep Singh .algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
56*42600bbcSGagandeep Singh .block_size = 64,
57*42600bbcSGagandeep Singh .key_size = {
58*42600bbcSGagandeep Singh .min = 1,
59*42600bbcSGagandeep Singh .max = 64,
60*42600bbcSGagandeep Singh .increment = 1
61*42600bbcSGagandeep Singh },
62*42600bbcSGagandeep Singh .digest_size = {
63*42600bbcSGagandeep Singh .min = 1,
64*42600bbcSGagandeep Singh .max = 28,
65*42600bbcSGagandeep Singh .increment = 1
66*42600bbcSGagandeep Singh },
67*42600bbcSGagandeep Singh .iv_size = { 0 }
68*42600bbcSGagandeep Singh }, }
69*42600bbcSGagandeep Singh }, }
70*42600bbcSGagandeep Singh },
71*42600bbcSGagandeep Singh { /* SHA256 HMAC */
72*42600bbcSGagandeep Singh .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
73*42600bbcSGagandeep Singh {.sym = {
74*42600bbcSGagandeep Singh .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
75*42600bbcSGagandeep Singh {.auth = {
76*42600bbcSGagandeep Singh .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
77*42600bbcSGagandeep Singh .block_size = 64,
78*42600bbcSGagandeep Singh .key_size = {
79*42600bbcSGagandeep Singh .min = 1,
80*42600bbcSGagandeep Singh .max = 64,
81*42600bbcSGagandeep Singh .increment = 1
82*42600bbcSGagandeep Singh },
83*42600bbcSGagandeep Singh .digest_size = {
84*42600bbcSGagandeep Singh .min = 1,
85*42600bbcSGagandeep Singh .max = 32,
86*42600bbcSGagandeep Singh .increment = 1
87*42600bbcSGagandeep Singh },
88*42600bbcSGagandeep Singh .iv_size = { 0 }
89*42600bbcSGagandeep Singh }, }
90*42600bbcSGagandeep Singh }, }
91*42600bbcSGagandeep Singh },
92*42600bbcSGagandeep Singh { /* SHA384 HMAC */
93*42600bbcSGagandeep Singh .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
94*42600bbcSGagandeep Singh {.sym = {
95*42600bbcSGagandeep Singh .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
96*42600bbcSGagandeep Singh {.auth = {
97*42600bbcSGagandeep Singh .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
98*42600bbcSGagandeep Singh .block_size = 128,
99*42600bbcSGagandeep Singh .key_size = {
100*42600bbcSGagandeep Singh .min = 1,
101*42600bbcSGagandeep Singh .max = 128,
102*42600bbcSGagandeep Singh .increment = 1
103*42600bbcSGagandeep Singh },
104*42600bbcSGagandeep Singh .digest_size = {
105*42600bbcSGagandeep Singh .min = 1,
106*42600bbcSGagandeep Singh .max = 48,
107*42600bbcSGagandeep Singh .increment = 1
108*42600bbcSGagandeep Singh },
109*42600bbcSGagandeep Singh .iv_size = { 0 }
110*42600bbcSGagandeep Singh }, }
111*42600bbcSGagandeep Singh }, }
112*42600bbcSGagandeep Singh },
113*42600bbcSGagandeep Singh { /* SHA512 HMAC */
114*42600bbcSGagandeep Singh .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
115*42600bbcSGagandeep Singh {.sym = {
116*42600bbcSGagandeep Singh .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
117*42600bbcSGagandeep Singh {.auth = {
118*42600bbcSGagandeep Singh .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
119*42600bbcSGagandeep Singh .block_size = 128,
120*42600bbcSGagandeep Singh .key_size = {
121*42600bbcSGagandeep Singh .min = 1,
122*42600bbcSGagandeep Singh .max = 128,
123*42600bbcSGagandeep Singh .increment = 1
124*42600bbcSGagandeep Singh },
125*42600bbcSGagandeep Singh .digest_size = {
126*42600bbcSGagandeep Singh .min = 1,
127*42600bbcSGagandeep Singh .max = 64,
128*42600bbcSGagandeep Singh .increment = 1
129*42600bbcSGagandeep Singh },
130*42600bbcSGagandeep Singh .iv_size = { 0 }
131*42600bbcSGagandeep Singh }, }
132*42600bbcSGagandeep Singh }, }
133*42600bbcSGagandeep Singh },
134*42600bbcSGagandeep Singh { /* AES GCM */
135*42600bbcSGagandeep Singh .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
136*42600bbcSGagandeep Singh {.sym = {
137*42600bbcSGagandeep Singh .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
138*42600bbcSGagandeep Singh {.aead = {
139*42600bbcSGagandeep Singh .algo = RTE_CRYPTO_AEAD_AES_GCM,
140*42600bbcSGagandeep Singh .block_size = 16,
141*42600bbcSGagandeep Singh .key_size = {
142*42600bbcSGagandeep Singh .min = 16,
143*42600bbcSGagandeep Singh .max = 32,
144*42600bbcSGagandeep Singh .increment = 8
145*42600bbcSGagandeep Singh },
146*42600bbcSGagandeep Singh .digest_size = {
147*42600bbcSGagandeep Singh .min = 8,
148*42600bbcSGagandeep Singh .max = 16,
149*42600bbcSGagandeep Singh .increment = 4
150*42600bbcSGagandeep Singh },
151*42600bbcSGagandeep Singh .aad_size = {
152*42600bbcSGagandeep Singh .min = 0,
153*42600bbcSGagandeep Singh .max = 240,
154*42600bbcSGagandeep Singh .increment = 1
155*42600bbcSGagandeep Singh },
156*42600bbcSGagandeep Singh .iv_size = {
157*42600bbcSGagandeep Singh .min = 12,
158*42600bbcSGagandeep Singh .max = 12,
159*42600bbcSGagandeep Singh .increment = 0
160*42600bbcSGagandeep Singh },
161*42600bbcSGagandeep Singh }, }
162*42600bbcSGagandeep Singh }, }
163*42600bbcSGagandeep Singh },
164*42600bbcSGagandeep Singh { /* AES CBC */
165*42600bbcSGagandeep Singh .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
166*42600bbcSGagandeep Singh {.sym = {
167*42600bbcSGagandeep Singh .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
168*42600bbcSGagandeep Singh {.cipher = {
169*42600bbcSGagandeep Singh .algo = RTE_CRYPTO_CIPHER_AES_CBC,
170*42600bbcSGagandeep Singh .block_size = 16,
171*42600bbcSGagandeep Singh .key_size = {
172*42600bbcSGagandeep Singh .min = 16,
173*42600bbcSGagandeep Singh .max = 32,
174*42600bbcSGagandeep Singh .increment = 8
175*42600bbcSGagandeep Singh },
176*42600bbcSGagandeep Singh .iv_size = {
177*42600bbcSGagandeep Singh .min = 16,
178*42600bbcSGagandeep Singh .max = 16,
179*42600bbcSGagandeep Singh .increment = 0
180*42600bbcSGagandeep Singh }
181*42600bbcSGagandeep Singh }, }
182*42600bbcSGagandeep Singh }, }
183*42600bbcSGagandeep Singh },
184*42600bbcSGagandeep Singh { /* AES CTR */
185*42600bbcSGagandeep Singh .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
186*42600bbcSGagandeep Singh {.sym = {
187*42600bbcSGagandeep Singh .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
188*42600bbcSGagandeep Singh {.cipher = {
189*42600bbcSGagandeep Singh .algo = RTE_CRYPTO_CIPHER_AES_CTR,
190*42600bbcSGagandeep Singh .block_size = 16,
191*42600bbcSGagandeep Singh .key_size = {
192*42600bbcSGagandeep Singh .min = 16,
193*42600bbcSGagandeep Singh .max = 32,
194*42600bbcSGagandeep Singh .increment = 8
195*42600bbcSGagandeep Singh },
196*42600bbcSGagandeep Singh .iv_size = {
197*42600bbcSGagandeep Singh .min = 16,
198*42600bbcSGagandeep Singh .max = 16,
199*42600bbcSGagandeep Singh .increment = 0
200*42600bbcSGagandeep Singh }
201*42600bbcSGagandeep Singh }, }
202*42600bbcSGagandeep Singh }, }
203*42600bbcSGagandeep Singh },
204*42600bbcSGagandeep Singh { /* 3DES CBC */
205*42600bbcSGagandeep Singh .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
206*42600bbcSGagandeep Singh {.sym = {
207*42600bbcSGagandeep Singh .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
208*42600bbcSGagandeep Singh {.cipher = {
209*42600bbcSGagandeep Singh .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
210*42600bbcSGagandeep Singh .block_size = 8,
211*42600bbcSGagandeep Singh .key_size = {
212*42600bbcSGagandeep Singh .min = 16,
213*42600bbcSGagandeep Singh .max = 24,
214*42600bbcSGagandeep Singh .increment = 8
215*42600bbcSGagandeep Singh },
216*42600bbcSGagandeep Singh .iv_size = {
217*42600bbcSGagandeep Singh .min = 8,
218*42600bbcSGagandeep Singh .max = 8,
219*42600bbcSGagandeep Singh .increment = 0
220*42600bbcSGagandeep Singh }
221*42600bbcSGagandeep Singh }, }
222*42600bbcSGagandeep Singh }, }
223*42600bbcSGagandeep Singh },
224*42600bbcSGagandeep Singh
225*42600bbcSGagandeep Singh RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
226*42600bbcSGagandeep Singh };
227*42600bbcSGagandeep Singh
228*42600bbcSGagandeep Singh static const struct rte_security_capability caam_jr_security_cap[] = {
229*42600bbcSGagandeep Singh { /* IPsec Lookaside Protocol offload ESP Transport Egress */
230*42600bbcSGagandeep Singh .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
231*42600bbcSGagandeep Singh .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
232*42600bbcSGagandeep Singh .ipsec = {
233*42600bbcSGagandeep Singh .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
234*42600bbcSGagandeep Singh .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
235*42600bbcSGagandeep Singh .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
236*42600bbcSGagandeep Singh .options = { 0 }
237*42600bbcSGagandeep Singh },
238*42600bbcSGagandeep Singh .crypto_capabilities = caam_jr_capabilities
239*42600bbcSGagandeep Singh },
240*42600bbcSGagandeep Singh { /* IPsec Lookaside Protocol offload ESP Tunnel Ingress */
241*42600bbcSGagandeep Singh .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
242*42600bbcSGagandeep Singh .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
243*42600bbcSGagandeep Singh .ipsec = {
244*42600bbcSGagandeep Singh .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
245*42600bbcSGagandeep Singh .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
246*42600bbcSGagandeep Singh .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
247*42600bbcSGagandeep Singh .options = { 0 }
248*42600bbcSGagandeep Singh },
249*42600bbcSGagandeep Singh .crypto_capabilities = caam_jr_capabilities
250*42600bbcSGagandeep Singh },
251*42600bbcSGagandeep Singh {
252*42600bbcSGagandeep Singh .action = RTE_SECURITY_ACTION_TYPE_NONE
253*42600bbcSGagandeep Singh }
254*42600bbcSGagandeep Singh };
255*42600bbcSGagandeep Singh
256*42600bbcSGagandeep Singh const struct rte_cryptodev_capabilities *
caam_jr_get_cryptodev_capabilities(void)257*42600bbcSGagandeep Singh caam_jr_get_cryptodev_capabilities(void)
258*42600bbcSGagandeep Singh {
259*42600bbcSGagandeep Singh return caam_jr_capabilities;
260*42600bbcSGagandeep Singh }
261*42600bbcSGagandeep Singh
262*42600bbcSGagandeep Singh const struct rte_security_capability *
caam_jr_get_security_capabilities(void * device __rte_unused)263*42600bbcSGagandeep Singh caam_jr_get_security_capabilities(void *device __rte_unused)
264*42600bbcSGagandeep Singh {
265*42600bbcSGagandeep Singh return caam_jr_security_cap;
266*42600bbcSGagandeep Singh }
267