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_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_caps_add(cnxk_caps, cur_pos, sec_caps_##name, \
29 : : RTE_DIM(sec_caps_##name)); \
30 : : } while (0)
31 : :
32 : : static const struct rte_cryptodev_capabilities caps_mul[] = {
33 : : { /* RSA */
34 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
35 : : {.asym = {
36 : : .xform_capa = {
37 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_RSA,
38 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
39 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY) |
40 : : (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) |
41 : : (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)),
42 : : {.modlen = {
43 : : .min = 17,
44 : : .max = 1024,
45 : : .increment = 1
46 : : }, }
47 : : }
48 : : }, }
49 : : },
50 : : { /* MOD_EXP */
51 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
52 : : {.asym = {
53 : : .xform_capa = {
54 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX,
55 : : .op_types = 0,
56 : : {.modlen = {
57 : : .min = 17,
58 : : .max = 1024,
59 : : .increment = 1
60 : : }, }
61 : : }
62 : : }, }
63 : : },
64 : : { /* ECDSA */
65 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
66 : : {.asym = {
67 : : .xform_capa = {
68 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_ECDSA,
69 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
70 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY)),
71 : : }
72 : : },
73 : : }
74 : : },
75 : : { /* ECPM */
76 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
77 : : {.asym = {
78 : : .xform_capa = {
79 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_ECPM,
80 : : .op_types = 0
81 : : }
82 : : },
83 : : }
84 : : },
85 : : { /* ECFPM */
86 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
87 : : {.asym = {
88 : : .xform_capa = {
89 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_ECFPM,
90 : : .op_types = 0
91 : : }
92 : : },
93 : : }
94 : : },
95 : : { /* ECDH */
96 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
97 : : {.asym = {
98 : : .xform_capa = {
99 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_ECDH,
100 : : .op_types = ((1 << RTE_CRYPTO_ASYM_KE_PRIV_KEY_GENERATE) |
101 : : (1 << RTE_CRYPTO_ASYM_KE_PUB_KEY_GENERATE) |
102 : : (1 << RTE_CRYPTO_ASYM_KE_PUB_KEY_VERIFY) |
103 : : (1 << RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE)
104 : : ),
105 : : }
106 : : },
107 : : }
108 : : },
109 : : };
110 : :
111 : : static const struct rte_cryptodev_capabilities caps_sha1_sha2[] = {
112 : : { /* SHA1 */
113 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
114 : : {.sym = {
115 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
116 : : {.auth = {
117 : : .algo = RTE_CRYPTO_AUTH_SHA1,
118 : : .block_size = 64,
119 : : .key_size = {
120 : : .min = 0,
121 : : .max = 0,
122 : : .increment = 0
123 : : },
124 : : .digest_size = {
125 : : .min = 1,
126 : : .max = 20,
127 : : .increment = 1
128 : : },
129 : : }, }
130 : : }, }
131 : : },
132 : : { /* SHA1 HMAC */
133 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
134 : : {.sym = {
135 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
136 : : {.auth = {
137 : : .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
138 : : .block_size = 64,
139 : : .key_size = {
140 : : .min = 1,
141 : : .max = 1024,
142 : : .increment = 1
143 : : },
144 : : .digest_size = {
145 : : .min = 1,
146 : : .max = 20,
147 : : .increment = 1
148 : : },
149 : : }, }
150 : : }, }
151 : : },
152 : : { /* SHA224 */
153 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
154 : : {.sym = {
155 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
156 : : {.auth = {
157 : : .algo = RTE_CRYPTO_AUTH_SHA224,
158 : : .block_size = 64,
159 : : .key_size = {
160 : : .min = 0,
161 : : .max = 0,
162 : : .increment = 0
163 : : },
164 : : .digest_size = {
165 : : .min = 1,
166 : : .max = 28,
167 : : .increment = 1
168 : : },
169 : : }, }
170 : : }, }
171 : : },
172 : : { /* SHA224 HMAC */
173 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
174 : : {.sym = {
175 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
176 : : {.auth = {
177 : : .algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
178 : : .block_size = 64,
179 : : .key_size = {
180 : : .min = 1,
181 : : .max = 1024,
182 : : .increment = 1
183 : : },
184 : : .digest_size = {
185 : : .min = 1,
186 : : .max = 28,
187 : : .increment = 1
188 : : },
189 : : }, }
190 : : }, }
191 : : },
192 : : { /* SHA256 */
193 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
194 : : {.sym = {
195 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
196 : : {.auth = {
197 : : .algo = RTE_CRYPTO_AUTH_SHA256,
198 : : .block_size = 64,
199 : : .key_size = {
200 : : .min = 0,
201 : : .max = 0,
202 : : .increment = 0
203 : : },
204 : : .digest_size = {
205 : : .min = 1,
206 : : .max = 32,
207 : : .increment = 1
208 : : },
209 : : }, }
210 : : }, }
211 : : },
212 : : { /* SHA256 HMAC */
213 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
214 : : {.sym = {
215 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
216 : : {.auth = {
217 : : .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
218 : : .block_size = 64,
219 : : .key_size = {
220 : : .min = 1,
221 : : .max = 1024,
222 : : .increment = 1
223 : : },
224 : : .digest_size = {
225 : : .min = 1,
226 : : .max = 32,
227 : : .increment = 1
228 : : },
229 : : }, }
230 : : }, }
231 : : },
232 : : { /* SHA384 */
233 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
234 : : {.sym = {
235 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
236 : : {.auth = {
237 : : .algo = RTE_CRYPTO_AUTH_SHA384,
238 : : .block_size = 64,
239 : : .key_size = {
240 : : .min = 0,
241 : : .max = 0,
242 : : .increment = 0
243 : : },
244 : : .digest_size = {
245 : : .min = 1,
246 : : .max = 48,
247 : : .increment = 1
248 : : },
249 : : }, }
250 : : }, }
251 : : },
252 : : { /* SHA384 HMAC */
253 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
254 : : {.sym = {
255 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
256 : : {.auth = {
257 : : .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
258 : : .block_size = 64,
259 : : .key_size = {
260 : : .min = 1,
261 : : .max = 1024,
262 : : .increment = 1
263 : : },
264 : : .digest_size = {
265 : : .min = 1,
266 : : .max = 48,
267 : : .increment = 1
268 : : },
269 : : }, }
270 : : }, }
271 : : },
272 : : { /* SHA512 */
273 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
274 : : {.sym = {
275 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
276 : : {.auth = {
277 : : .algo = RTE_CRYPTO_AUTH_SHA512,
278 : : .block_size = 128,
279 : : .key_size = {
280 : : .min = 0,
281 : : .max = 0,
282 : : .increment = 0
283 : : },
284 : : .digest_size = {
285 : : .min = 1,
286 : : .max = 64,
287 : : .increment = 1
288 : : },
289 : : }, }
290 : : }, }
291 : : },
292 : : { /* SHA512 HMAC */
293 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
294 : : {.sym = {
295 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
296 : : {.auth = {
297 : : .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
298 : : .block_size = 128,
299 : : .key_size = {
300 : : .min = 1,
301 : : .max = 1024,
302 : : .increment = 1
303 : : },
304 : : .digest_size = {
305 : : .min = 1,
306 : : .max = 64,
307 : : .increment = 1
308 : : },
309 : : }, }
310 : : }, }
311 : : },
312 : : { /* MD5 */
313 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
314 : : {.sym = {
315 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
316 : : {.auth = {
317 : : .algo = RTE_CRYPTO_AUTH_MD5,
318 : : .block_size = 64,
319 : : .key_size = {
320 : : .min = 0,
321 : : .max = 0,
322 : : .increment = 0
323 : : },
324 : : .digest_size = {
325 : : .min = 1,
326 : : .max = 16,
327 : : .increment = 1
328 : : },
329 : : }, }
330 : : }, }
331 : : },
332 : : { /* MD5 HMAC */
333 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
334 : : {.sym = {
335 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
336 : : {.auth = {
337 : : .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
338 : : .block_size = 64,
339 : : .key_size = {
340 : : .min = 8,
341 : : .max = 64,
342 : : .increment = 8
343 : : },
344 : : .digest_size = {
345 : : .min = 1,
346 : : .max = 16,
347 : : .increment = 1
348 : : },
349 : : }, }
350 : : }, }
351 : : },
352 : : };
353 : :
354 : : static const struct rte_cryptodev_capabilities caps_sm3[] = {
355 : : { /* SM3 */
356 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
357 : : {.sym = {
358 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
359 : : {.auth = {
360 : : .algo = RTE_CRYPTO_AUTH_SM3,
361 : : .block_size = 64,
362 : : .key_size = {
363 : : .min = 0,
364 : : .max = 0,
365 : : .increment = 0
366 : : },
367 : : .digest_size = {
368 : : .min = 32,
369 : : .max = 32,
370 : : .increment = 0
371 : : },
372 : : }, }
373 : : }, }
374 : : }
375 : : };
376 : :
377 : : static const struct rte_cryptodev_capabilities caps_sha3[] = {
378 : : { /* SHA3_224 */
379 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
380 : : {.sym = {
381 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
382 : : {.auth = {
383 : : .algo = RTE_CRYPTO_AUTH_SHA3_224,
384 : : .block_size = 144,
385 : : .key_size = {
386 : : .min = 0,
387 : : .max = 0,
388 : : .increment = 0
389 : : },
390 : : .digest_size = {
391 : : .min = 1,
392 : : .max = 28,
393 : : .increment = 1
394 : : },
395 : : }, }
396 : : }, }
397 : : },
398 : : { /* SHA3_224 HMAC */
399 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
400 : : {.sym = {
401 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
402 : : {.auth = {
403 : : .algo = RTE_CRYPTO_AUTH_SHA3_224_HMAC,
404 : : .block_size = 144,
405 : : .key_size = {
406 : : .min = 1,
407 : : .max = 1024,
408 : : .increment = 1
409 : : },
410 : : .digest_size = {
411 : : .min = 1,
412 : : .max = 28,
413 : : .increment = 1
414 : : },
415 : : }, }
416 : : }, }
417 : : },
418 : : { /* SHA3_256 */
419 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
420 : : {.sym = {
421 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
422 : : {.auth = {
423 : : .algo = RTE_CRYPTO_AUTH_SHA3_256,
424 : : .block_size = 136,
425 : : .key_size = {
426 : : .min = 0,
427 : : .max = 0,
428 : : .increment = 0
429 : : },
430 : : .digest_size = {
431 : : .min = 1,
432 : : .max = 32,
433 : : .increment = 1
434 : : },
435 : : }, }
436 : : }, }
437 : : },
438 : : { /* SHA3_256 HMAC */
439 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
440 : : {.sym = {
441 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
442 : : {.auth = {
443 : : .algo = RTE_CRYPTO_AUTH_SHA3_256_HMAC,
444 : : .block_size = 136,
445 : : .key_size = {
446 : : .min = 1,
447 : : .max = 1024,
448 : : .increment = 1
449 : : },
450 : : .digest_size = {
451 : : .min = 1,
452 : : .max = 32,
453 : : .increment = 1
454 : : },
455 : : }, }
456 : : }, }
457 : : },
458 : : { /* SHA3_384 */
459 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
460 : : {.sym = {
461 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
462 : : {.auth = {
463 : : .algo = RTE_CRYPTO_AUTH_SHA3_384,
464 : : .block_size = 104,
465 : : .key_size = {
466 : : .min = 0,
467 : : .max = 0,
468 : : .increment = 0
469 : : },
470 : : .digest_size = {
471 : : .min = 1,
472 : : .max = 48,
473 : : .increment = 0
474 : : },
475 : : }, }
476 : : }, }
477 : : },
478 : : { /* SHA3_384 HMAC */
479 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
480 : : {.sym = {
481 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
482 : : {.auth = {
483 : : .algo = RTE_CRYPTO_AUTH_SHA3_384_HMAC,
484 : : .block_size = 104,
485 : : .key_size = {
486 : : .min = 1,
487 : : .max = 1024,
488 : : .increment = 1
489 : : },
490 : : .digest_size = {
491 : : .min = 1,
492 : : .max = 48,
493 : : .increment = 1
494 : : },
495 : : }, }
496 : : }, }
497 : : },
498 : : { /* SHA3_512 */
499 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
500 : : {.sym = {
501 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
502 : : {.auth = {
503 : : .algo = RTE_CRYPTO_AUTH_SHA3_512,
504 : : .block_size = 72,
505 : : .key_size = {
506 : : .min = 0,
507 : : .max = 0,
508 : : .increment = 0
509 : : },
510 : : .digest_size = {
511 : : .min = 1,
512 : : .max = 64,
513 : : .increment = 1
514 : : },
515 : : }, }
516 : : }, }
517 : : },
518 : : { /* SHA3_512 HMAC */
519 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
520 : : {.sym = {
521 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
522 : : {.auth = {
523 : : .algo = RTE_CRYPTO_AUTH_SHA3_512_HMAC,
524 : : .block_size = 72,
525 : : .key_size = {
526 : : .min = 1,
527 : : .max = 1024,
528 : : .increment = 1
529 : : },
530 : : .digest_size = {
531 : : .min = 1,
532 : : .max = 64,
533 : : .increment = 1
534 : : },
535 : : }, }
536 : : }, }
537 : : },
538 : : { /* SHAKE_128 */
539 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
540 : : {.sym = {
541 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
542 : : {.auth = {
543 : : .algo = RTE_CRYPTO_AUTH_SHAKE_128,
544 : : .block_size = 168,
545 : : .key_size = {
546 : : .min = 0,
547 : : .max = 0,
548 : : .increment = 0
549 : : },
550 : : .digest_size = {
551 : : .min = 1,
552 : : .max = 255,
553 : : .increment = 1
554 : : },
555 : : }, }
556 : : }, }
557 : : },
558 : : { /* SHAKE_256 */
559 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
560 : : {.sym = {
561 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
562 : : {.auth = {
563 : : .algo = RTE_CRYPTO_AUTH_SHAKE_256,
564 : : .block_size = 136,
565 : : .key_size = {
566 : : .min = 0,
567 : : .max = 0,
568 : : .increment = 0
569 : : },
570 : : .digest_size = {
571 : : .min = 1,
572 : : .max = 255,
573 : : .increment = 1
574 : : },
575 : : }, }
576 : : }, }
577 : : },
578 : : };
579 : :
580 : : static const struct rte_cryptodev_capabilities caps_chacha20[] = {
581 : : { /* Chacha20-Poly1305 */
582 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
583 : : {.sym = {
584 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
585 : : {.aead = {
586 : : .algo = RTE_CRYPTO_AEAD_CHACHA20_POLY1305,
587 : : .block_size = 64,
588 : : .key_size = {
589 : : .min = 32,
590 : : .max = 32,
591 : : .increment = 0
592 : : },
593 : : .digest_size = {
594 : : .min = 16,
595 : : .max = 16,
596 : : .increment = 0
597 : : },
598 : : .aad_size = {
599 : : .min = 0,
600 : : .max = 1024,
601 : : .increment = 1
602 : : },
603 : : .iv_size = {
604 : : .min = 12,
605 : : .max = 12,
606 : : .increment = 0
607 : : },
608 : : }, }
609 : : }, }
610 : : }
611 : : };
612 : :
613 : : static const struct rte_cryptodev_capabilities caps_zuc_snow3g[] = {
614 : : { /* SNOW 3G (UEA2) */
615 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
616 : : {.sym = {
617 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
618 : : {.cipher = {
619 : : .algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
620 : : .block_size = 16,
621 : : .key_size = {
622 : : .min = 16,
623 : : .max = 16,
624 : : .increment = 0
625 : : },
626 : : .iv_size = {
627 : : .min = 16,
628 : : .max = 16,
629 : : .increment = 0
630 : : }
631 : : }, }
632 : : }, }
633 : : },
634 : : { /* ZUC (EEA3) */
635 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
636 : : {.sym = {
637 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
638 : : {.cipher = {
639 : : .algo = RTE_CRYPTO_CIPHER_ZUC_EEA3,
640 : : .block_size = 16,
641 : : .key_size = {
642 : : .min = 16,
643 : : .max = 16,
644 : : .increment = 0
645 : : },
646 : : .iv_size = {
647 : : .min = 16,
648 : : .max = 16,
649 : : .increment = 0
650 : : }
651 : : }, }
652 : : }, }
653 : : },
654 : : { /* SNOW 3G (UIA2) */
655 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
656 : : {.sym = {
657 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
658 : : {.auth = {
659 : : .algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
660 : : .block_size = 16,
661 : : .key_size = {
662 : : .min = 16,
663 : : .max = 16,
664 : : .increment = 0
665 : : },
666 : : .digest_size = {
667 : : .min = 4,
668 : : .max = 4,
669 : : .increment = 0
670 : : },
671 : : .iv_size = {
672 : : .min = 16,
673 : : .max = 16,
674 : : .increment = 0
675 : : }
676 : : }, }
677 : : }, }
678 : : },
679 : : { /* ZUC (EIA3) */
680 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
681 : : {.sym = {
682 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
683 : : {.auth = {
684 : : .algo = RTE_CRYPTO_AUTH_ZUC_EIA3,
685 : : .block_size = 16,
686 : : .key_size = {
687 : : .min = 16,
688 : : .max = 16,
689 : : .increment = 0
690 : : },
691 : : .digest_size = {
692 : : .min = 4,
693 : : .max = 4,
694 : : .increment = 0
695 : : },
696 : : .iv_size = {
697 : : .min = 16,
698 : : .max = 16,
699 : : .increment = 0
700 : : }
701 : : }, }
702 : : }, }
703 : : },
704 : : };
705 : :
706 : : static const struct rte_cryptodev_capabilities caps_aes[] = {
707 : : { /* AES GMAC (AUTH) */
708 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
709 : : {.sym = {
710 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
711 : : {.auth = {
712 : : .algo = RTE_CRYPTO_AUTH_AES_GMAC,
713 : : .block_size = 16,
714 : : .key_size = {
715 : : .min = 16,
716 : : .max = 32,
717 : : .increment = 8
718 : : },
719 : : .digest_size = {
720 : : .min = 8,
721 : : .max = 16,
722 : : .increment = 4
723 : : },
724 : : .iv_size = {
725 : : .min = 12,
726 : : .max = 12,
727 : : .increment = 0
728 : : }
729 : : }, }
730 : : }, }
731 : : },
732 : : { /* AES CBC */
733 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
734 : : {.sym = {
735 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
736 : : {.cipher = {
737 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
738 : : .block_size = 16,
739 : : .key_size = {
740 : : .min = 16,
741 : : .max = 32,
742 : : .increment = 8
743 : : },
744 : : .iv_size = {
745 : : .min = 16,
746 : : .max = 16,
747 : : .increment = 0
748 : : }
749 : : }, }
750 : : }, }
751 : : },
752 : : { /* AES CTR */
753 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
754 : : {.sym = {
755 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
756 : : {.cipher = {
757 : : .algo = RTE_CRYPTO_CIPHER_AES_CTR,
758 : : .block_size = 16,
759 : : .key_size = {
760 : : .min = 16,
761 : : .max = 32,
762 : : .increment = 8
763 : : },
764 : : .iv_size = {
765 : : .min = 12,
766 : : .max = 16,
767 : : .increment = 4
768 : : }
769 : : }, }
770 : : }, }
771 : : },
772 : : { /* AES XTS */
773 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
774 : : {.sym = {
775 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
776 : : {.cipher = {
777 : : .algo = RTE_CRYPTO_CIPHER_AES_XTS,
778 : : .block_size = 16,
779 : : .key_size = {
780 : : .min = 32,
781 : : .max = 64,
782 : : .increment = 32
783 : : },
784 : : .iv_size = {
785 : : .min = 16,
786 : : .max = 16,
787 : : .increment = 0
788 : : }
789 : : }, }
790 : : }, }
791 : : },
792 : : { /* AES GCM */
793 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
794 : : {.sym = {
795 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
796 : : {.aead = {
797 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
798 : : .block_size = 16,
799 : : .key_size = {
800 : : .min = 16,
801 : : .max = 32,
802 : : .increment = 8
803 : : },
804 : : .digest_size = {
805 : : .min = 4,
806 : : .max = 16,
807 : : .increment = 1
808 : : },
809 : : .aad_size = {
810 : : .min = 0,
811 : : .max = 1024,
812 : : .increment = 1
813 : : },
814 : : .iv_size = {
815 : : .min = 12,
816 : : .max = 12,
817 : : .increment = 0
818 : : }
819 : : }, }
820 : : }, }
821 : : },
822 : : { /* AES CCM */
823 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
824 : : {.sym = {
825 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
826 : : {.aead = {
827 : : .algo = RTE_CRYPTO_AEAD_AES_CCM,
828 : : .block_size = 16,
829 : : .key_size = {
830 : : .min = 16,
831 : : .max = 32,
832 : : .increment = 8
833 : : },
834 : : .digest_size = {
835 : : .min = 4,
836 : : .max = 16,
837 : : .increment = 1
838 : : },
839 : : .aad_size = {
840 : : .min = 0,
841 : : .max = 1024,
842 : : .increment = 1
843 : : },
844 : : .iv_size = {
845 : : .min = 11,
846 : : .max = 13,
847 : : .increment = 1
848 : : }
849 : : }, }
850 : : }, }
851 : : },
852 : : { /* AES CMAC */
853 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
854 : : {.sym = {
855 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
856 : : {.auth = {
857 : : .algo = RTE_CRYPTO_AUTH_AES_CMAC,
858 : : .block_size = 16,
859 : : .key_size = {
860 : : .min = 16,
861 : : .max = 32,
862 : : .increment = 8
863 : : },
864 : : .digest_size = {
865 : : .min = 4,
866 : : .max = 4,
867 : : .increment = 0
868 : : },
869 : : }, }
870 : : }, }
871 : : },
872 : : };
873 : :
874 : : static const struct rte_cryptodev_capabilities caps_kasumi[] = {
875 : : { /* KASUMI (F8) */
876 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
877 : : {.sym = {
878 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
879 : : {.cipher = {
880 : : .algo = RTE_CRYPTO_CIPHER_KASUMI_F8,
881 : : .block_size = 8,
882 : : .key_size = {
883 : : .min = 16,
884 : : .max = 16,
885 : : .increment = 0
886 : : },
887 : : .iv_size = {
888 : : .min = 8,
889 : : .max = 8,
890 : : .increment = 0
891 : : }
892 : : }, }
893 : : }, }
894 : : },
895 : : { /* KASUMI (F9) */
896 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
897 : : {.sym = {
898 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
899 : : {.auth = {
900 : : .algo = RTE_CRYPTO_AUTH_KASUMI_F9,
901 : : .block_size = 8,
902 : : .key_size = {
903 : : .min = 16,
904 : : .max = 16,
905 : : .increment = 0
906 : : },
907 : : .digest_size = {
908 : : .min = 4,
909 : : .max = 4,
910 : : .increment = 0
911 : : },
912 : : }, }
913 : : }, }
914 : : },
915 : : };
916 : :
917 : : static const struct rte_cryptodev_capabilities caps_des[] = {
918 : : { /* 3DES CBC */
919 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
920 : : {.sym = {
921 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
922 : : {.cipher = {
923 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
924 : : .block_size = 8,
925 : : .key_size = {
926 : : .min = 24,
927 : : .max = 24,
928 : : .increment = 0
929 : : },
930 : : .iv_size = {
931 : : .min = 8,
932 : : .max = 16,
933 : : .increment = 8
934 : : }
935 : : }, }
936 : : }, }
937 : : },
938 : : { /* 3DES ECB */
939 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
940 : : {.sym = {
941 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
942 : : {.cipher = {
943 : : .algo = RTE_CRYPTO_CIPHER_3DES_ECB,
944 : : .block_size = 8,
945 : : .key_size = {
946 : : .min = 24,
947 : : .max = 24,
948 : : .increment = 0
949 : : },
950 : : .iv_size = {
951 : : .min = 0,
952 : : .max = 0,
953 : : .increment = 0
954 : : }
955 : : }, }
956 : : }, }
957 : : },
958 : : { /* DES CBC */
959 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
960 : : {.sym = {
961 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
962 : : {.cipher = {
963 : : .algo = RTE_CRYPTO_CIPHER_DES_CBC,
964 : : .block_size = 8,
965 : : .key_size = {
966 : : .min = 8,
967 : : .max = 8,
968 : : .increment = 0
969 : : },
970 : : .iv_size = {
971 : : .min = 8,
972 : : .max = 8,
973 : : .increment = 0
974 : : }
975 : : }, }
976 : : }, }
977 : : },
978 : : };
979 : :
980 : : static const struct rte_cryptodev_capabilities caps_docsis[] = {
981 : : { /* AES DOCSIS BPI */
982 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
983 : : {.sym = {
984 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
985 : : {.cipher = {
986 : : .algo = RTE_CRYPTO_CIPHER_AES_DOCSISBPI,
987 : : .block_size = 16,
988 : : .key_size = {
989 : : .min = 16,
990 : : .max = 32,
991 : : .increment = 16
992 : : },
993 : : .iv_size = {
994 : : .min = 16,
995 : : .max = 16,
996 : : .increment = 0
997 : : }
998 : : }, }
999 : : }, }
1000 : : },
1001 : : { /* DES DOCSIS BPI */
1002 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1003 : : {.sym = {
1004 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1005 : : {.cipher = {
1006 : : .algo = RTE_CRYPTO_CIPHER_DES_DOCSISBPI,
1007 : : .block_size = 8,
1008 : : .key_size = {
1009 : : .min = 8,
1010 : : .max = 8,
1011 : : .increment = 0
1012 : : },
1013 : : .iv_size = {
1014 : : .min = 8,
1015 : : .max = 8,
1016 : : .increment = 0
1017 : : }
1018 : : }, }
1019 : : }, }
1020 : : },
1021 : : };
1022 : :
1023 : : static const struct rte_cryptodev_capabilities caps_null[] = {
1024 : : { /* NULL (AUTH) */
1025 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1026 : : {.sym = {
1027 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1028 : : {.auth = {
1029 : : .algo = RTE_CRYPTO_AUTH_NULL,
1030 : : .block_size = 1,
1031 : : .key_size = {
1032 : : .min = 0,
1033 : : .max = 0,
1034 : : .increment = 0
1035 : : },
1036 : : .digest_size = {
1037 : : .min = 0,
1038 : : .max = 0,
1039 : : .increment = 0
1040 : : },
1041 : : }, },
1042 : : }, },
1043 : : },
1044 : : { /* NULL (CIPHER) */
1045 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1046 : : {.sym = {
1047 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1048 : : {.cipher = {
1049 : : .algo = RTE_CRYPTO_CIPHER_NULL,
1050 : : .block_size = 1,
1051 : : .key_size = {
1052 : : .min = 0,
1053 : : .max = 0,
1054 : : .increment = 0
1055 : : },
1056 : : .iv_size = {
1057 : : .min = 0,
1058 : : .max = 0,
1059 : : .increment = 0
1060 : : }
1061 : : }, },
1062 : : }, }
1063 : : },
1064 : : };
1065 : :
1066 : : static const struct rte_cryptodev_capabilities caps_sm4[] = {
1067 : : { /* SM4 CBC */
1068 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1069 : : {.sym = {
1070 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1071 : : {.cipher = {
1072 : : .algo = RTE_CRYPTO_CIPHER_SM4_CBC,
1073 : : .block_size = 16,
1074 : : .key_size = {
1075 : : .min = 16,
1076 : : .max = 16,
1077 : : .increment = 0
1078 : : },
1079 : : .iv_size = {
1080 : : .min = 16,
1081 : : .max = 16,
1082 : : .increment = 0
1083 : : }
1084 : : }, }
1085 : : }, }
1086 : : },
1087 : : { /* SM4 ECB */
1088 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1089 : : {.sym = {
1090 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1091 : : {.cipher = {
1092 : : .algo = RTE_CRYPTO_CIPHER_SM4_ECB,
1093 : : .block_size = 16,
1094 : : .key_size = {
1095 : : .min = 16,
1096 : : .max = 16,
1097 : : .increment = 0
1098 : : },
1099 : : .iv_size = {
1100 : : .min = 0,
1101 : : .max = 0,
1102 : : .increment = 0
1103 : : }
1104 : : }, }
1105 : : }, }
1106 : : },
1107 : : { /* SM4 CTR */
1108 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1109 : : {.sym = {
1110 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1111 : : {.cipher = {
1112 : : .algo = RTE_CRYPTO_CIPHER_SM4_CTR,
1113 : : .block_size = 16,
1114 : : .key_size = {
1115 : : .min = 16,
1116 : : .max = 16,
1117 : : .increment = 0
1118 : : },
1119 : : .iv_size = {
1120 : : .min = 16,
1121 : : .max = 16,
1122 : : .increment = 0
1123 : : }
1124 : : }, }
1125 : : }, }
1126 : : },
1127 : : { /* SM4 OFB */
1128 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1129 : : {.sym = {
1130 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1131 : : {.cipher = {
1132 : : .algo = RTE_CRYPTO_CIPHER_SM4_OFB,
1133 : : .block_size = 16,
1134 : : .key_size = {
1135 : : .min = 16,
1136 : : .max = 16,
1137 : : .increment = 0
1138 : : },
1139 : : .iv_size = {
1140 : : .min = 16,
1141 : : .max = 16,
1142 : : .increment = 0
1143 : : }
1144 : : }, }
1145 : : }, }
1146 : : },
1147 : : { /* SM4 CFB */
1148 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1149 : : {.sym = {
1150 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1151 : : {.cipher = {
1152 : : .algo = RTE_CRYPTO_CIPHER_SM4_CFB,
1153 : : .block_size = 16,
1154 : : .key_size = {
1155 : : .min = 16,
1156 : : .max = 16,
1157 : : .increment = 0
1158 : : },
1159 : : .iv_size = {
1160 : : .min = 16,
1161 : : .max = 16,
1162 : : .increment = 0
1163 : : }
1164 : : }, }
1165 : : }, }
1166 : : },
1167 : : };
1168 : :
1169 : : static const struct rte_cryptodev_capabilities caps_sm2[] = {
1170 : : { /* SM2 */
1171 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
1172 : : {.asym = {
1173 : : .xform_capa = {
1174 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_SM2,
1175 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
1176 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY))
1177 : : }
1178 : : }
1179 : : }
1180 : : }
1181 : : };
1182 : :
1183 : : static const struct rte_cryptodev_capabilities caps_end[] = {
1184 : : RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
1185 : : };
1186 : :
1187 : : static const struct rte_cryptodev_capabilities sec_caps_aes[] = {
1188 : : { /* AES GCM */
1189 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1190 : : {.sym = {
1191 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1192 : : {.aead = {
1193 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
1194 : : .block_size = 16,
1195 : : .key_size = {
1196 : : .min = 16,
1197 : : .max = 32,
1198 : : .increment = 8
1199 : : },
1200 : : .digest_size = {
1201 : : .min = 16,
1202 : : .max = 16,
1203 : : .increment = 0
1204 : : },
1205 : : .aad_size = {
1206 : : .min = 8,
1207 : : .max = 12,
1208 : : .increment = 4
1209 : : },
1210 : : .iv_size = {
1211 : : .min = 12,
1212 : : .max = 12,
1213 : : .increment = 0
1214 : : }
1215 : : }, }
1216 : : }, }
1217 : : },
1218 : : { /* AES CCM */
1219 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1220 : : {.sym = {
1221 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1222 : : {.aead = {
1223 : : .algo = RTE_CRYPTO_AEAD_AES_CCM,
1224 : : .block_size = 16,
1225 : : .key_size = {
1226 : : .min = 16,
1227 : : .max = 32,
1228 : : .increment = 8
1229 : : },
1230 : : .digest_size = {
1231 : : .min = 16,
1232 : : .max = 16,
1233 : : .increment = 0
1234 : : },
1235 : : .aad_size = {
1236 : : .min = 8,
1237 : : .max = 12,
1238 : : .increment = 4
1239 : : },
1240 : : .iv_size = {
1241 : : .min = 11,
1242 : : .max = 11,
1243 : : .increment = 0
1244 : : }
1245 : : }, }
1246 : : }, }
1247 : : },
1248 : : { /* AES CTR */
1249 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1250 : : {.sym = {
1251 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1252 : : {.cipher = {
1253 : : .algo = RTE_CRYPTO_CIPHER_AES_CTR,
1254 : : .block_size = 16,
1255 : : .key_size = {
1256 : : .min = 16,
1257 : : .max = 32,
1258 : : .increment = 8
1259 : : },
1260 : : .iv_size = {
1261 : : .min = 12,
1262 : : .max = 16,
1263 : : .increment = 4
1264 : : }
1265 : : }, }
1266 : : }, }
1267 : : },
1268 : : { /* AES CBC */
1269 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1270 : : {.sym = {
1271 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1272 : : {.cipher = {
1273 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
1274 : : .block_size = 16,
1275 : : .key_size = {
1276 : : .min = 16,
1277 : : .max = 32,
1278 : : .increment = 8
1279 : : },
1280 : : .iv_size = {
1281 : : .min = 16,
1282 : : .max = 16,
1283 : : .increment = 0
1284 : : }
1285 : : }, }
1286 : : }, }
1287 : : },
1288 : : { /* AES-XCBC */
1289 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1290 : : { .sym = {
1291 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1292 : : {.auth = {
1293 : : .algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
1294 : : .block_size = 16,
1295 : : .key_size = {
1296 : : .min = 16,
1297 : : .max = 16,
1298 : : .increment = 0
1299 : : },
1300 : : .digest_size = {
1301 : : .min = 12,
1302 : : .max = 12,
1303 : : .increment = 0,
1304 : : },
1305 : : }, }
1306 : : }, }
1307 : : },
1308 : : { /* AES GMAC (AUTH) */
1309 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1310 : : {.sym = {
1311 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1312 : : {.auth = {
1313 : : .algo = RTE_CRYPTO_AUTH_AES_GMAC,
1314 : : .block_size = 16,
1315 : : .key_size = {
1316 : : .min = 16,
1317 : : .max = 32,
1318 : : .increment = 8
1319 : : },
1320 : : .digest_size = {
1321 : : .min = 8,
1322 : : .max = 16,
1323 : : .increment = 4
1324 : : },
1325 : : .iv_size = {
1326 : : .min = 12,
1327 : : .max = 12,
1328 : : .increment = 0
1329 : : }
1330 : : }, }
1331 : : }, }
1332 : : },
1333 : : };
1334 : :
1335 : : static const struct rte_cryptodev_capabilities sec_caps_des[] = {
1336 : : { /* DES */
1337 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1338 : : {.sym = {
1339 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1340 : : {.cipher = {
1341 : : .algo = RTE_CRYPTO_CIPHER_DES_CBC,
1342 : : .block_size = 8,
1343 : : .key_size = {
1344 : : .min = 8,
1345 : : .max = 8,
1346 : : .increment = 0
1347 : : },
1348 : : .iv_size = {
1349 : : .min = 8,
1350 : : .max = 8,
1351 : : .increment = 0
1352 : : }
1353 : : }, },
1354 : : }, }
1355 : : },
1356 : : { /* 3DES CBC */
1357 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1358 : : {.sym = {
1359 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1360 : : {.cipher = {
1361 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
1362 : : .block_size = 8,
1363 : : .key_size = {
1364 : : .min = 24,
1365 : : .max = 24,
1366 : : .increment = 0
1367 : : },
1368 : : .iv_size = {
1369 : : .min = 8,
1370 : : .max = 16,
1371 : : .increment = 8
1372 : : }
1373 : : }, }
1374 : : }, }
1375 : : },
1376 : : };
1377 : :
1378 : : static const struct rte_cryptodev_capabilities sec_caps_sha1_sha2[] = {
1379 : : { /* SHA1 HMAC */
1380 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1381 : : {.sym = {
1382 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1383 : : {.auth = {
1384 : : .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
1385 : : .block_size = 64,
1386 : : .key_size = {
1387 : : .min = 20,
1388 : : .max = 64,
1389 : : .increment = 1
1390 : : },
1391 : : .digest_size = {
1392 : : .min = 12,
1393 : : .max = 12,
1394 : : .increment = 0
1395 : : },
1396 : : }, }
1397 : : }, }
1398 : : },
1399 : : { /* SHA256 HMAC */
1400 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1401 : : {.sym = {
1402 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1403 : : {.auth = {
1404 : : .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
1405 : : .block_size = 64,
1406 : : .key_size = {
1407 : : .min = 1,
1408 : : .max = 1024,
1409 : : .increment = 1
1410 : : },
1411 : : .digest_size = {
1412 : : .min = 16,
1413 : : .max = 16,
1414 : : .increment = 0
1415 : : },
1416 : : }, }
1417 : : }, }
1418 : : },
1419 : : { /* SHA384 HMAC */
1420 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1421 : : {.sym = {
1422 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1423 : : {.auth = {
1424 : : .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
1425 : : .block_size = 64,
1426 : : .key_size = {
1427 : : .min = 48,
1428 : : .max = 48,
1429 : : .increment = 0
1430 : : },
1431 : : .digest_size = {
1432 : : .min = 24,
1433 : : .max = 24,
1434 : : .increment = 0
1435 : : },
1436 : : }, }
1437 : : }, }
1438 : : },
1439 : : { /* SHA512 HMAC */
1440 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1441 : : {.sym = {
1442 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1443 : : {.auth = {
1444 : : .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
1445 : : .block_size = 128,
1446 : : .key_size = {
1447 : : .min = 64,
1448 : : .max = 64,
1449 : : .increment = 0
1450 : : },
1451 : : .digest_size = {
1452 : : .min = 32,
1453 : : .max = 32,
1454 : : .increment = 0
1455 : : },
1456 : : }, }
1457 : : }, }
1458 : : },
1459 : : { /* MD5 HMAC */
1460 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1461 : : {.sym = {
1462 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1463 : : {.auth = {
1464 : : .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
1465 : : .block_size = 64,
1466 : : .key_size = {
1467 : : .min = 16,
1468 : : .max = 16,
1469 : : .increment = 0
1470 : : },
1471 : : .digest_size = {
1472 : : .min = 12,
1473 : : .max = 12,
1474 : : .increment = 0
1475 : : },
1476 : : }, }
1477 : : }, }
1478 : : },
1479 : : };
1480 : :
1481 : : static const struct rte_cryptodev_capabilities sec_caps_null[] = {
1482 : : { /* NULL (CIPHER) */
1483 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1484 : : {.sym = {
1485 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1486 : : {.cipher = {
1487 : : .algo = RTE_CRYPTO_CIPHER_NULL,
1488 : : .block_size = 1,
1489 : : .key_size = {
1490 : : .min = 0,
1491 : : .max = 0,
1492 : : .increment = 0
1493 : : },
1494 : : .iv_size = {
1495 : : .min = 0,
1496 : : .max = 0,
1497 : : .increment = 0
1498 : : }
1499 : : }, },
1500 : : }, }
1501 : : },
1502 : : };
1503 : :
1504 : : static const struct rte_security_capability sec_caps_templ[] = {
1505 : : { /* IPsec Lookaside Protocol ESP Tunnel Ingress */
1506 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1507 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1508 : : .ipsec = {
1509 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1510 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1511 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1512 : : .options = { 0 },
1513 : : },
1514 : : .crypto_capabilities = NULL,
1515 : : },
1516 : : { /* IPsec Lookaside Protocol ESP Tunnel Egress */
1517 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1518 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1519 : : .ipsec = {
1520 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1521 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1522 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1523 : : .options = { 0 },
1524 : : },
1525 : : .crypto_capabilities = NULL,
1526 : : },
1527 : : { /* IPsec Lookaside Protocol ESP Transport Ingress */
1528 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1529 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1530 : : .ipsec = {
1531 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1532 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1533 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1534 : : .options = { 0 },
1535 : : },
1536 : : .crypto_capabilities = NULL,
1537 : : },
1538 : : { /* IPsec Lookaside Protocol ESP Transport Egress */
1539 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1540 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1541 : : .ipsec = {
1542 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1543 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1544 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1545 : : .options = { 0 },
1546 : : },
1547 : : .crypto_capabilities = NULL,
1548 : : },
1549 : : { /* IPsec Lookaside Protocol AH Tunnel Ingress */
1550 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1551 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1552 : : .ipsec = {
1553 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1554 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1555 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1556 : : .options = { 0 },
1557 : : },
1558 : : .crypto_capabilities = NULL,
1559 : : },
1560 : : { /* IPsec Lookaside Protocol AH Tunnel Egress */
1561 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1562 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1563 : : .ipsec = {
1564 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1565 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1566 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1567 : : .options = { 0 },
1568 : : },
1569 : : .crypto_capabilities = NULL,
1570 : : },
1571 : : { /* IPsec Lookaside Protocol AH Transport Ingress */
1572 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1573 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1574 : : .ipsec = {
1575 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1576 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1577 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1578 : : .options = { 0 },
1579 : : },
1580 : : .crypto_capabilities = NULL,
1581 : : },
1582 : : { /* IPsec Lookaside Protocol AH Transport Egress */
1583 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1584 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1585 : : .ipsec = {
1586 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1587 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1588 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1589 : : .options = { 0 },
1590 : : },
1591 : : .crypto_capabilities = NULL,
1592 : : },
1593 : : {
1594 : : .action = RTE_SECURITY_ACTION_TYPE_NONE
1595 : : }
1596 : : };
1597 : :
1598 : : static void
1599 : 0 : cpt_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
1600 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
1601 : : {
1602 [ # # ]: 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_CPT_MAX_CAPS);
1603 : :
1604 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
1605 : 0 : *cur_pos += nb_caps;
1606 : 0 : }
1607 : :
1608 : : static void
1609 : 0 : cn10k_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[])
1610 : : {
1611 : :
1612 : : struct rte_cryptodev_capabilities *caps;
1613 : : int i = 0;
1614 : :
1615 [ # # ]: 0 : while ((caps = &cnxk_caps[i++])->op != RTE_CRYPTO_OP_TYPE_UNDEFINED) {
1616 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
1617 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_CIPHER) &&
1618 : : (caps->sym.cipher.algo == RTE_CRYPTO_CIPHER_ZUC_EEA3)) {
1619 : :
1620 : 0 : caps->sym.cipher.key_size.max = 32;
1621 : 0 : caps->sym.cipher.key_size.increment = 16;
1622 : 0 : caps->sym.cipher.iv_size.max = 25;
1623 : 0 : caps->sym.cipher.iv_size.increment = 1;
1624 : : }
1625 : :
1626 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
1627 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH) &&
1628 : : (caps->sym.auth.algo == RTE_CRYPTO_AUTH_ZUC_EIA3)) {
1629 : :
1630 : 0 : caps->sym.auth.key_size.max = 32;
1631 : 0 : caps->sym.auth.key_size.increment = 16;
1632 : 0 : caps->sym.auth.digest_size.max = 16;
1633 : 0 : caps->sym.auth.digest_size.increment = 4;
1634 : 0 : caps->sym.auth.iv_size.max = 25;
1635 : 0 : caps->sym.auth.iv_size.increment = 1;
1636 : : }
1637 : : }
1638 : 0 : }
1639 : :
1640 : : static void
1641 : : cn9k_crypto_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos)
1642 : : {
1643 : 0 : cpt_caps_add(cnxk_caps, cur_pos, caps_docsis, RTE_DIM(caps_docsis));
1644 : 0 : }
1645 : :
1646 : : static void
1647 : 0 : cn10k_crypto_caps_add(struct rte_cryptodev_capabilities cnxk_caps[],
1648 : : union cpt_eng_caps *hw_caps, int *cur_pos)
1649 : : {
1650 [ # # ]: 0 : if (hw_caps[CPT_ENG_TYPE_SE].sg_ver2) {
1651 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm3);
# # ]
1652 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm4);
# # ]
1653 : : }
1654 : :
1655 [ # # ]: 0 : if (hw_caps[CPT_ENG_TYPE_AE].sm2)
1656 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm2);
# # ]
1657 : 0 : }
1658 : :
1659 : : static void
1660 : 0 : crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
1661 : : union cpt_eng_caps *hw_caps)
1662 : : {
1663 : 0 : int cur_pos = 0;
1664 : :
1665 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, mul);
# # ]
1666 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
1667 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha3);
# # ]
1668 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, chacha20);
# # ]
1669 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, zuc_snow3g);
# # ]
1670 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
1671 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, kasumi);
# # ]
1672 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
1673 : :
1674 [ # # ]: 0 : if (!roc_model_is_cn10k())
1675 : : cn9k_crypto_caps_add(cnxk_caps, &cur_pos);
1676 : :
1677 [ # # ]: 0 : if (roc_model_is_cn10k())
1678 : 0 : cn10k_crypto_caps_add(cnxk_caps, hw_caps, &cur_pos);
1679 : :
1680 : 0 : cpt_caps_add(cnxk_caps, &cur_pos, caps_null, RTE_DIM(caps_null));
1681 : 0 : cpt_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
1682 : :
1683 [ # # ]: 0 : if (roc_model_is_cn10k())
1684 : 0 : cn10k_crypto_caps_update(cnxk_caps);
1685 : 0 : }
1686 : :
1687 : : const struct rte_cryptodev_capabilities *
1688 : 0 : cnxk_crypto_capabilities_get(struct cnxk_cpt_vf *vf)
1689 : : {
1690 : 0 : return vf->crypto_caps;
1691 : : }
1692 : :
1693 : : static void
1694 : : sec_caps_limit_check(int *cur_pos, int nb_caps)
1695 : : {
1696 : 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_SEC_CRYPTO_MAX_CAPS);
1697 : : }
1698 : :
1699 : : static void
1700 [ # # ]: 0 : sec_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
1701 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
1702 : : {
1703 : : sec_caps_limit_check(cur_pos, nb_caps);
1704 : :
1705 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
1706 : 0 : *cur_pos += nb_caps;
1707 : 0 : }
1708 : :
1709 : : static void
1710 [ # # ]: 0 : cn10k_sec_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[],
1711 : : int *cur_pos)
1712 : : {
1713 : : const struct rte_cryptodev_capabilities *cap;
1714 : : unsigned int i;
1715 : :
1716 : : sec_caps_limit_check(cur_pos, 1);
1717 : :
1718 : : /* NULL auth */
1719 [ # # ]: 0 : for (i = 0; i < RTE_DIM(caps_null); i++) {
1720 : : cap = &caps_null[i];
1721 [ # # ]: 0 : if (cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH &&
1722 : : cap->sym.auth.algo == RTE_CRYPTO_AUTH_NULL) {
1723 : 0 : cnxk_caps[*cur_pos] = caps_null[i];
1724 : 0 : *cur_pos += 1;
1725 : : }
1726 : : }
1727 : 0 : }
1728 : :
1729 : : static void
1730 : : cn9k_sec_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[])
1731 : : {
1732 : :
1733 : : struct rte_cryptodev_capabilities *caps;
1734 : : int i = 0;
1735 : :
1736 [ # # ]: 0 : while ((caps = &cnxk_caps[i++])->op != RTE_CRYPTO_OP_TYPE_UNDEFINED) {
1737 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
1738 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH) &&
1739 : : (caps->sym.auth.algo == RTE_CRYPTO_AUTH_SHA256_HMAC)) {
1740 : 0 : caps->sym.auth.key_size.min = 32;
1741 : 0 : caps->sym.auth.key_size.max = 64;
1742 : 0 : caps->sym.auth.key_size.increment = 1;
1743 : :
1744 : 0 : break;
1745 : : }
1746 : : }
1747 : : }
1748 : :
1749 : : static void
1750 : 0 : sec_crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
1751 : : union cpt_eng_caps *hw_caps)
1752 : : {
1753 : 0 : int cur_pos = 0;
1754 : :
1755 [ # # # # : 0 : SEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
1756 [ # # # # : 0 : SEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
1757 [ # # # # : 0 : SEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
1758 : :
1759 [ # # ]: 0 : if (roc_model_is_cn10k())
1760 : 0 : cn10k_sec_crypto_caps_update(cnxk_caps, &cur_pos);
1761 : : else
1762 : : cn9k_sec_crypto_caps_update(cnxk_caps);
1763 : :
1764 : 0 : sec_caps_add(cnxk_caps, &cur_pos, sec_caps_null,
1765 : : RTE_DIM(sec_caps_null));
1766 : 0 : sec_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
1767 : 0 : }
1768 : :
1769 : : static void
1770 : : cnxk_sec_caps_update(struct rte_security_capability *sec_cap)
1771 : : {
1772 : 0 : sec_cap->ipsec.options.udp_encap = 1;
1773 : 0 : sec_cap->ipsec.options.copy_df = 1;
1774 : 0 : sec_cap->ipsec.options.copy_dscp = 1;
1775 : : }
1776 : :
1777 : : static void
1778 : : cn10k_sec_caps_update(struct rte_security_capability *sec_cap)
1779 : : {
1780 [ # # ]: 0 : if (sec_cap->ipsec.direction == RTE_SECURITY_IPSEC_SA_DIR_EGRESS) {
1781 : : #ifdef LA_IPSEC_DEBUG
1782 : : sec_cap->ipsec.options.iv_gen_disable = 1;
1783 : : #endif
1784 : : } else {
1785 : 0 : sec_cap->ipsec.options.udp_ports_verify = 1;
1786 [ # # ]: 0 : if (sec_cap->ipsec.mode == RTE_SECURITY_IPSEC_SA_MODE_TUNNEL)
1787 : 0 : sec_cap->ipsec.options.tunnel_hdr_verify =
1788 : : RTE_SECURITY_IPSEC_TUNNEL_VERIFY_SRC_DST_ADDR;
1789 : : }
1790 : 0 : sec_cap->ipsec.options.dec_ttl = 1;
1791 : 0 : sec_cap->ipsec.options.ip_csum_enable = 1;
1792 : 0 : sec_cap->ipsec.options.l4_csum_enable = 1;
1793 : 0 : sec_cap->ipsec.options.stats = 1;
1794 : 0 : sec_cap->ipsec.options.esn = 1;
1795 : 0 : sec_cap->ipsec.options.copy_flabel = 1;
1796 : 0 : sec_cap->ipsec.replay_win_sz_max = ROC_AR_WIN_SIZE_MAX;
1797 : 0 : }
1798 : :
1799 : : static void
1800 : : cn9k_sec_caps_update(struct rte_security_capability *sec_cap)
1801 : : {
1802 : : if (sec_cap->ipsec.direction == RTE_SECURITY_IPSEC_SA_DIR_EGRESS) {
1803 : : #ifdef LA_IPSEC_DEBUG
1804 : : sec_cap->ipsec.options.iv_gen_disable = 1;
1805 : : #endif
1806 : : }
1807 : 0 : sec_cap->ipsec.replay_win_sz_max = CNXK_ON_AR_WIN_SIZE_MAX;
1808 : 0 : sec_cap->ipsec.options.esn = 1;
1809 : 0 : }
1810 : :
1811 : : void
1812 : 0 : cnxk_cpt_caps_populate(struct cnxk_cpt_vf *vf)
1813 : : {
1814 : : unsigned long i;
1815 : :
1816 : 0 : crypto_caps_populate(vf->crypto_caps, vf->cpt.hw_caps);
1817 : 0 : sec_crypto_caps_populate(vf->sec_crypto_caps, vf->cpt.hw_caps);
1818 : :
1819 : : PLT_STATIC_ASSERT(RTE_DIM(sec_caps_templ) <= RTE_DIM(vf->sec_caps));
1820 : 0 : memcpy(vf->sec_caps, sec_caps_templ, sizeof(sec_caps_templ));
1821 : :
1822 [ # # ]: 0 : for (i = 0; i < RTE_DIM(sec_caps_templ) - 1; i++) {
1823 [ # # ]: 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_crypto_caps;
1824 : :
1825 : : cnxk_sec_caps_update(&vf->sec_caps[i]);
1826 : :
1827 [ # # ]: 0 : if (roc_model_is_cn10k())
1828 : : cn10k_sec_caps_update(&vf->sec_caps[i]);
1829 : :
1830 [ # # ]: 0 : if (roc_model_is_cn9k())
1831 : : cn9k_sec_caps_update(&vf->sec_caps[i]);
1832 : :
1833 : : }
1834 : 0 : }
1835 : :
1836 : : const struct rte_security_capability *
1837 : 0 : cnxk_crypto_sec_capabilities_get(void *device)
1838 : : {
1839 : : struct rte_cryptodev *dev = device;
1840 : : struct cnxk_cpt_vf *vf;
1841 : :
1842 : 0 : vf = dev->data->dev_private;
1843 : 0 : return vf->sec_caps;
1844 : : }
|