Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(C) 2021 Marvell.
3 : : */
4 : :
5 : : #include <cryptodev_pmd.h>
6 : : #include <rte_security.h>
7 : :
8 : : #include "roc_api.h"
9 : :
10 : : #include "cnxk_cryptodev.h"
11 : : #include "cnxk_cryptodev_capabilities.h"
12 : : #include "cnxk_security_ar.h"
13 : :
14 : : #define CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, name) \
15 : : do { \
16 : : if ((hw_caps[CPT_ENG_TYPE_SE].name) || \
17 : : (hw_caps[CPT_ENG_TYPE_IE].name) || \
18 : : (hw_caps[CPT_ENG_TYPE_AE].name)) \
19 : : cpt_caps_add(cnxk_caps, cur_pos, caps_##name, \
20 : : RTE_DIM(caps_##name)); \
21 : : } while (0)
22 : :
23 : : #define SEC_IPSEC_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, name) \
24 : : do { \
25 : : if ((hw_caps[CPT_ENG_TYPE_SE].name) || \
26 : : (hw_caps[CPT_ENG_TYPE_IE].name) || \
27 : : (hw_caps[CPT_ENG_TYPE_AE].name)) \
28 : : sec_ipsec_caps_add(cnxk_caps, cur_pos, \
29 : : sec_ipsec_caps_##name, \
30 : : RTE_DIM(sec_ipsec_caps_##name)); \
31 : : } while (0)
32 : :
33 : : #define SEC_TLS12_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, name) \
34 : : do { \
35 : : if ((hw_caps[CPT_ENG_TYPE_SE].name) || \
36 : : (hw_caps[CPT_ENG_TYPE_IE].name) || \
37 : : (hw_caps[CPT_ENG_TYPE_AE].name)) \
38 : : sec_tls12_caps_add(cnxk_caps, cur_pos, \
39 : : sec_tls12_caps_##name, \
40 : : RTE_DIM(sec_tls12_caps_##name)); \
41 : : } while (0)
42 : :
43 : : #define SEC_TLS13_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, name) \
44 : : do { \
45 : : if ((hw_caps[CPT_ENG_TYPE_SE].name) || \
46 : : (hw_caps[CPT_ENG_TYPE_IE].name) || \
47 : : (hw_caps[CPT_ENG_TYPE_AE].name)) \
48 : : sec_tls13_caps_add(cnxk_caps, cur_pos, \
49 : : sec_tls13_caps_##name, \
50 : : RTE_DIM(sec_tls13_caps_##name)); \
51 : : } while (0)
52 : :
53 : : static const struct rte_cryptodev_capabilities caps_mul[] = {
54 : : { /* RSA */
55 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
56 : : {.asym = {
57 : : .xform_capa = {
58 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_RSA,
59 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
60 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY) |
61 : : (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) |
62 : : (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)),
63 : : {.modlen = {
64 : : .min = 17,
65 : : .max = 1024,
66 : : .increment = 1
67 : : }, }
68 : : }
69 : : }, }
70 : : },
71 : : { /* MOD_EXP */
72 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
73 : : {.asym = {
74 : : .xform_capa = {
75 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX,
76 : : .op_types = 0,
77 : : {.modlen = {
78 : : .min = 17,
79 : : .max = 1024,
80 : : .increment = 1
81 : : }, }
82 : : }
83 : : }, }
84 : : },
85 : : { /* ECDSA */
86 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
87 : : {.asym = {
88 : : .xform_capa = {
89 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_ECDSA,
90 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
91 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY)),
92 : : }
93 : : },
94 : : }
95 : : },
96 : : { /* ECPM */
97 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
98 : : {.asym = {
99 : : .xform_capa = {
100 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_ECPM,
101 : : .op_types = 0
102 : : }
103 : : },
104 : : }
105 : : },
106 : : { /* ECFPM */
107 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
108 : : {.asym = {
109 : : .xform_capa = {
110 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_ECFPM,
111 : : .op_types = 0
112 : : }
113 : : },
114 : : }
115 : : },
116 : : { /* ECDH */
117 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
118 : : {.asym = {
119 : : .xform_capa = {
120 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_ECDH,
121 : : .op_types = ((1 << RTE_CRYPTO_ASYM_KE_PRIV_KEY_GENERATE) |
122 : : (1 << RTE_CRYPTO_ASYM_KE_PUB_KEY_GENERATE) |
123 : : (1 << RTE_CRYPTO_ASYM_KE_PUB_KEY_VERIFY) |
124 : : (1 << RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE)
125 : : ),
126 : : }
127 : : },
128 : : }
129 : : },
130 : : };
131 : :
132 : : static const struct rte_cryptodev_capabilities caps_sha1_sha2[] = {
133 : : { /* SHA1 */
134 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
135 : : {.sym = {
136 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
137 : : {.auth = {
138 : : .algo = RTE_CRYPTO_AUTH_SHA1,
139 : : .block_size = 64,
140 : : .key_size = {
141 : : .min = 0,
142 : : .max = 0,
143 : : .increment = 0
144 : : },
145 : : .digest_size = {
146 : : .min = 1,
147 : : .max = 20,
148 : : .increment = 1
149 : : },
150 : : }, }
151 : : }, }
152 : : },
153 : : { /* SHA1 HMAC */
154 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
155 : : {.sym = {
156 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
157 : : {.auth = {
158 : : .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
159 : : .block_size = 64,
160 : : .key_size = {
161 : : .min = 1,
162 : : .max = 1024,
163 : : .increment = 1
164 : : },
165 : : .digest_size = {
166 : : .min = 1,
167 : : .max = 20,
168 : : .increment = 1
169 : : },
170 : : }, }
171 : : }, }
172 : : },
173 : : { /* SHA224 */
174 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
175 : : {.sym = {
176 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
177 : : {.auth = {
178 : : .algo = RTE_CRYPTO_AUTH_SHA224,
179 : : .block_size = 64,
180 : : .key_size = {
181 : : .min = 0,
182 : : .max = 0,
183 : : .increment = 0
184 : : },
185 : : .digest_size = {
186 : : .min = 1,
187 : : .max = 28,
188 : : .increment = 1
189 : : },
190 : : }, }
191 : : }, }
192 : : },
193 : : { /* SHA224 HMAC */
194 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
195 : : {.sym = {
196 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
197 : : {.auth = {
198 : : .algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
199 : : .block_size = 64,
200 : : .key_size = {
201 : : .min = 1,
202 : : .max = 1024,
203 : : .increment = 1
204 : : },
205 : : .digest_size = {
206 : : .min = 1,
207 : : .max = 28,
208 : : .increment = 1
209 : : },
210 : : }, }
211 : : }, }
212 : : },
213 : : { /* SHA256 */
214 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
215 : : {.sym = {
216 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
217 : : {.auth = {
218 : : .algo = RTE_CRYPTO_AUTH_SHA256,
219 : : .block_size = 64,
220 : : .key_size = {
221 : : .min = 0,
222 : : .max = 0,
223 : : .increment = 0
224 : : },
225 : : .digest_size = {
226 : : .min = 1,
227 : : .max = 32,
228 : : .increment = 1
229 : : },
230 : : }, }
231 : : }, }
232 : : },
233 : : { /* SHA256 HMAC */
234 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
235 : : {.sym = {
236 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
237 : : {.auth = {
238 : : .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
239 : : .block_size = 64,
240 : : .key_size = {
241 : : .min = 1,
242 : : .max = 1024,
243 : : .increment = 1
244 : : },
245 : : .digest_size = {
246 : : .min = 1,
247 : : .max = 32,
248 : : .increment = 1
249 : : },
250 : : }, }
251 : : }, }
252 : : },
253 : : { /* SHA384 */
254 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
255 : : {.sym = {
256 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
257 : : {.auth = {
258 : : .algo = RTE_CRYPTO_AUTH_SHA384,
259 : : .block_size = 64,
260 : : .key_size = {
261 : : .min = 0,
262 : : .max = 0,
263 : : .increment = 0
264 : : },
265 : : .digest_size = {
266 : : .min = 1,
267 : : .max = 48,
268 : : .increment = 1
269 : : },
270 : : }, }
271 : : }, }
272 : : },
273 : : { /* SHA384 HMAC */
274 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
275 : : {.sym = {
276 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
277 : : {.auth = {
278 : : .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
279 : : .block_size = 64,
280 : : .key_size = {
281 : : .min = 1,
282 : : .max = 1024,
283 : : .increment = 1
284 : : },
285 : : .digest_size = {
286 : : .min = 1,
287 : : .max = 48,
288 : : .increment = 1
289 : : },
290 : : }, }
291 : : }, }
292 : : },
293 : : { /* SHA512 */
294 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
295 : : {.sym = {
296 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
297 : : {.auth = {
298 : : .algo = RTE_CRYPTO_AUTH_SHA512,
299 : : .block_size = 128,
300 : : .key_size = {
301 : : .min = 0,
302 : : .max = 0,
303 : : .increment = 0
304 : : },
305 : : .digest_size = {
306 : : .min = 1,
307 : : .max = 64,
308 : : .increment = 1
309 : : },
310 : : }, }
311 : : }, }
312 : : },
313 : : { /* SHA512 HMAC */
314 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
315 : : {.sym = {
316 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
317 : : {.auth = {
318 : : .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
319 : : .block_size = 128,
320 : : .key_size = {
321 : : .min = 1,
322 : : .max = 1024,
323 : : .increment = 1
324 : : },
325 : : .digest_size = {
326 : : .min = 1,
327 : : .max = 64,
328 : : .increment = 1
329 : : },
330 : : }, }
331 : : }, }
332 : : },
333 : : { /* MD5 */
334 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
335 : : {.sym = {
336 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
337 : : {.auth = {
338 : : .algo = RTE_CRYPTO_AUTH_MD5,
339 : : .block_size = 64,
340 : : .key_size = {
341 : : .min = 0,
342 : : .max = 0,
343 : : .increment = 0
344 : : },
345 : : .digest_size = {
346 : : .min = 1,
347 : : .max = 16,
348 : : .increment = 1
349 : : },
350 : : }, }
351 : : }, }
352 : : },
353 : : { /* MD5 HMAC */
354 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
355 : : {.sym = {
356 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
357 : : {.auth = {
358 : : .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
359 : : .block_size = 64,
360 : : .key_size = {
361 : : .min = 8,
362 : : .max = 64,
363 : : .increment = 8
364 : : },
365 : : .digest_size = {
366 : : .min = 1,
367 : : .max = 16,
368 : : .increment = 1
369 : : },
370 : : }, }
371 : : }, }
372 : : },
373 : : };
374 : :
375 : : static const struct rte_cryptodev_capabilities caps_sm3[] = {
376 : : { /* SM3 */
377 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
378 : : {.sym = {
379 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
380 : : {.auth = {
381 : : .algo = RTE_CRYPTO_AUTH_SM3,
382 : : .block_size = 64,
383 : : .key_size = {
384 : : .min = 0,
385 : : .max = 0,
386 : : .increment = 0
387 : : },
388 : : .digest_size = {
389 : : .min = 32,
390 : : .max = 32,
391 : : .increment = 0
392 : : },
393 : : }, }
394 : : }, }
395 : : }
396 : : };
397 : :
398 : : static const struct rte_cryptodev_capabilities caps_sha3[] = {
399 : : { /* SHA3_224 */
400 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
401 : : {.sym = {
402 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
403 : : {.auth = {
404 : : .algo = RTE_CRYPTO_AUTH_SHA3_224,
405 : : .block_size = 144,
406 : : .key_size = {
407 : : .min = 0,
408 : : .max = 0,
409 : : .increment = 0
410 : : },
411 : : .digest_size = {
412 : : .min = 1,
413 : : .max = 28,
414 : : .increment = 1
415 : : },
416 : : }, }
417 : : }, }
418 : : },
419 : : { /* SHA3_224 HMAC */
420 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
421 : : {.sym = {
422 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
423 : : {.auth = {
424 : : .algo = RTE_CRYPTO_AUTH_SHA3_224_HMAC,
425 : : .block_size = 144,
426 : : .key_size = {
427 : : .min = 1,
428 : : .max = 1024,
429 : : .increment = 1
430 : : },
431 : : .digest_size = {
432 : : .min = 1,
433 : : .max = 28,
434 : : .increment = 1
435 : : },
436 : : }, }
437 : : }, }
438 : : },
439 : : { /* SHA3_256 */
440 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
441 : : {.sym = {
442 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
443 : : {.auth = {
444 : : .algo = RTE_CRYPTO_AUTH_SHA3_256,
445 : : .block_size = 136,
446 : : .key_size = {
447 : : .min = 0,
448 : : .max = 0,
449 : : .increment = 0
450 : : },
451 : : .digest_size = {
452 : : .min = 1,
453 : : .max = 32,
454 : : .increment = 1
455 : : },
456 : : }, }
457 : : }, }
458 : : },
459 : : { /* SHA3_256 HMAC */
460 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
461 : : {.sym = {
462 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
463 : : {.auth = {
464 : : .algo = RTE_CRYPTO_AUTH_SHA3_256_HMAC,
465 : : .block_size = 136,
466 : : .key_size = {
467 : : .min = 1,
468 : : .max = 1024,
469 : : .increment = 1
470 : : },
471 : : .digest_size = {
472 : : .min = 1,
473 : : .max = 32,
474 : : .increment = 1
475 : : },
476 : : }, }
477 : : }, }
478 : : },
479 : : { /* SHA3_384 */
480 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
481 : : {.sym = {
482 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
483 : : {.auth = {
484 : : .algo = RTE_CRYPTO_AUTH_SHA3_384,
485 : : .block_size = 104,
486 : : .key_size = {
487 : : .min = 0,
488 : : .max = 0,
489 : : .increment = 0
490 : : },
491 : : .digest_size = {
492 : : .min = 1,
493 : : .max = 48,
494 : : .increment = 0
495 : : },
496 : : }, }
497 : : }, }
498 : : },
499 : : { /* SHA3_384 HMAC */
500 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
501 : : {.sym = {
502 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
503 : : {.auth = {
504 : : .algo = RTE_CRYPTO_AUTH_SHA3_384_HMAC,
505 : : .block_size = 104,
506 : : .key_size = {
507 : : .min = 1,
508 : : .max = 1024,
509 : : .increment = 1
510 : : },
511 : : .digest_size = {
512 : : .min = 1,
513 : : .max = 48,
514 : : .increment = 1
515 : : },
516 : : }, }
517 : : }, }
518 : : },
519 : : { /* SHA3_512 */
520 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
521 : : {.sym = {
522 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
523 : : {.auth = {
524 : : .algo = RTE_CRYPTO_AUTH_SHA3_512,
525 : : .block_size = 72,
526 : : .key_size = {
527 : : .min = 0,
528 : : .max = 0,
529 : : .increment = 0
530 : : },
531 : : .digest_size = {
532 : : .min = 1,
533 : : .max = 64,
534 : : .increment = 1
535 : : },
536 : : }, }
537 : : }, }
538 : : },
539 : : { /* SHA3_512 HMAC */
540 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
541 : : {.sym = {
542 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
543 : : {.auth = {
544 : : .algo = RTE_CRYPTO_AUTH_SHA3_512_HMAC,
545 : : .block_size = 72,
546 : : .key_size = {
547 : : .min = 1,
548 : : .max = 1024,
549 : : .increment = 1
550 : : },
551 : : .digest_size = {
552 : : .min = 1,
553 : : .max = 64,
554 : : .increment = 1
555 : : },
556 : : }, }
557 : : }, }
558 : : },
559 : : { /* SHAKE_128 */
560 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
561 : : {.sym = {
562 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
563 : : {.auth = {
564 : : .algo = RTE_CRYPTO_AUTH_SHAKE_128,
565 : : .block_size = 168,
566 : : .key_size = {
567 : : .min = 0,
568 : : .max = 0,
569 : : .increment = 0
570 : : },
571 : : .digest_size = {
572 : : .min = 1,
573 : : .max = 255,
574 : : .increment = 1
575 : : },
576 : : }, }
577 : : }, }
578 : : },
579 : : { /* SHAKE_256 */
580 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
581 : : {.sym = {
582 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
583 : : {.auth = {
584 : : .algo = RTE_CRYPTO_AUTH_SHAKE_256,
585 : : .block_size = 136,
586 : : .key_size = {
587 : : .min = 0,
588 : : .max = 0,
589 : : .increment = 0
590 : : },
591 : : .digest_size = {
592 : : .min = 1,
593 : : .max = 255,
594 : : .increment = 1
595 : : },
596 : : }, }
597 : : }, }
598 : : },
599 : : };
600 : :
601 : : static const struct rte_cryptodev_capabilities caps_chacha20[] = {
602 : : { /* Chacha20-Poly1305 */
603 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
604 : : {.sym = {
605 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
606 : : {.aead = {
607 : : .algo = RTE_CRYPTO_AEAD_CHACHA20_POLY1305,
608 : : .block_size = 64,
609 : : .key_size = {
610 : : .min = 32,
611 : : .max = 32,
612 : : .increment = 0
613 : : },
614 : : .digest_size = {
615 : : .min = 16,
616 : : .max = 16,
617 : : .increment = 0
618 : : },
619 : : .aad_size = {
620 : : .min = 0,
621 : : .max = 1024,
622 : : .increment = 1
623 : : },
624 : : .iv_size = {
625 : : .min = 12,
626 : : .max = 12,
627 : : .increment = 0
628 : : },
629 : : }, }
630 : : }, }
631 : : }
632 : : };
633 : :
634 : : static const struct rte_cryptodev_capabilities caps_zuc_snow3g[] = {
635 : : { /* SNOW 3G (UEA2) */
636 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
637 : : {.sym = {
638 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
639 : : {.cipher = {
640 : : .algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
641 : : .block_size = 16,
642 : : .key_size = {
643 : : .min = 16,
644 : : .max = 16,
645 : : .increment = 0
646 : : },
647 : : .iv_size = {
648 : : .min = 16,
649 : : .max = 16,
650 : : .increment = 0
651 : : }
652 : : }, }
653 : : }, }
654 : : },
655 : : { /* ZUC (EEA3) */
656 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
657 : : {.sym = {
658 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
659 : : {.cipher = {
660 : : .algo = RTE_CRYPTO_CIPHER_ZUC_EEA3,
661 : : .block_size = 16,
662 : : .key_size = {
663 : : .min = 16,
664 : : .max = 16,
665 : : .increment = 0
666 : : },
667 : : .iv_size = {
668 : : .min = 16,
669 : : .max = 16,
670 : : .increment = 0
671 : : }
672 : : }, }
673 : : }, }
674 : : },
675 : : { /* SNOW 3G (UIA2) */
676 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
677 : : {.sym = {
678 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
679 : : {.auth = {
680 : : .algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
681 : : .block_size = 16,
682 : : .key_size = {
683 : : .min = 16,
684 : : .max = 16,
685 : : .increment = 0
686 : : },
687 : : .digest_size = {
688 : : .min = 4,
689 : : .max = 4,
690 : : .increment = 0
691 : : },
692 : : .iv_size = {
693 : : .min = 16,
694 : : .max = 16,
695 : : .increment = 0
696 : : }
697 : : }, }
698 : : }, }
699 : : },
700 : : { /* ZUC (EIA3) */
701 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
702 : : {.sym = {
703 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
704 : : {.auth = {
705 : : .algo = RTE_CRYPTO_AUTH_ZUC_EIA3,
706 : : .block_size = 16,
707 : : .key_size = {
708 : : .min = 16,
709 : : .max = 16,
710 : : .increment = 0
711 : : },
712 : : .digest_size = {
713 : : .min = 4,
714 : : .max = 4,
715 : : .increment = 0
716 : : },
717 : : .iv_size = {
718 : : .min = 16,
719 : : .max = 16,
720 : : .increment = 0
721 : : }
722 : : }, }
723 : : }, }
724 : : },
725 : : };
726 : :
727 : : static const struct rte_cryptodev_capabilities caps_zuc256_snow5g[] = {
728 : : { /* SNOW 5G (NEA4) */
729 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
730 : : {.sym = {
731 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
732 : : {.cipher = {
733 : : .algo = RTE_CRYPTO_CIPHER_SNOW5G_NEA4,
734 : : .block_size = 16,
735 : : .key_size = {
736 : : .min = 32,
737 : : .max = 32,
738 : : .increment = 0
739 : : },
740 : : .iv_size = {
741 : : .min = 16,
742 : : .max = 16,
743 : : .increment = 0
744 : : }
745 : : }, }
746 : : }, }
747 : : },
748 : : { /* SNOW 5G (NIA4) */
749 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
750 : : {.sym = {
751 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
752 : : {.auth = {
753 : : .algo = RTE_CRYPTO_AUTH_SNOW5G_NIA4,
754 : : .block_size = 16,
755 : : .key_size = {
756 : : .min = 32,
757 : : .max = 32,
758 : : .increment = 0
759 : : },
760 : : .digest_size = {
761 : : .min = 4,
762 : : .max = 16,
763 : : .increment = 0
764 : : },
765 : : .iv_size = {
766 : : .min = 16,
767 : : .max = 16,
768 : : .increment = 0
769 : : }
770 : : }, }
771 : : }, }
772 : : },
773 : : { /* ZUC 256 (NEA6) */
774 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
775 : : {.sym = {
776 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
777 : : {.cipher = {
778 : : .algo = RTE_CRYPTO_CIPHER_ZUC_NEA6,
779 : : .block_size = 16,
780 : : .key_size = {
781 : : .min = 32,
782 : : .max = 32,
783 : : .increment = 0
784 : : },
785 : : .iv_size = {
786 : : .min = 16,
787 : : .max = 16,
788 : : .increment = 0
789 : : }
790 : : }, }
791 : : }, }
792 : : },
793 : : { /* ZUC 256 (NIA6) */
794 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
795 : : {.sym = {
796 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
797 : : {.auth = {
798 : : .algo = RTE_CRYPTO_AUTH_ZUC_NIA6,
799 : : .block_size = 16,
800 : : .key_size = {
801 : : .min = 32,
802 : : .max = 32,
803 : : .increment = 0
804 : : },
805 : : .digest_size = {
806 : : .min = 4,
807 : : .max = 16,
808 : : .increment = 0
809 : : },
810 : : .iv_size = {
811 : : .min = 16,
812 : : .max = 16,
813 : : .increment = 0
814 : : }
815 : : }, }
816 : : }, }
817 : : },
818 : : };
819 : :
820 : : static const struct rte_cryptodev_capabilities caps_aes[] = {
821 : : { /* AES GMAC (AUTH) */
822 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
823 : : {.sym = {
824 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
825 : : {.auth = {
826 : : .algo = RTE_CRYPTO_AUTH_AES_GMAC,
827 : : .block_size = 16,
828 : : .key_size = {
829 : : .min = 16,
830 : : .max = 32,
831 : : .increment = 8
832 : : },
833 : : .digest_size = {
834 : : .min = 8,
835 : : .max = 16,
836 : : .increment = 4
837 : : },
838 : : .iv_size = {
839 : : .min = 12,
840 : : .max = 12,
841 : : .increment = 0
842 : : }
843 : : }, }
844 : : }, }
845 : : },
846 : : { /* AES CBC */
847 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
848 : : {.sym = {
849 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
850 : : {.cipher = {
851 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
852 : : .block_size = 16,
853 : : .key_size = {
854 : : .min = 16,
855 : : .max = 32,
856 : : .increment = 8
857 : : },
858 : : .iv_size = {
859 : : .min = 16,
860 : : .max = 16,
861 : : .increment = 0
862 : : }
863 : : }, }
864 : : }, }
865 : : },
866 : : { /* AES CTR */
867 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
868 : : {.sym = {
869 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
870 : : {.cipher = {
871 : : .algo = RTE_CRYPTO_CIPHER_AES_CTR,
872 : : .block_size = 16,
873 : : .key_size = {
874 : : .min = 16,
875 : : .max = 32,
876 : : .increment = 8
877 : : },
878 : : .iv_size = {
879 : : .min = 12,
880 : : .max = 16,
881 : : .increment = 4
882 : : }
883 : : }, }
884 : : }, }
885 : : },
886 : : { /* AES XTS */
887 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
888 : : {.sym = {
889 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
890 : : {.cipher = {
891 : : .algo = RTE_CRYPTO_CIPHER_AES_XTS,
892 : : .block_size = 16,
893 : : .key_size = {
894 : : .min = 32,
895 : : .max = 64,
896 : : .increment = 32
897 : : },
898 : : .iv_size = {
899 : : .min = 16,
900 : : .max = 16,
901 : : .increment = 0
902 : : }
903 : : }, }
904 : : }, }
905 : : },
906 : : { /* AES GCM */
907 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
908 : : {.sym = {
909 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
910 : : {.aead = {
911 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
912 : : .block_size = 16,
913 : : .key_size = {
914 : : .min = 16,
915 : : .max = 32,
916 : : .increment = 8
917 : : },
918 : : .digest_size = {
919 : : .min = 4,
920 : : .max = 16,
921 : : .increment = 1
922 : : },
923 : : .aad_size = {
924 : : .min = 0,
925 : : .max = 1024,
926 : : .increment = 1
927 : : },
928 : : .iv_size = {
929 : : .min = 12,
930 : : .max = 12,
931 : : .increment = 0
932 : : }
933 : : }, }
934 : : }, }
935 : : },
936 : : { /* AES CCM */
937 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
938 : : {.sym = {
939 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
940 : : {.aead = {
941 : : .algo = RTE_CRYPTO_AEAD_AES_CCM,
942 : : .block_size = 16,
943 : : .key_size = {
944 : : .min = 16,
945 : : .max = 32,
946 : : .increment = 8
947 : : },
948 : : .digest_size = {
949 : : .min = 4,
950 : : .max = 16,
951 : : .increment = 1
952 : : },
953 : : .aad_size = {
954 : : .min = 0,
955 : : .max = 1024,
956 : : .increment = 1
957 : : },
958 : : .iv_size = {
959 : : .min = 11,
960 : : .max = 13,
961 : : .increment = 1
962 : : }
963 : : }, }
964 : : }, }
965 : : },
966 : : { /* AES CMAC */
967 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
968 : : {.sym = {
969 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
970 : : {.auth = {
971 : : .algo = RTE_CRYPTO_AUTH_AES_CMAC,
972 : : .block_size = 16,
973 : : .key_size = {
974 : : .min = 16,
975 : : .max = 32,
976 : : .increment = 8
977 : : },
978 : : .digest_size = {
979 : : .min = 4,
980 : : .max = 4,
981 : : .increment = 0
982 : : },
983 : : }, }
984 : : }, }
985 : : },
986 : : };
987 : :
988 : : static const struct rte_cryptodev_capabilities caps_kasumi[] = {
989 : : { /* KASUMI (F8) */
990 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
991 : : {.sym = {
992 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
993 : : {.cipher = {
994 : : .algo = RTE_CRYPTO_CIPHER_KASUMI_F8,
995 : : .block_size = 8,
996 : : .key_size = {
997 : : .min = 16,
998 : : .max = 16,
999 : : .increment = 0
1000 : : },
1001 : : .iv_size = {
1002 : : .min = 8,
1003 : : .max = 8,
1004 : : .increment = 0
1005 : : }
1006 : : }, }
1007 : : }, }
1008 : : },
1009 : : { /* KASUMI (F9) */
1010 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1011 : : {.sym = {
1012 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1013 : : {.auth = {
1014 : : .algo = RTE_CRYPTO_AUTH_KASUMI_F9,
1015 : : .block_size = 8,
1016 : : .key_size = {
1017 : : .min = 16,
1018 : : .max = 16,
1019 : : .increment = 0
1020 : : },
1021 : : .digest_size = {
1022 : : .min = 4,
1023 : : .max = 4,
1024 : : .increment = 0
1025 : : },
1026 : : }, }
1027 : : }, }
1028 : : },
1029 : : };
1030 : :
1031 : : static const struct rte_cryptodev_capabilities caps_des[] = {
1032 : : { /* 3DES CBC */
1033 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1034 : : {.sym = {
1035 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1036 : : {.cipher = {
1037 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
1038 : : .block_size = 8,
1039 : : .key_size = {
1040 : : .min = 24,
1041 : : .max = 24,
1042 : : .increment = 0
1043 : : },
1044 : : .iv_size = {
1045 : : .min = 8,
1046 : : .max = 16,
1047 : : .increment = 8
1048 : : }
1049 : : }, }
1050 : : }, }
1051 : : },
1052 : : { /* 3DES ECB */
1053 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1054 : : {.sym = {
1055 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1056 : : {.cipher = {
1057 : : .algo = RTE_CRYPTO_CIPHER_3DES_ECB,
1058 : : .block_size = 8,
1059 : : .key_size = {
1060 : : .min = 24,
1061 : : .max = 24,
1062 : : .increment = 0
1063 : : },
1064 : : .iv_size = {
1065 : : .min = 0,
1066 : : .max = 0,
1067 : : .increment = 0
1068 : : }
1069 : : }, }
1070 : : }, }
1071 : : },
1072 : : { /* DES CBC */
1073 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1074 : : {.sym = {
1075 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1076 : : {.cipher = {
1077 : : .algo = RTE_CRYPTO_CIPHER_DES_CBC,
1078 : : .block_size = 8,
1079 : : .key_size = {
1080 : : .min = 8,
1081 : : .max = 8,
1082 : : .increment = 0
1083 : : },
1084 : : .iv_size = {
1085 : : .min = 8,
1086 : : .max = 8,
1087 : : .increment = 0
1088 : : }
1089 : : }, }
1090 : : }, }
1091 : : },
1092 : : };
1093 : :
1094 : : static const struct rte_cryptodev_capabilities caps_docsis[] = {
1095 : : { /* AES DOCSIS BPI */
1096 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1097 : : {.sym = {
1098 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1099 : : {.cipher = {
1100 : : .algo = RTE_CRYPTO_CIPHER_AES_DOCSISBPI,
1101 : : .block_size = 16,
1102 : : .key_size = {
1103 : : .min = 16,
1104 : : .max = 32,
1105 : : .increment = 16
1106 : : },
1107 : : .iv_size = {
1108 : : .min = 16,
1109 : : .max = 16,
1110 : : .increment = 0
1111 : : }
1112 : : }, }
1113 : : }, }
1114 : : },
1115 : : { /* DES DOCSIS BPI */
1116 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1117 : : {.sym = {
1118 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1119 : : {.cipher = {
1120 : : .algo = RTE_CRYPTO_CIPHER_DES_DOCSISBPI,
1121 : : .block_size = 8,
1122 : : .key_size = {
1123 : : .min = 8,
1124 : : .max = 8,
1125 : : .increment = 0
1126 : : },
1127 : : .iv_size = {
1128 : : .min = 8,
1129 : : .max = 8,
1130 : : .increment = 0
1131 : : }
1132 : : }, }
1133 : : }, }
1134 : : },
1135 : : };
1136 : :
1137 : : static const struct rte_cryptodev_capabilities caps_null[] = {
1138 : : { /* NULL (AUTH) */
1139 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1140 : : {.sym = {
1141 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1142 : : {.auth = {
1143 : : .algo = RTE_CRYPTO_AUTH_NULL,
1144 : : .block_size = 1,
1145 : : .key_size = {
1146 : : .min = 0,
1147 : : .max = 0,
1148 : : .increment = 0
1149 : : },
1150 : : .digest_size = {
1151 : : .min = 0,
1152 : : .max = 0,
1153 : : .increment = 0
1154 : : },
1155 : : }, },
1156 : : }, },
1157 : : },
1158 : : { /* NULL (CIPHER) */
1159 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1160 : : {.sym = {
1161 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1162 : : {.cipher = {
1163 : : .algo = RTE_CRYPTO_CIPHER_NULL,
1164 : : .block_size = 1,
1165 : : .key_size = {
1166 : : .min = 0,
1167 : : .max = 0,
1168 : : .increment = 0
1169 : : },
1170 : : .iv_size = {
1171 : : .min = 0,
1172 : : .max = 0,
1173 : : .increment = 0
1174 : : }
1175 : : }, },
1176 : : }, }
1177 : : },
1178 : : };
1179 : :
1180 : : static const struct rte_cryptodev_capabilities caps_sm4[] = {
1181 : : { /* SM4 CBC */
1182 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1183 : : {.sym = {
1184 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1185 : : {.cipher = {
1186 : : .algo = RTE_CRYPTO_CIPHER_SM4_CBC,
1187 : : .block_size = 16,
1188 : : .key_size = {
1189 : : .min = 16,
1190 : : .max = 16,
1191 : : .increment = 0
1192 : : },
1193 : : .iv_size = {
1194 : : .min = 16,
1195 : : .max = 16,
1196 : : .increment = 0
1197 : : }
1198 : : }, }
1199 : : }, }
1200 : : },
1201 : : { /* SM4 ECB */
1202 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1203 : : {.sym = {
1204 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1205 : : {.cipher = {
1206 : : .algo = RTE_CRYPTO_CIPHER_SM4_ECB,
1207 : : .block_size = 16,
1208 : : .key_size = {
1209 : : .min = 16,
1210 : : .max = 16,
1211 : : .increment = 0
1212 : : },
1213 : : .iv_size = {
1214 : : .min = 0,
1215 : : .max = 0,
1216 : : .increment = 0
1217 : : }
1218 : : }, }
1219 : : }, }
1220 : : },
1221 : : { /* SM4 CTR */
1222 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1223 : : {.sym = {
1224 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1225 : : {.cipher = {
1226 : : .algo = RTE_CRYPTO_CIPHER_SM4_CTR,
1227 : : .block_size = 16,
1228 : : .key_size = {
1229 : : .min = 16,
1230 : : .max = 16,
1231 : : .increment = 0
1232 : : },
1233 : : .iv_size = {
1234 : : .min = 16,
1235 : : .max = 16,
1236 : : .increment = 0
1237 : : }
1238 : : }, }
1239 : : }, }
1240 : : },
1241 : : { /* SM4 OFB */
1242 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1243 : : {.sym = {
1244 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1245 : : {.cipher = {
1246 : : .algo = RTE_CRYPTO_CIPHER_SM4_OFB,
1247 : : .block_size = 16,
1248 : : .key_size = {
1249 : : .min = 16,
1250 : : .max = 16,
1251 : : .increment = 0
1252 : : },
1253 : : .iv_size = {
1254 : : .min = 16,
1255 : : .max = 16,
1256 : : .increment = 0
1257 : : }
1258 : : }, }
1259 : : }, }
1260 : : },
1261 : : { /* SM4 CFB */
1262 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1263 : : {.sym = {
1264 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1265 : : {.cipher = {
1266 : : .algo = RTE_CRYPTO_CIPHER_SM4_CFB,
1267 : : .block_size = 16,
1268 : : .key_size = {
1269 : : .min = 16,
1270 : : .max = 16,
1271 : : .increment = 0
1272 : : },
1273 : : .iv_size = {
1274 : : .min = 16,
1275 : : .max = 16,
1276 : : .increment = 0
1277 : : }
1278 : : }, }
1279 : : }, }
1280 : : },
1281 : : };
1282 : :
1283 : : static const struct rte_cryptodev_capabilities caps_sm2[] = {
1284 : : { /* SM2 */
1285 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
1286 : : {.asym = {
1287 : : .xform_capa = {
1288 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_SM2,
1289 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
1290 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY))
1291 : : }
1292 : : }
1293 : : }
1294 : : }
1295 : : };
1296 : :
1297 : : static const struct rte_cryptodev_capabilities caps_eddsa[] = {
1298 : : { /* EdDSA */
1299 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
1300 : : {.asym = {
1301 : : .xform_capa = {
1302 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_EDDSA,
1303 : : .hash_algos = (RTE_BIT64(RTE_CRYPTO_AUTH_SHA512) |
1304 : : RTE_BIT64(RTE_CRYPTO_AUTH_SHAKE_256)),
1305 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
1306 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY))
1307 : : }
1308 : : }
1309 : : }
1310 : : }
1311 : : };
1312 : :
1313 : : static const struct rte_cryptodev_capabilities caps_end[] = {
1314 : : RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
1315 : : };
1316 : :
1317 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_aes[] = {
1318 : : { /* AES GCM */
1319 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1320 : : {.sym = {
1321 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1322 : : {.aead = {
1323 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
1324 : : .block_size = 16,
1325 : : .key_size = {
1326 : : .min = 16,
1327 : : .max = 32,
1328 : : .increment = 8
1329 : : },
1330 : : .digest_size = {
1331 : : .min = 16,
1332 : : .max = 16,
1333 : : .increment = 0
1334 : : },
1335 : : .aad_size = {
1336 : : .min = 8,
1337 : : .max = 12,
1338 : : .increment = 4
1339 : : },
1340 : : .iv_size = {
1341 : : .min = 12,
1342 : : .max = 12,
1343 : : .increment = 0
1344 : : }
1345 : : }, }
1346 : : }, }
1347 : : },
1348 : : { /* AES CCM */
1349 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1350 : : {.sym = {
1351 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1352 : : {.aead = {
1353 : : .algo = RTE_CRYPTO_AEAD_AES_CCM,
1354 : : .block_size = 16,
1355 : : .key_size = {
1356 : : .min = 16,
1357 : : .max = 32,
1358 : : .increment = 8
1359 : : },
1360 : : .digest_size = {
1361 : : .min = 16,
1362 : : .max = 16,
1363 : : .increment = 0
1364 : : },
1365 : : .aad_size = {
1366 : : .min = 8,
1367 : : .max = 12,
1368 : : .increment = 4
1369 : : },
1370 : : .iv_size = {
1371 : : .min = 11,
1372 : : .max = 11,
1373 : : .increment = 0
1374 : : }
1375 : : }, }
1376 : : }, }
1377 : : },
1378 : : { /* AES CTR */
1379 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1380 : : {.sym = {
1381 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1382 : : {.cipher = {
1383 : : .algo = RTE_CRYPTO_CIPHER_AES_CTR,
1384 : : .block_size = 16,
1385 : : .key_size = {
1386 : : .min = 16,
1387 : : .max = 32,
1388 : : .increment = 8
1389 : : },
1390 : : .iv_size = {
1391 : : .min = 12,
1392 : : .max = 16,
1393 : : .increment = 4
1394 : : }
1395 : : }, }
1396 : : }, }
1397 : : },
1398 : : { /* AES CBC */
1399 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1400 : : {.sym = {
1401 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1402 : : {.cipher = {
1403 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
1404 : : .block_size = 16,
1405 : : .key_size = {
1406 : : .min = 16,
1407 : : .max = 32,
1408 : : .increment = 8
1409 : : },
1410 : : .iv_size = {
1411 : : .min = 16,
1412 : : .max = 16,
1413 : : .increment = 0
1414 : : }
1415 : : }, }
1416 : : }, }
1417 : : },
1418 : : { /* AES-XCBC */
1419 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1420 : : { .sym = {
1421 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1422 : : {.auth = {
1423 : : .algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
1424 : : .block_size = 16,
1425 : : .key_size = {
1426 : : .min = 16,
1427 : : .max = 16,
1428 : : .increment = 0
1429 : : },
1430 : : .digest_size = {
1431 : : .min = 12,
1432 : : .max = 12,
1433 : : .increment = 0,
1434 : : },
1435 : : }, }
1436 : : }, }
1437 : : },
1438 : : { /* AES GMAC (AUTH) */
1439 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1440 : : {.sym = {
1441 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1442 : : {.auth = {
1443 : : .algo = RTE_CRYPTO_AUTH_AES_GMAC,
1444 : : .block_size = 16,
1445 : : .key_size = {
1446 : : .min = 16,
1447 : : .max = 32,
1448 : : .increment = 8
1449 : : },
1450 : : .digest_size = {
1451 : : .min = 8,
1452 : : .max = 16,
1453 : : .increment = 4
1454 : : },
1455 : : .iv_size = {
1456 : : .min = 12,
1457 : : .max = 12,
1458 : : .increment = 0
1459 : : }
1460 : : }, }
1461 : : }, }
1462 : : },
1463 : : };
1464 : :
1465 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_des[] = {
1466 : : { /* DES */
1467 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1468 : : {.sym = {
1469 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1470 : : {.cipher = {
1471 : : .algo = RTE_CRYPTO_CIPHER_DES_CBC,
1472 : : .block_size = 8,
1473 : : .key_size = {
1474 : : .min = 8,
1475 : : .max = 8,
1476 : : .increment = 0
1477 : : },
1478 : : .iv_size = {
1479 : : .min = 8,
1480 : : .max = 8,
1481 : : .increment = 0
1482 : : }
1483 : : }, },
1484 : : }, }
1485 : : },
1486 : : { /* 3DES CBC */
1487 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1488 : : {.sym = {
1489 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1490 : : {.cipher = {
1491 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
1492 : : .block_size = 8,
1493 : : .key_size = {
1494 : : .min = 24,
1495 : : .max = 24,
1496 : : .increment = 0
1497 : : },
1498 : : .iv_size = {
1499 : : .min = 8,
1500 : : .max = 16,
1501 : : .increment = 8
1502 : : }
1503 : : }, }
1504 : : }, }
1505 : : },
1506 : : };
1507 : :
1508 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_sha1_sha2[] = {
1509 : : { /* SHA1 HMAC */
1510 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1511 : : {.sym = {
1512 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1513 : : {.auth = {
1514 : : .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
1515 : : .block_size = 64,
1516 : : .key_size = {
1517 : : .min = 20,
1518 : : .max = 64,
1519 : : .increment = 1
1520 : : },
1521 : : .digest_size = {
1522 : : .min = 12,
1523 : : .max = 12,
1524 : : .increment = 0
1525 : : },
1526 : : }, }
1527 : : }, }
1528 : : },
1529 : : { /* SHA256 HMAC */
1530 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1531 : : {.sym = {
1532 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1533 : : {.auth = {
1534 : : .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
1535 : : .block_size = 64,
1536 : : .key_size = {
1537 : : .min = 1,
1538 : : .max = 1024,
1539 : : .increment = 1
1540 : : },
1541 : : .digest_size = {
1542 : : .min = 16,
1543 : : .max = 16,
1544 : : .increment = 0
1545 : : },
1546 : : }, }
1547 : : }, }
1548 : : },
1549 : : { /* SHA384 HMAC */
1550 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1551 : : {.sym = {
1552 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1553 : : {.auth = {
1554 : : .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
1555 : : .block_size = 64,
1556 : : .key_size = {
1557 : : .min = 48,
1558 : : .max = 48,
1559 : : .increment = 0
1560 : : },
1561 : : .digest_size = {
1562 : : .min = 24,
1563 : : .max = 24,
1564 : : .increment = 0
1565 : : },
1566 : : }, }
1567 : : }, }
1568 : : },
1569 : : { /* SHA512 HMAC */
1570 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1571 : : {.sym = {
1572 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1573 : : {.auth = {
1574 : : .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
1575 : : .block_size = 128,
1576 : : .key_size = {
1577 : : .min = 64,
1578 : : .max = 64,
1579 : : .increment = 0
1580 : : },
1581 : : .digest_size = {
1582 : : .min = 32,
1583 : : .max = 32,
1584 : : .increment = 0
1585 : : },
1586 : : }, }
1587 : : }, }
1588 : : },
1589 : : { /* MD5 HMAC */
1590 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1591 : : {.sym = {
1592 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1593 : : {.auth = {
1594 : : .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
1595 : : .block_size = 64,
1596 : : .key_size = {
1597 : : .min = 16,
1598 : : .max = 16,
1599 : : .increment = 0
1600 : : },
1601 : : .digest_size = {
1602 : : .min = 12,
1603 : : .max = 12,
1604 : : .increment = 0
1605 : : },
1606 : : }, }
1607 : : }, }
1608 : : },
1609 : : };
1610 : :
1611 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_null[] = {
1612 : : { /* NULL (CIPHER) */
1613 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1614 : : {.sym = {
1615 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1616 : : {.cipher = {
1617 : : .algo = RTE_CRYPTO_CIPHER_NULL,
1618 : : .block_size = 1,
1619 : : .key_size = {
1620 : : .min = 0,
1621 : : .max = 0,
1622 : : .increment = 0
1623 : : },
1624 : : .iv_size = {
1625 : : .min = 0,
1626 : : .max = 0,
1627 : : .increment = 0
1628 : : }
1629 : : }, },
1630 : : }, }
1631 : : },
1632 : : };
1633 : :
1634 : : static const struct rte_cryptodev_capabilities sec_tls12_caps_aes[] = {
1635 : : { /* AES GCM */
1636 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1637 : : {.sym = {
1638 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1639 : : {.aead = {
1640 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
1641 : : .block_size = 16,
1642 : : .key_size = {
1643 : : .min = 16,
1644 : : .max = 32,
1645 : : .increment = 16
1646 : : },
1647 : : .digest_size = {
1648 : : .min = 16,
1649 : : .max = 16,
1650 : : .increment = 0
1651 : : },
1652 : : .aad_size = {
1653 : : .min = 13,
1654 : : .max = 13,
1655 : : .increment = 0
1656 : : },
1657 : : .iv_size = {
1658 : : .min = 12,
1659 : : .max = 12,
1660 : : .increment = 0
1661 : : }
1662 : : }, }
1663 : : }, }
1664 : : },
1665 : : { /* AES CBC */
1666 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1667 : : {.sym = {
1668 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1669 : : {.cipher = {
1670 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
1671 : : .block_size = 16,
1672 : : .key_size = {
1673 : : .min = 16,
1674 : : .max = 32,
1675 : : .increment = 8
1676 : : },
1677 : : .iv_size = {
1678 : : .min = 16,
1679 : : .max = 16,
1680 : : .increment = 0
1681 : : }
1682 : : }, }
1683 : : }, }
1684 : : },
1685 : : };
1686 : :
1687 : : static const struct rte_cryptodev_capabilities sec_tls12_caps_des[] = {
1688 : : { /* 3DES CBC */
1689 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1690 : : {.sym = {
1691 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1692 : : {.cipher = {
1693 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
1694 : : .block_size = 8,
1695 : : .key_size = {
1696 : : .min = 24,
1697 : : .max = 24,
1698 : : .increment = 0
1699 : : },
1700 : : .iv_size = {
1701 : : .min = 8,
1702 : : .max = 8,
1703 : : .increment = 0
1704 : : }
1705 : : }, }
1706 : : }, }
1707 : : },
1708 : : };
1709 : :
1710 : : static const struct rte_cryptodev_capabilities sec_tls12_caps_sha1_sha2[] = {
1711 : : { /* SHA1 HMAC */
1712 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1713 : : {.sym = {
1714 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1715 : : {.auth = {
1716 : : .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
1717 : : .block_size = 64,
1718 : : .key_size = {
1719 : : .min = 20,
1720 : : .max = 20,
1721 : : .increment = 0
1722 : : },
1723 : : .digest_size = {
1724 : : .min = 20,
1725 : : .max = 20,
1726 : : .increment = 0
1727 : : },
1728 : : }, }
1729 : : }, }
1730 : : },
1731 : : { /* SHA256 HMAC */
1732 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1733 : : {.sym = {
1734 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1735 : : {.auth = {
1736 : : .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
1737 : : .block_size = 64,
1738 : : .key_size = {
1739 : : .min = 32,
1740 : : .max = 32,
1741 : : .increment = 0
1742 : : },
1743 : : .digest_size = {
1744 : : .min = 32,
1745 : : .max = 32,
1746 : : .increment = 0
1747 : : },
1748 : : }, }
1749 : : }, }
1750 : : },
1751 : : { /* SHA384 HMAC */
1752 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1753 : : {.sym = {
1754 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1755 : : {.auth = {
1756 : : .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
1757 : : .block_size = 64,
1758 : : .key_size = {
1759 : : .min = 48,
1760 : : .max = 48,
1761 : : .increment = 0
1762 : : },
1763 : : .digest_size = {
1764 : : .min = 48,
1765 : : .max = 48,
1766 : : .increment = 0
1767 : : },
1768 : : }, }
1769 : : }, }
1770 : : },
1771 : :
1772 : : };
1773 : :
1774 : : static const struct rte_cryptodev_capabilities sec_tls13_caps_aes[] = {
1775 : : { /* AES GCM */
1776 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1777 : : {.sym = {
1778 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1779 : : {.aead = {
1780 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
1781 : : .block_size = 16,
1782 : : .key_size = {
1783 : : .min = 16,
1784 : : .max = 32,
1785 : : .increment = 16
1786 : : },
1787 : : .digest_size = {
1788 : : .min = 16,
1789 : : .max = 16,
1790 : : .increment = 0
1791 : : },
1792 : : .aad_size = {
1793 : : .min = 5,
1794 : : .max = 5,
1795 : : .increment = 0
1796 : : },
1797 : : .iv_size = {
1798 : : .min = 0,
1799 : : .max = 0,
1800 : : .increment = 0
1801 : : }
1802 : : }, }
1803 : : }, }
1804 : : },
1805 : : { /* CHACHA POLY */
1806 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1807 : : {.sym = {
1808 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1809 : : {.aead = {
1810 : : .algo = RTE_CRYPTO_AEAD_CHACHA20_POLY1305,
1811 : : .block_size = 64,
1812 : : .key_size = {
1813 : : .min = 32,
1814 : : .max = 32,
1815 : : .increment = 0
1816 : : },
1817 : : .digest_size = {
1818 : : .min = 16,
1819 : : .max = 16,
1820 : : .increment = 0
1821 : : },
1822 : : .aad_size = {
1823 : : .min = 5,
1824 : : .max = 5,
1825 : : .increment = 0
1826 : : },
1827 : : .iv_size = {
1828 : : .min = 0,
1829 : : .max = 0,
1830 : : .increment = 0
1831 : : }
1832 : : }, }
1833 : : }, }
1834 : : },
1835 : :
1836 : : };
1837 : :
1838 : :
1839 : : static const struct rte_security_capability sec_caps_templ[] = {
1840 : : { /* IPsec Lookaside Protocol ESP Tunnel Ingress */
1841 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1842 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1843 : : .ipsec = {
1844 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1845 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1846 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1847 : : .options = { 0 },
1848 : : },
1849 : : .crypto_capabilities = NULL,
1850 : : },
1851 : : { /* IPsec Lookaside Protocol ESP Tunnel Egress */
1852 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1853 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1854 : : .ipsec = {
1855 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1856 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1857 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1858 : : .options = { 0 },
1859 : : },
1860 : : .crypto_capabilities = NULL,
1861 : : },
1862 : : { /* IPsec Lookaside Protocol ESP Transport Ingress */
1863 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1864 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1865 : : .ipsec = {
1866 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1867 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1868 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1869 : : .options = { 0 },
1870 : : },
1871 : : .crypto_capabilities = NULL,
1872 : : },
1873 : : { /* IPsec Lookaside Protocol ESP Transport Egress */
1874 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1875 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1876 : : .ipsec = {
1877 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1878 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1879 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1880 : : .options = { 0 },
1881 : : },
1882 : : .crypto_capabilities = NULL,
1883 : : },
1884 : : { /* IPsec Lookaside Protocol AH Tunnel Ingress */
1885 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1886 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1887 : : .ipsec = {
1888 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1889 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1890 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1891 : : .options = { 0 },
1892 : : },
1893 : : .crypto_capabilities = NULL,
1894 : : },
1895 : : { /* IPsec Lookaside Protocol AH Tunnel Egress */
1896 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1897 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1898 : : .ipsec = {
1899 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1900 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1901 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1902 : : .options = { 0 },
1903 : : },
1904 : : .crypto_capabilities = NULL,
1905 : : },
1906 : : { /* IPsec Lookaside Protocol AH Transport Ingress */
1907 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1908 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1909 : : .ipsec = {
1910 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1911 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1912 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1913 : : .options = { 0 },
1914 : : },
1915 : : .crypto_capabilities = NULL,
1916 : : },
1917 : : { /* IPsec Lookaside Protocol AH Transport Egress */
1918 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1919 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1920 : : .ipsec = {
1921 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1922 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1923 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1924 : : .options = { 0 },
1925 : : },
1926 : : .crypto_capabilities = NULL,
1927 : : },
1928 : : { /* TLS 1.2 Record Read */
1929 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1930 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1931 : : .tls_record = {
1932 : : .ver = RTE_SECURITY_VERSION_TLS_1_2,
1933 : : .type = RTE_SECURITY_TLS_SESS_TYPE_READ,
1934 : : .ar_win_size = 0,
1935 : : },
1936 : : .crypto_capabilities = NULL,
1937 : : },
1938 : : { /* TLS 1.2 Record Write */
1939 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1940 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1941 : : .tls_record = {
1942 : : .ver = RTE_SECURITY_VERSION_TLS_1_2,
1943 : : .type = RTE_SECURITY_TLS_SESS_TYPE_WRITE,
1944 : : .ar_win_size = 0,
1945 : : },
1946 : : .crypto_capabilities = NULL,
1947 : : },
1948 : : { /* DTLS 1.2 Record Read */
1949 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1950 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1951 : : .tls_record = {
1952 : : .ver = RTE_SECURITY_VERSION_DTLS_1_2,
1953 : : .type = RTE_SECURITY_TLS_SESS_TYPE_READ,
1954 : : .ar_win_size = 0,
1955 : : },
1956 : : .crypto_capabilities = NULL,
1957 : : },
1958 : : { /* DTLS 1.2 Record Write */
1959 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1960 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1961 : : .tls_record = {
1962 : : .ver = RTE_SECURITY_VERSION_DTLS_1_2,
1963 : : .type = RTE_SECURITY_TLS_SESS_TYPE_WRITE,
1964 : : .ar_win_size = 0,
1965 : : },
1966 : : .crypto_capabilities = NULL,
1967 : : },
1968 : : { /* TLS 1.3 Record Read */
1969 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1970 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1971 : : .tls_record = {
1972 : : .ver = RTE_SECURITY_VERSION_TLS_1_3,
1973 : : .type = RTE_SECURITY_TLS_SESS_TYPE_READ,
1974 : : .ar_win_size = 0,
1975 : : },
1976 : : .crypto_capabilities = NULL,
1977 : : },
1978 : : { /* TLS 1.3 Record Write */
1979 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1980 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1981 : : .tls_record = {
1982 : : .ver = RTE_SECURITY_VERSION_TLS_1_3,
1983 : : .type = RTE_SECURITY_TLS_SESS_TYPE_WRITE,
1984 : : .ar_win_size = 0,
1985 : : },
1986 : : .crypto_capabilities = NULL,
1987 : : },
1988 : : {
1989 : : .action = RTE_SECURITY_ACTION_TYPE_NONE
1990 : : }
1991 : : };
1992 : :
1993 : : static void
1994 : 0 : cpt_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
1995 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
1996 : : {
1997 [ # # ]: 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_CPT_MAX_CAPS);
1998 : :
1999 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
2000 : 0 : *cur_pos += nb_caps;
2001 : 0 : }
2002 : :
2003 : : static void
2004 : 0 : cn10k_20k_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[])
2005 : : {
2006 : :
2007 : : struct rte_cryptodev_capabilities *caps;
2008 : : int i = 0;
2009 : :
2010 [ # # ]: 0 : while ((caps = &cnxk_caps[i++])->op != RTE_CRYPTO_OP_TYPE_UNDEFINED) {
2011 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
2012 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_CIPHER) &&
2013 [ # # ]: 0 : ((caps->sym.cipher.algo == RTE_CRYPTO_CIPHER_ZUC_EEA3) ||
2014 : : (caps->sym.cipher.algo == RTE_CRYPTO_CIPHER_ZUC_NEA6))) {
2015 : :
2016 : 0 : caps->sym.cipher.key_size.max = 32;
2017 [ # # ]: 0 : caps->sym.cipher.key_size.increment = 16;
2018 [ # # ]: 0 : if (roc_model_is_cn20k())
2019 : 0 : caps->sym.cipher.iv_size.max = 16;
2020 : : else
2021 : 0 : caps->sym.cipher.iv_size.max = 25;
2022 : 0 : caps->sym.cipher.iv_size.increment = 1;
2023 : : }
2024 : :
2025 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
2026 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH) &&
2027 [ # # ]: 0 : ((caps->sym.auth.algo == RTE_CRYPTO_AUTH_ZUC_EIA3) ||
2028 : : (caps->sym.auth.algo == RTE_CRYPTO_AUTH_ZUC_NIA6))) {
2029 : 0 : caps->sym.auth.key_size.max = 32;
2030 : 0 : caps->sym.auth.key_size.increment = 16;
2031 : 0 : caps->sym.auth.digest_size.max = 16;
2032 : 0 : caps->sym.auth.digest_size.increment = 4;
2033 : 0 : caps->sym.auth.iv_size.max = 25;
2034 : 0 : caps->sym.auth.iv_size.increment = 1;
2035 : : }
2036 : : }
2037 : 0 : }
2038 : :
2039 : : static void
2040 : : cn9k_crypto_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos)
2041 : : {
2042 : 0 : cpt_caps_add(cnxk_caps, cur_pos, caps_docsis, RTE_DIM(caps_docsis));
2043 : 0 : }
2044 : :
2045 : : static void
2046 : 0 : cn10k_20k_crypto_caps_add(struct rte_cryptodev_capabilities cnxk_caps[],
2047 : : union cpt_eng_caps *hw_caps, int *cur_pos)
2048 : : {
2049 [ # # ]: 0 : if (hw_caps[CPT_ENG_TYPE_SE].sg_ver2) {
2050 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm3);
# # ]
2051 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm4);
# # ]
2052 : : }
2053 : :
2054 [ # # ]: 0 : if (hw_caps[CPT_ENG_TYPE_AE].sm2)
2055 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm2);
# # ]
2056 : :
2057 [ # # ]: 0 : if (hw_caps[CPT_ENG_TYPE_AE].eddsa)
2058 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, eddsa);
# # ]
2059 : 0 : }
2060 : :
2061 : : static void
2062 : 0 : crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
2063 : : union cpt_eng_caps *hw_caps)
2064 : : {
2065 : 0 : int cur_pos = 0;
2066 : :
2067 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, mul);
# # ]
2068 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
2069 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha3);
# # ]
2070 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, chacha20);
# # ]
2071 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, zuc_snow3g);
# # ]
2072 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
2073 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, kasumi);
# # ]
2074 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
2075 : :
2076 [ # # ]: 0 : if (roc_model_is_cn9k())
2077 : : cn9k_crypto_caps_add(cnxk_caps, &cur_pos);
2078 : :
2079 [ # # # # ]: 0 : if (roc_model_is_cn10k() || roc_model_is_cn20k())
2080 : 0 : cn10k_20k_crypto_caps_add(cnxk_caps, hw_caps, &cur_pos);
2081 : :
2082 [ # # ]: 0 : if (roc_model_is_cn20k())
2083 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, zuc256_snow5g);
# # ]
2084 : :
2085 : 0 : cpt_caps_add(cnxk_caps, &cur_pos, caps_null, RTE_DIM(caps_null));
2086 : 0 : cpt_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
2087 : :
2088 [ # # # # ]: 0 : if (roc_model_is_cn10k() || roc_model_is_cn20k())
2089 : 0 : cn10k_20k_crypto_caps_update(cnxk_caps);
2090 : 0 : }
2091 : :
2092 : : const struct rte_cryptodev_capabilities *
2093 : 0 : cnxk_crypto_capabilities_get(struct cnxk_cpt_vf *vf)
2094 : : {
2095 : 0 : return vf->crypto_caps;
2096 : : }
2097 : :
2098 : : static void
2099 : : sec_ipsec_caps_limit_check(int *cur_pos, int nb_caps)
2100 : : {
2101 : 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_SEC_IPSEC_CRYPTO_MAX_CAPS);
2102 : : }
2103 : :
2104 : : static void
2105 [ # # ]: 0 : sec_ipsec_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
2106 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
2107 : : {
2108 : : sec_ipsec_caps_limit_check(cur_pos, nb_caps);
2109 : :
2110 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
2111 : 0 : *cur_pos += nb_caps;
2112 : 0 : }
2113 : :
2114 : : static void
2115 [ # # ]: 0 : cn10k_sec_ipsec_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos)
2116 : : {
2117 : : const struct rte_cryptodev_capabilities *cap;
2118 : : unsigned int i;
2119 : :
2120 : : sec_ipsec_caps_limit_check(cur_pos, 1);
2121 : :
2122 : : /* NULL auth */
2123 [ # # ]: 0 : for (i = 0; i < RTE_DIM(caps_null); i++) {
2124 : : cap = &caps_null[i];
2125 [ # # ]: 0 : if (cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH &&
2126 : : cap->sym.auth.algo == RTE_CRYPTO_AUTH_NULL) {
2127 : 0 : cnxk_caps[*cur_pos] = caps_null[i];
2128 : 0 : *cur_pos += 1;
2129 : : }
2130 : : }
2131 : 0 : }
2132 : :
2133 : : static void
2134 : : cn9k_sec_ipsec_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[])
2135 : : {
2136 : :
2137 : : struct rte_cryptodev_capabilities *caps;
2138 : : int i = 0;
2139 : :
2140 [ # # ]: 0 : while ((caps = &cnxk_caps[i++])->op != RTE_CRYPTO_OP_TYPE_UNDEFINED) {
2141 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
2142 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH) &&
2143 : : (caps->sym.auth.algo == RTE_CRYPTO_AUTH_SHA256_HMAC)) {
2144 : 0 : caps->sym.auth.key_size.min = 32;
2145 : 0 : caps->sym.auth.key_size.max = 64;
2146 : 0 : caps->sym.auth.key_size.increment = 1;
2147 : :
2148 : 0 : break;
2149 : : }
2150 : : }
2151 : : }
2152 : :
2153 : : static void
2154 : 0 : sec_ipsec_crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
2155 : : union cpt_eng_caps *hw_caps)
2156 : : {
2157 : 0 : int cur_pos = 0;
2158 : :
2159 [ # # # # : 0 : SEC_IPSEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
2160 [ # # # # : 0 : SEC_IPSEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
2161 [ # # # # : 0 : SEC_IPSEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
2162 : :
2163 [ # # # # ]: 0 : if (roc_model_is_cn10k() || roc_model_is_cn20k())
2164 : 0 : cn10k_sec_ipsec_crypto_caps_update(cnxk_caps, &cur_pos);
2165 : : else
2166 : : cn9k_sec_ipsec_crypto_caps_update(cnxk_caps);
2167 : :
2168 : 0 : sec_ipsec_caps_add(cnxk_caps, &cur_pos, sec_ipsec_caps_null, RTE_DIM(sec_ipsec_caps_null));
2169 : 0 : sec_ipsec_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
2170 : 0 : }
2171 : :
2172 : : static void
2173 : : cnxk_sec_ipsec_caps_update(struct rte_security_capability *sec_cap)
2174 : : {
2175 : 0 : sec_cap->ipsec.options.udp_encap = 1;
2176 : 0 : sec_cap->ipsec.options.copy_df = 1;
2177 : 0 : sec_cap->ipsec.options.copy_dscp = 1;
2178 : : }
2179 : :
2180 : : static void
2181 : : cn10k_sec_ipsec_caps_update(struct rte_security_capability *sec_cap)
2182 : : {
2183 [ # # ]: 0 : if (sec_cap->ipsec.direction == RTE_SECURITY_IPSEC_SA_DIR_EGRESS) {
2184 : : #ifdef LA_IPSEC_DEBUG
2185 : : sec_cap->ipsec.options.iv_gen_disable = 1;
2186 : : #endif
2187 : : } else {
2188 : 0 : sec_cap->ipsec.options.udp_ports_verify = 1;
2189 [ # # ]: 0 : if (sec_cap->ipsec.mode == RTE_SECURITY_IPSEC_SA_MODE_TUNNEL)
2190 : 0 : sec_cap->ipsec.options.tunnel_hdr_verify =
2191 : : RTE_SECURITY_IPSEC_TUNNEL_VERIFY_SRC_DST_ADDR;
2192 : : }
2193 : 0 : sec_cap->ipsec.options.dec_ttl = 1;
2194 : 0 : sec_cap->ipsec.options.ip_csum_enable = 1;
2195 : 0 : sec_cap->ipsec.options.l4_csum_enable = 1;
2196 : 0 : sec_cap->ipsec.options.stats = 1;
2197 : 0 : sec_cap->ipsec.options.esn = 1;
2198 : 0 : sec_cap->ipsec.options.copy_flabel = 1;
2199 : 0 : sec_cap->ipsec.replay_win_sz_max = ROC_AR_WIN_SIZE_MAX;
2200 : 0 : }
2201 : :
2202 : : static void
2203 : : cn9k_sec_ipsec_caps_update(struct rte_security_capability *sec_cap)
2204 : : {
2205 [ # # ]: 0 : if (sec_cap->ipsec.direction == RTE_SECURITY_IPSEC_SA_DIR_EGRESS)
2206 : 0 : sec_cap->ipsec.options.iv_gen_disable = 1;
2207 : :
2208 : 0 : sec_cap->ipsec.replay_win_sz_max = CNXK_ON_AR_WIN_SIZE_MAX;
2209 : 0 : sec_cap->ipsec.options.esn = 1;
2210 : 0 : }
2211 : :
2212 : : static void
2213 : : sec_tls12_caps_limit_check(int *cur_pos, int nb_caps)
2214 : : {
2215 : 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_SEC_TLS_1_2_CRYPTO_MAX_CAPS);
2216 : : }
2217 : :
2218 : : static void
2219 [ # # ]: 0 : sec_tls12_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
2220 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
2221 : : {
2222 : : sec_tls12_caps_limit_check(cur_pos, nb_caps);
2223 : :
2224 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
2225 : 0 : *cur_pos += nb_caps;
2226 : 0 : }
2227 : :
2228 : : static void
2229 : 0 : sec_tls12_crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
2230 : : union cpt_eng_caps *hw_caps)
2231 : : {
2232 : 0 : int cur_pos = 0;
2233 : :
2234 [ # # # # : 0 : SEC_TLS12_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
2235 [ # # # # : 0 : SEC_TLS12_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
2236 [ # # # # : 0 : SEC_TLS12_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
2237 : :
2238 : 0 : sec_tls12_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
2239 : 0 : }
2240 : :
2241 : : static void
2242 : : sec_tls13_caps_limit_check(int *cur_pos, int nb_caps)
2243 : : {
2244 : 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_SEC_TLS_1_3_CRYPTO_MAX_CAPS);
2245 : : }
2246 : :
2247 : : static void
2248 [ # # ]: 0 : sec_tls13_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
2249 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
2250 : : {
2251 : : sec_tls13_caps_limit_check(cur_pos, nb_caps);
2252 : :
2253 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
2254 : 0 : *cur_pos += nb_caps;
2255 : 0 : }
2256 : :
2257 : : static void
2258 : 0 : sec_tls13_crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
2259 : : union cpt_eng_caps *hw_caps)
2260 : : {
2261 : 0 : int cur_pos = 0;
2262 : :
2263 [ # # # # : 0 : SEC_TLS13_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
2264 : :
2265 : 0 : sec_tls13_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
2266 : 0 : }
2267 : :
2268 : : void
2269 : 0 : cnxk_cpt_caps_populate(struct cnxk_cpt_vf *vf)
2270 : : {
2271 : : unsigned long i;
2272 : :
2273 : 0 : crypto_caps_populate(vf->crypto_caps, vf->cpt.hw_caps);
2274 : 0 : sec_ipsec_crypto_caps_populate(vf->sec_ipsec_crypto_caps, vf->cpt.hw_caps);
2275 : :
2276 [ # # ]: 0 : if (vf->cpt.hw_caps[CPT_ENG_TYPE_SE].tls) {
2277 : 0 : sec_tls12_crypto_caps_populate(vf->sec_tls_1_2_crypto_caps, vf->cpt.hw_caps);
2278 : 0 : sec_tls12_crypto_caps_populate(vf->sec_dtls_1_2_crypto_caps, vf->cpt.hw_caps);
2279 : 0 : sec_tls13_crypto_caps_populate(vf->sec_tls_1_3_crypto_caps, vf->cpt.hw_caps);
2280 : : }
2281 : :
2282 : : PLT_STATIC_ASSERT(RTE_DIM(sec_caps_templ) <= RTE_DIM(vf->sec_caps));
2283 : 0 : memcpy(vf->sec_caps, sec_caps_templ, sizeof(sec_caps_templ));
2284 : :
2285 [ # # ]: 0 : for (i = 0; i < RTE_DIM(sec_caps_templ) - 1; i++) {
2286 : :
2287 [ # # ]: 0 : if (vf->sec_caps[i].protocol == RTE_SECURITY_PROTOCOL_IPSEC) {
2288 [ # # ]: 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_ipsec_crypto_caps;
2289 : :
2290 : : cnxk_sec_ipsec_caps_update(&vf->sec_caps[i]);
2291 : :
2292 [ # # # # ]: 0 : if (roc_model_is_cn10k() || roc_model_is_cn20k())
2293 : : cn10k_sec_ipsec_caps_update(&vf->sec_caps[i]);
2294 : :
2295 [ # # ]: 0 : if (roc_model_is_cn9k())
2296 : : cn9k_sec_ipsec_caps_update(&vf->sec_caps[i]);
2297 [ # # ]: 0 : } else if (vf->sec_caps[i].protocol == RTE_SECURITY_PROTOCOL_TLS_RECORD) {
2298 [ # # ]: 0 : if (vf->sec_caps[i].tls_record.ver == RTE_SECURITY_VERSION_TLS_1_3)
2299 : 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_tls_1_3_crypto_caps;
2300 [ # # ]: 0 : else if (vf->sec_caps[i].tls_record.ver == RTE_SECURITY_VERSION_DTLS_1_2)
2301 : 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_dtls_1_2_crypto_caps;
2302 : : else
2303 : 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_tls_1_2_crypto_caps;
2304 : : }
2305 : : }
2306 : 0 : }
2307 : :
2308 : : const struct rte_security_capability *
2309 : 0 : cnxk_crypto_sec_capabilities_get(void *device)
2310 : : {
2311 : : struct rte_cryptodev *dev = device;
2312 : : struct cnxk_cpt_vf *vf;
2313 : :
2314 : 0 : vf = dev->data->dev_private;
2315 : 0 : return vf->sec_caps;
2316 : : }
|