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_aes[] = {
728 : : { /* AES GMAC (AUTH) */
729 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
730 : : {.sym = {
731 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
732 : : {.auth = {
733 : : .algo = RTE_CRYPTO_AUTH_AES_GMAC,
734 : : .block_size = 16,
735 : : .key_size = {
736 : : .min = 16,
737 : : .max = 32,
738 : : .increment = 8
739 : : },
740 : : .digest_size = {
741 : : .min = 8,
742 : : .max = 16,
743 : : .increment = 4
744 : : },
745 : : .iv_size = {
746 : : .min = 12,
747 : : .max = 12,
748 : : .increment = 0
749 : : }
750 : : }, }
751 : : }, }
752 : : },
753 : : { /* AES CBC */
754 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
755 : : {.sym = {
756 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
757 : : {.cipher = {
758 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
759 : : .block_size = 16,
760 : : .key_size = {
761 : : .min = 16,
762 : : .max = 32,
763 : : .increment = 8
764 : : },
765 : : .iv_size = {
766 : : .min = 16,
767 : : .max = 16,
768 : : .increment = 0
769 : : }
770 : : }, }
771 : : }, }
772 : : },
773 : : { /* AES CTR */
774 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
775 : : {.sym = {
776 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
777 : : {.cipher = {
778 : : .algo = RTE_CRYPTO_CIPHER_AES_CTR,
779 : : .block_size = 16,
780 : : .key_size = {
781 : : .min = 16,
782 : : .max = 32,
783 : : .increment = 8
784 : : },
785 : : .iv_size = {
786 : : .min = 12,
787 : : .max = 16,
788 : : .increment = 4
789 : : }
790 : : }, }
791 : : }, }
792 : : },
793 : : { /* AES XTS */
794 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
795 : : {.sym = {
796 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
797 : : {.cipher = {
798 : : .algo = RTE_CRYPTO_CIPHER_AES_XTS,
799 : : .block_size = 16,
800 : : .key_size = {
801 : : .min = 32,
802 : : .max = 64,
803 : : .increment = 32
804 : : },
805 : : .iv_size = {
806 : : .min = 16,
807 : : .max = 16,
808 : : .increment = 0
809 : : }
810 : : }, }
811 : : }, }
812 : : },
813 : : { /* AES GCM */
814 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
815 : : {.sym = {
816 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
817 : : {.aead = {
818 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
819 : : .block_size = 16,
820 : : .key_size = {
821 : : .min = 16,
822 : : .max = 32,
823 : : .increment = 8
824 : : },
825 : : .digest_size = {
826 : : .min = 4,
827 : : .max = 16,
828 : : .increment = 1
829 : : },
830 : : .aad_size = {
831 : : .min = 0,
832 : : .max = 1024,
833 : : .increment = 1
834 : : },
835 : : .iv_size = {
836 : : .min = 12,
837 : : .max = 12,
838 : : .increment = 0
839 : : }
840 : : }, }
841 : : }, }
842 : : },
843 : : { /* AES CCM */
844 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
845 : : {.sym = {
846 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
847 : : {.aead = {
848 : : .algo = RTE_CRYPTO_AEAD_AES_CCM,
849 : : .block_size = 16,
850 : : .key_size = {
851 : : .min = 16,
852 : : .max = 32,
853 : : .increment = 8
854 : : },
855 : : .digest_size = {
856 : : .min = 4,
857 : : .max = 16,
858 : : .increment = 1
859 : : },
860 : : .aad_size = {
861 : : .min = 0,
862 : : .max = 1024,
863 : : .increment = 1
864 : : },
865 : : .iv_size = {
866 : : .min = 11,
867 : : .max = 13,
868 : : .increment = 1
869 : : }
870 : : }, }
871 : : }, }
872 : : },
873 : : { /* AES CMAC */
874 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
875 : : {.sym = {
876 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
877 : : {.auth = {
878 : : .algo = RTE_CRYPTO_AUTH_AES_CMAC,
879 : : .block_size = 16,
880 : : .key_size = {
881 : : .min = 16,
882 : : .max = 32,
883 : : .increment = 8
884 : : },
885 : : .digest_size = {
886 : : .min = 4,
887 : : .max = 4,
888 : : .increment = 0
889 : : },
890 : : }, }
891 : : }, }
892 : : },
893 : : };
894 : :
895 : : static const struct rte_cryptodev_capabilities caps_kasumi[] = {
896 : : { /* KASUMI (F8) */
897 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
898 : : {.sym = {
899 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
900 : : {.cipher = {
901 : : .algo = RTE_CRYPTO_CIPHER_KASUMI_F8,
902 : : .block_size = 8,
903 : : .key_size = {
904 : : .min = 16,
905 : : .max = 16,
906 : : .increment = 0
907 : : },
908 : : .iv_size = {
909 : : .min = 8,
910 : : .max = 8,
911 : : .increment = 0
912 : : }
913 : : }, }
914 : : }, }
915 : : },
916 : : { /* KASUMI (F9) */
917 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
918 : : {.sym = {
919 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
920 : : {.auth = {
921 : : .algo = RTE_CRYPTO_AUTH_KASUMI_F9,
922 : : .block_size = 8,
923 : : .key_size = {
924 : : .min = 16,
925 : : .max = 16,
926 : : .increment = 0
927 : : },
928 : : .digest_size = {
929 : : .min = 4,
930 : : .max = 4,
931 : : .increment = 0
932 : : },
933 : : }, }
934 : : }, }
935 : : },
936 : : };
937 : :
938 : : static const struct rte_cryptodev_capabilities caps_des[] = {
939 : : { /* 3DES CBC */
940 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
941 : : {.sym = {
942 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
943 : : {.cipher = {
944 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
945 : : .block_size = 8,
946 : : .key_size = {
947 : : .min = 24,
948 : : .max = 24,
949 : : .increment = 0
950 : : },
951 : : .iv_size = {
952 : : .min = 8,
953 : : .max = 16,
954 : : .increment = 8
955 : : }
956 : : }, }
957 : : }, }
958 : : },
959 : : { /* 3DES ECB */
960 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
961 : : {.sym = {
962 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
963 : : {.cipher = {
964 : : .algo = RTE_CRYPTO_CIPHER_3DES_ECB,
965 : : .block_size = 8,
966 : : .key_size = {
967 : : .min = 24,
968 : : .max = 24,
969 : : .increment = 0
970 : : },
971 : : .iv_size = {
972 : : .min = 0,
973 : : .max = 0,
974 : : .increment = 0
975 : : }
976 : : }, }
977 : : }, }
978 : : },
979 : : { /* DES CBC */
980 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
981 : : {.sym = {
982 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
983 : : {.cipher = {
984 : : .algo = RTE_CRYPTO_CIPHER_DES_CBC,
985 : : .block_size = 8,
986 : : .key_size = {
987 : : .min = 8,
988 : : .max = 8,
989 : : .increment = 0
990 : : },
991 : : .iv_size = {
992 : : .min = 8,
993 : : .max = 8,
994 : : .increment = 0
995 : : }
996 : : }, }
997 : : }, }
998 : : },
999 : : };
1000 : :
1001 : : static const struct rte_cryptodev_capabilities caps_docsis[] = {
1002 : : { /* AES DOCSIS BPI */
1003 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1004 : : {.sym = {
1005 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1006 : : {.cipher = {
1007 : : .algo = RTE_CRYPTO_CIPHER_AES_DOCSISBPI,
1008 : : .block_size = 16,
1009 : : .key_size = {
1010 : : .min = 16,
1011 : : .max = 32,
1012 : : .increment = 16
1013 : : },
1014 : : .iv_size = {
1015 : : .min = 16,
1016 : : .max = 16,
1017 : : .increment = 0
1018 : : }
1019 : : }, }
1020 : : }, }
1021 : : },
1022 : : { /* DES DOCSIS BPI */
1023 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1024 : : {.sym = {
1025 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1026 : : {.cipher = {
1027 : : .algo = RTE_CRYPTO_CIPHER_DES_DOCSISBPI,
1028 : : .block_size = 8,
1029 : : .key_size = {
1030 : : .min = 8,
1031 : : .max = 8,
1032 : : .increment = 0
1033 : : },
1034 : : .iv_size = {
1035 : : .min = 8,
1036 : : .max = 8,
1037 : : .increment = 0
1038 : : }
1039 : : }, }
1040 : : }, }
1041 : : },
1042 : : };
1043 : :
1044 : : static const struct rte_cryptodev_capabilities caps_null[] = {
1045 : : { /* NULL (AUTH) */
1046 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1047 : : {.sym = {
1048 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1049 : : {.auth = {
1050 : : .algo = RTE_CRYPTO_AUTH_NULL,
1051 : : .block_size = 1,
1052 : : .key_size = {
1053 : : .min = 0,
1054 : : .max = 0,
1055 : : .increment = 0
1056 : : },
1057 : : .digest_size = {
1058 : : .min = 0,
1059 : : .max = 0,
1060 : : .increment = 0
1061 : : },
1062 : : }, },
1063 : : }, },
1064 : : },
1065 : : { /* NULL (CIPHER) */
1066 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1067 : : {.sym = {
1068 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1069 : : {.cipher = {
1070 : : .algo = RTE_CRYPTO_CIPHER_NULL,
1071 : : .block_size = 1,
1072 : : .key_size = {
1073 : : .min = 0,
1074 : : .max = 0,
1075 : : .increment = 0
1076 : : },
1077 : : .iv_size = {
1078 : : .min = 0,
1079 : : .max = 0,
1080 : : .increment = 0
1081 : : }
1082 : : }, },
1083 : : }, }
1084 : : },
1085 : : };
1086 : :
1087 : : static const struct rte_cryptodev_capabilities caps_sm4[] = {
1088 : : { /* SM4 CBC */
1089 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1090 : : {.sym = {
1091 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1092 : : {.cipher = {
1093 : : .algo = RTE_CRYPTO_CIPHER_SM4_CBC,
1094 : : .block_size = 16,
1095 : : .key_size = {
1096 : : .min = 16,
1097 : : .max = 16,
1098 : : .increment = 0
1099 : : },
1100 : : .iv_size = {
1101 : : .min = 16,
1102 : : .max = 16,
1103 : : .increment = 0
1104 : : }
1105 : : }, }
1106 : : }, }
1107 : : },
1108 : : { /* SM4 ECB */
1109 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1110 : : {.sym = {
1111 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1112 : : {.cipher = {
1113 : : .algo = RTE_CRYPTO_CIPHER_SM4_ECB,
1114 : : .block_size = 16,
1115 : : .key_size = {
1116 : : .min = 16,
1117 : : .max = 16,
1118 : : .increment = 0
1119 : : },
1120 : : .iv_size = {
1121 : : .min = 0,
1122 : : .max = 0,
1123 : : .increment = 0
1124 : : }
1125 : : }, }
1126 : : }, }
1127 : : },
1128 : : { /* SM4 CTR */
1129 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1130 : : {.sym = {
1131 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1132 : : {.cipher = {
1133 : : .algo = RTE_CRYPTO_CIPHER_SM4_CTR,
1134 : : .block_size = 16,
1135 : : .key_size = {
1136 : : .min = 16,
1137 : : .max = 16,
1138 : : .increment = 0
1139 : : },
1140 : : .iv_size = {
1141 : : .min = 16,
1142 : : .max = 16,
1143 : : .increment = 0
1144 : : }
1145 : : }, }
1146 : : }, }
1147 : : },
1148 : : { /* SM4 OFB */
1149 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1150 : : {.sym = {
1151 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1152 : : {.cipher = {
1153 : : .algo = RTE_CRYPTO_CIPHER_SM4_OFB,
1154 : : .block_size = 16,
1155 : : .key_size = {
1156 : : .min = 16,
1157 : : .max = 16,
1158 : : .increment = 0
1159 : : },
1160 : : .iv_size = {
1161 : : .min = 16,
1162 : : .max = 16,
1163 : : .increment = 0
1164 : : }
1165 : : }, }
1166 : : }, }
1167 : : },
1168 : : { /* SM4 CFB */
1169 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1170 : : {.sym = {
1171 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1172 : : {.cipher = {
1173 : : .algo = RTE_CRYPTO_CIPHER_SM4_CFB,
1174 : : .block_size = 16,
1175 : : .key_size = {
1176 : : .min = 16,
1177 : : .max = 16,
1178 : : .increment = 0
1179 : : },
1180 : : .iv_size = {
1181 : : .min = 16,
1182 : : .max = 16,
1183 : : .increment = 0
1184 : : }
1185 : : }, }
1186 : : }, }
1187 : : },
1188 : : };
1189 : :
1190 : : static const struct rte_cryptodev_capabilities caps_sm2[] = {
1191 : : { /* SM2 */
1192 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
1193 : : {.asym = {
1194 : : .xform_capa = {
1195 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_SM2,
1196 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
1197 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY))
1198 : : }
1199 : : }
1200 : : }
1201 : : }
1202 : : };
1203 : :
1204 : : static const struct rte_cryptodev_capabilities caps_end[] = {
1205 : : RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
1206 : : };
1207 : :
1208 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_aes[] = {
1209 : : { /* AES GCM */
1210 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1211 : : {.sym = {
1212 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1213 : : {.aead = {
1214 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
1215 : : .block_size = 16,
1216 : : .key_size = {
1217 : : .min = 16,
1218 : : .max = 32,
1219 : : .increment = 8
1220 : : },
1221 : : .digest_size = {
1222 : : .min = 16,
1223 : : .max = 16,
1224 : : .increment = 0
1225 : : },
1226 : : .aad_size = {
1227 : : .min = 8,
1228 : : .max = 12,
1229 : : .increment = 4
1230 : : },
1231 : : .iv_size = {
1232 : : .min = 12,
1233 : : .max = 12,
1234 : : .increment = 0
1235 : : }
1236 : : }, }
1237 : : }, }
1238 : : },
1239 : : { /* AES CCM */
1240 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1241 : : {.sym = {
1242 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1243 : : {.aead = {
1244 : : .algo = RTE_CRYPTO_AEAD_AES_CCM,
1245 : : .block_size = 16,
1246 : : .key_size = {
1247 : : .min = 16,
1248 : : .max = 32,
1249 : : .increment = 8
1250 : : },
1251 : : .digest_size = {
1252 : : .min = 16,
1253 : : .max = 16,
1254 : : .increment = 0
1255 : : },
1256 : : .aad_size = {
1257 : : .min = 8,
1258 : : .max = 12,
1259 : : .increment = 4
1260 : : },
1261 : : .iv_size = {
1262 : : .min = 11,
1263 : : .max = 11,
1264 : : .increment = 0
1265 : : }
1266 : : }, }
1267 : : }, }
1268 : : },
1269 : : { /* AES CTR */
1270 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1271 : : {.sym = {
1272 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1273 : : {.cipher = {
1274 : : .algo = RTE_CRYPTO_CIPHER_AES_CTR,
1275 : : .block_size = 16,
1276 : : .key_size = {
1277 : : .min = 16,
1278 : : .max = 32,
1279 : : .increment = 8
1280 : : },
1281 : : .iv_size = {
1282 : : .min = 12,
1283 : : .max = 16,
1284 : : .increment = 4
1285 : : }
1286 : : }, }
1287 : : }, }
1288 : : },
1289 : : { /* AES CBC */
1290 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1291 : : {.sym = {
1292 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1293 : : {.cipher = {
1294 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
1295 : : .block_size = 16,
1296 : : .key_size = {
1297 : : .min = 16,
1298 : : .max = 32,
1299 : : .increment = 8
1300 : : },
1301 : : .iv_size = {
1302 : : .min = 16,
1303 : : .max = 16,
1304 : : .increment = 0
1305 : : }
1306 : : }, }
1307 : : }, }
1308 : : },
1309 : : { /* AES-XCBC */
1310 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1311 : : { .sym = {
1312 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1313 : : {.auth = {
1314 : : .algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
1315 : : .block_size = 16,
1316 : : .key_size = {
1317 : : .min = 16,
1318 : : .max = 16,
1319 : : .increment = 0
1320 : : },
1321 : : .digest_size = {
1322 : : .min = 12,
1323 : : .max = 12,
1324 : : .increment = 0,
1325 : : },
1326 : : }, }
1327 : : }, }
1328 : : },
1329 : : { /* AES GMAC (AUTH) */
1330 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1331 : : {.sym = {
1332 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1333 : : {.auth = {
1334 : : .algo = RTE_CRYPTO_AUTH_AES_GMAC,
1335 : : .block_size = 16,
1336 : : .key_size = {
1337 : : .min = 16,
1338 : : .max = 32,
1339 : : .increment = 8
1340 : : },
1341 : : .digest_size = {
1342 : : .min = 8,
1343 : : .max = 16,
1344 : : .increment = 4
1345 : : },
1346 : : .iv_size = {
1347 : : .min = 12,
1348 : : .max = 12,
1349 : : .increment = 0
1350 : : }
1351 : : }, }
1352 : : }, }
1353 : : },
1354 : : };
1355 : :
1356 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_des[] = {
1357 : : { /* DES */
1358 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1359 : : {.sym = {
1360 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1361 : : {.cipher = {
1362 : : .algo = RTE_CRYPTO_CIPHER_DES_CBC,
1363 : : .block_size = 8,
1364 : : .key_size = {
1365 : : .min = 8,
1366 : : .max = 8,
1367 : : .increment = 0
1368 : : },
1369 : : .iv_size = {
1370 : : .min = 8,
1371 : : .max = 8,
1372 : : .increment = 0
1373 : : }
1374 : : }, },
1375 : : }, }
1376 : : },
1377 : : { /* 3DES CBC */
1378 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1379 : : {.sym = {
1380 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1381 : : {.cipher = {
1382 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
1383 : : .block_size = 8,
1384 : : .key_size = {
1385 : : .min = 24,
1386 : : .max = 24,
1387 : : .increment = 0
1388 : : },
1389 : : .iv_size = {
1390 : : .min = 8,
1391 : : .max = 16,
1392 : : .increment = 8
1393 : : }
1394 : : }, }
1395 : : }, }
1396 : : },
1397 : : };
1398 : :
1399 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_sha1_sha2[] = {
1400 : : { /* SHA1 HMAC */
1401 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1402 : : {.sym = {
1403 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1404 : : {.auth = {
1405 : : .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
1406 : : .block_size = 64,
1407 : : .key_size = {
1408 : : .min = 20,
1409 : : .max = 64,
1410 : : .increment = 1
1411 : : },
1412 : : .digest_size = {
1413 : : .min = 12,
1414 : : .max = 12,
1415 : : .increment = 0
1416 : : },
1417 : : }, }
1418 : : }, }
1419 : : },
1420 : : { /* SHA256 HMAC */
1421 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1422 : : {.sym = {
1423 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1424 : : {.auth = {
1425 : : .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
1426 : : .block_size = 64,
1427 : : .key_size = {
1428 : : .min = 1,
1429 : : .max = 1024,
1430 : : .increment = 1
1431 : : },
1432 : : .digest_size = {
1433 : : .min = 16,
1434 : : .max = 16,
1435 : : .increment = 0
1436 : : },
1437 : : }, }
1438 : : }, }
1439 : : },
1440 : : { /* SHA384 HMAC */
1441 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1442 : : {.sym = {
1443 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1444 : : {.auth = {
1445 : : .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
1446 : : .block_size = 64,
1447 : : .key_size = {
1448 : : .min = 48,
1449 : : .max = 48,
1450 : : .increment = 0
1451 : : },
1452 : : .digest_size = {
1453 : : .min = 24,
1454 : : .max = 24,
1455 : : .increment = 0
1456 : : },
1457 : : }, }
1458 : : }, }
1459 : : },
1460 : : { /* SHA512 HMAC */
1461 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1462 : : {.sym = {
1463 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1464 : : {.auth = {
1465 : : .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
1466 : : .block_size = 128,
1467 : : .key_size = {
1468 : : .min = 64,
1469 : : .max = 64,
1470 : : .increment = 0
1471 : : },
1472 : : .digest_size = {
1473 : : .min = 32,
1474 : : .max = 32,
1475 : : .increment = 0
1476 : : },
1477 : : }, }
1478 : : }, }
1479 : : },
1480 : : { /* MD5 HMAC */
1481 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1482 : : {.sym = {
1483 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1484 : : {.auth = {
1485 : : .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
1486 : : .block_size = 64,
1487 : : .key_size = {
1488 : : .min = 16,
1489 : : .max = 16,
1490 : : .increment = 0
1491 : : },
1492 : : .digest_size = {
1493 : : .min = 12,
1494 : : .max = 12,
1495 : : .increment = 0
1496 : : },
1497 : : }, }
1498 : : }, }
1499 : : },
1500 : : };
1501 : :
1502 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_null[] = {
1503 : : { /* NULL (CIPHER) */
1504 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1505 : : {.sym = {
1506 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1507 : : {.cipher = {
1508 : : .algo = RTE_CRYPTO_CIPHER_NULL,
1509 : : .block_size = 1,
1510 : : .key_size = {
1511 : : .min = 0,
1512 : : .max = 0,
1513 : : .increment = 0
1514 : : },
1515 : : .iv_size = {
1516 : : .min = 0,
1517 : : .max = 0,
1518 : : .increment = 0
1519 : : }
1520 : : }, },
1521 : : }, }
1522 : : },
1523 : : };
1524 : :
1525 : : static const struct rte_cryptodev_capabilities sec_tls12_caps_aes[] = {
1526 : : { /* AES GCM */
1527 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1528 : : {.sym = {
1529 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1530 : : {.aead = {
1531 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
1532 : : .block_size = 16,
1533 : : .key_size = {
1534 : : .min = 16,
1535 : : .max = 32,
1536 : : .increment = 16
1537 : : },
1538 : : .digest_size = {
1539 : : .min = 16,
1540 : : .max = 16,
1541 : : .increment = 0
1542 : : },
1543 : : .aad_size = {
1544 : : .min = 13,
1545 : : .max = 13,
1546 : : .increment = 0
1547 : : },
1548 : : .iv_size = {
1549 : : .min = 12,
1550 : : .max = 12,
1551 : : .increment = 0
1552 : : }
1553 : : }, }
1554 : : }, }
1555 : : },
1556 : : { /* AES CBC */
1557 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1558 : : {.sym = {
1559 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1560 : : {.cipher = {
1561 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
1562 : : .block_size = 16,
1563 : : .key_size = {
1564 : : .min = 16,
1565 : : .max = 32,
1566 : : .increment = 8
1567 : : },
1568 : : .iv_size = {
1569 : : .min = 16,
1570 : : .max = 16,
1571 : : .increment = 0
1572 : : }
1573 : : }, }
1574 : : }, }
1575 : : },
1576 : : };
1577 : :
1578 : : static const struct rte_cryptodev_capabilities sec_tls12_caps_des[] = {
1579 : : { /* 3DES CBC */
1580 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1581 : : {.sym = {
1582 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1583 : : {.cipher = {
1584 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
1585 : : .block_size = 8,
1586 : : .key_size = {
1587 : : .min = 24,
1588 : : .max = 24,
1589 : : .increment = 0
1590 : : },
1591 : : .iv_size = {
1592 : : .min = 8,
1593 : : .max = 8,
1594 : : .increment = 0
1595 : : }
1596 : : }, }
1597 : : }, }
1598 : : },
1599 : : };
1600 : :
1601 : : static const struct rte_cryptodev_capabilities sec_tls12_caps_sha1_sha2[] = {
1602 : : { /* SHA1 HMAC */
1603 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1604 : : {.sym = {
1605 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1606 : : {.auth = {
1607 : : .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
1608 : : .block_size = 64,
1609 : : .key_size = {
1610 : : .min = 20,
1611 : : .max = 20,
1612 : : .increment = 0
1613 : : },
1614 : : .digest_size = {
1615 : : .min = 20,
1616 : : .max = 20,
1617 : : .increment = 0
1618 : : },
1619 : : }, }
1620 : : }, }
1621 : : },
1622 : : { /* SHA256 HMAC */
1623 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1624 : : {.sym = {
1625 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1626 : : {.auth = {
1627 : : .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
1628 : : .block_size = 64,
1629 : : .key_size = {
1630 : : .min = 32,
1631 : : .max = 32,
1632 : : .increment = 0
1633 : : },
1634 : : .digest_size = {
1635 : : .min = 32,
1636 : : .max = 32,
1637 : : .increment = 0
1638 : : },
1639 : : }, }
1640 : : }, }
1641 : : },
1642 : : { /* SHA384 HMAC */
1643 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1644 : : {.sym = {
1645 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1646 : : {.auth = {
1647 : : .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
1648 : : .block_size = 64,
1649 : : .key_size = {
1650 : : .min = 48,
1651 : : .max = 48,
1652 : : .increment = 0
1653 : : },
1654 : : .digest_size = {
1655 : : .min = 48,
1656 : : .max = 48,
1657 : : .increment = 0
1658 : : },
1659 : : }, }
1660 : : }, }
1661 : : },
1662 : :
1663 : : };
1664 : :
1665 : : static const struct rte_cryptodev_capabilities sec_tls13_caps_aes[] = {
1666 : : { /* AES GCM */
1667 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1668 : : {.sym = {
1669 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1670 : : {.aead = {
1671 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
1672 : : .block_size = 16,
1673 : : .key_size = {
1674 : : .min = 16,
1675 : : .max = 32,
1676 : : .increment = 16
1677 : : },
1678 : : .digest_size = {
1679 : : .min = 16,
1680 : : .max = 16,
1681 : : .increment = 0
1682 : : },
1683 : : .aad_size = {
1684 : : .min = 5,
1685 : : .max = 5,
1686 : : .increment = 0
1687 : : },
1688 : : .iv_size = {
1689 : : .min = 0,
1690 : : .max = 0,
1691 : : .increment = 0
1692 : : }
1693 : : }, }
1694 : : }, }
1695 : : },
1696 : : { /* CHACHA POLY */
1697 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1698 : : {.sym = {
1699 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1700 : : {.aead = {
1701 : : .algo = RTE_CRYPTO_AEAD_CHACHA20_POLY1305,
1702 : : .block_size = 64,
1703 : : .key_size = {
1704 : : .min = 32,
1705 : : .max = 32,
1706 : : .increment = 0
1707 : : },
1708 : : .digest_size = {
1709 : : .min = 16,
1710 : : .max = 16,
1711 : : .increment = 0
1712 : : },
1713 : : .aad_size = {
1714 : : .min = 5,
1715 : : .max = 5,
1716 : : .increment = 0
1717 : : },
1718 : : .iv_size = {
1719 : : .min = 0,
1720 : : .max = 0,
1721 : : .increment = 0
1722 : : }
1723 : : }, }
1724 : : }, }
1725 : : },
1726 : :
1727 : : };
1728 : :
1729 : :
1730 : : static const struct rte_security_capability sec_caps_templ[] = {
1731 : : { /* IPsec Lookaside Protocol ESP Tunnel Ingress */
1732 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1733 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1734 : : .ipsec = {
1735 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1736 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1737 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1738 : : .options = { 0 },
1739 : : },
1740 : : .crypto_capabilities = NULL,
1741 : : },
1742 : : { /* IPsec Lookaside Protocol ESP Tunnel Egress */
1743 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1744 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1745 : : .ipsec = {
1746 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1747 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1748 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1749 : : .options = { 0 },
1750 : : },
1751 : : .crypto_capabilities = NULL,
1752 : : },
1753 : : { /* IPsec Lookaside Protocol ESP Transport Ingress */
1754 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1755 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1756 : : .ipsec = {
1757 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1758 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1759 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1760 : : .options = { 0 },
1761 : : },
1762 : : .crypto_capabilities = NULL,
1763 : : },
1764 : : { /* IPsec Lookaside Protocol ESP Transport Egress */
1765 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1766 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1767 : : .ipsec = {
1768 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1769 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1770 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1771 : : .options = { 0 },
1772 : : },
1773 : : .crypto_capabilities = NULL,
1774 : : },
1775 : : { /* IPsec Lookaside Protocol AH Tunnel Ingress */
1776 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1777 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1778 : : .ipsec = {
1779 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1780 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1781 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1782 : : .options = { 0 },
1783 : : },
1784 : : .crypto_capabilities = NULL,
1785 : : },
1786 : : { /* IPsec Lookaside Protocol AH Tunnel Egress */
1787 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1788 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1789 : : .ipsec = {
1790 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1791 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1792 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1793 : : .options = { 0 },
1794 : : },
1795 : : .crypto_capabilities = NULL,
1796 : : },
1797 : : { /* IPsec Lookaside Protocol AH Transport Ingress */
1798 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1799 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1800 : : .ipsec = {
1801 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1802 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1803 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1804 : : .options = { 0 },
1805 : : },
1806 : : .crypto_capabilities = NULL,
1807 : : },
1808 : : { /* IPsec Lookaside Protocol AH Transport Egress */
1809 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1810 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1811 : : .ipsec = {
1812 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1813 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1814 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1815 : : .options = { 0 },
1816 : : },
1817 : : .crypto_capabilities = NULL,
1818 : : },
1819 : : { /* TLS 1.2 Record Read */
1820 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1821 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1822 : : .tls_record = {
1823 : : .ver = RTE_SECURITY_VERSION_TLS_1_2,
1824 : : .type = RTE_SECURITY_TLS_SESS_TYPE_READ,
1825 : : .ar_win_size = 0,
1826 : : },
1827 : : .crypto_capabilities = NULL,
1828 : : },
1829 : : { /* TLS 1.2 Record Write */
1830 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1831 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1832 : : .tls_record = {
1833 : : .ver = RTE_SECURITY_VERSION_TLS_1_2,
1834 : : .type = RTE_SECURITY_TLS_SESS_TYPE_WRITE,
1835 : : .ar_win_size = 0,
1836 : : },
1837 : : .crypto_capabilities = NULL,
1838 : : },
1839 : : { /* DTLS 1.2 Record Read */
1840 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1841 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1842 : : .tls_record = {
1843 : : .ver = RTE_SECURITY_VERSION_DTLS_1_2,
1844 : : .type = RTE_SECURITY_TLS_SESS_TYPE_READ,
1845 : : .ar_win_size = 0,
1846 : : },
1847 : : .crypto_capabilities = NULL,
1848 : : },
1849 : : { /* DTLS 1.2 Record Write */
1850 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1851 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1852 : : .tls_record = {
1853 : : .ver = RTE_SECURITY_VERSION_DTLS_1_2,
1854 : : .type = RTE_SECURITY_TLS_SESS_TYPE_WRITE,
1855 : : .ar_win_size = 0,
1856 : : },
1857 : : .crypto_capabilities = NULL,
1858 : : },
1859 : : { /* TLS 1.3 Record Read */
1860 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1861 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1862 : : .tls_record = {
1863 : : .ver = RTE_SECURITY_VERSION_TLS_1_3,
1864 : : .type = RTE_SECURITY_TLS_SESS_TYPE_READ,
1865 : : .ar_win_size = 0,
1866 : : },
1867 : : .crypto_capabilities = NULL,
1868 : : },
1869 : : { /* TLS 1.3 Record Write */
1870 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1871 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1872 : : .tls_record = {
1873 : : .ver = RTE_SECURITY_VERSION_TLS_1_3,
1874 : : .type = RTE_SECURITY_TLS_SESS_TYPE_WRITE,
1875 : : .ar_win_size = 0,
1876 : : },
1877 : : .crypto_capabilities = NULL,
1878 : : },
1879 : : {
1880 : : .action = RTE_SECURITY_ACTION_TYPE_NONE
1881 : : }
1882 : : };
1883 : :
1884 : : static void
1885 : 0 : cpt_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
1886 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
1887 : : {
1888 [ # # ]: 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_CPT_MAX_CAPS);
1889 : :
1890 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
1891 : 0 : *cur_pos += nb_caps;
1892 : 0 : }
1893 : :
1894 : : static void
1895 : 0 : cn10k_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[])
1896 : : {
1897 : :
1898 : : struct rte_cryptodev_capabilities *caps;
1899 : : int i = 0;
1900 : :
1901 [ # # ]: 0 : while ((caps = &cnxk_caps[i++])->op != RTE_CRYPTO_OP_TYPE_UNDEFINED) {
1902 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
1903 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_CIPHER) &&
1904 : : (caps->sym.cipher.algo == RTE_CRYPTO_CIPHER_ZUC_EEA3)) {
1905 : :
1906 : 0 : caps->sym.cipher.key_size.max = 32;
1907 : 0 : caps->sym.cipher.key_size.increment = 16;
1908 : 0 : caps->sym.cipher.iv_size.max = 25;
1909 : 0 : caps->sym.cipher.iv_size.increment = 1;
1910 : : }
1911 : :
1912 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
1913 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH) &&
1914 : : (caps->sym.auth.algo == RTE_CRYPTO_AUTH_ZUC_EIA3)) {
1915 : :
1916 : 0 : caps->sym.auth.key_size.max = 32;
1917 : 0 : caps->sym.auth.key_size.increment = 16;
1918 : 0 : caps->sym.auth.digest_size.max = 16;
1919 : 0 : caps->sym.auth.digest_size.increment = 4;
1920 : 0 : caps->sym.auth.iv_size.max = 25;
1921 : 0 : caps->sym.auth.iv_size.increment = 1;
1922 : : }
1923 : : }
1924 : 0 : }
1925 : :
1926 : : static void
1927 : : cn9k_crypto_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos)
1928 : : {
1929 : 0 : cpt_caps_add(cnxk_caps, cur_pos, caps_docsis, RTE_DIM(caps_docsis));
1930 : 0 : }
1931 : :
1932 : : static void
1933 : 0 : cn10k_crypto_caps_add(struct rte_cryptodev_capabilities cnxk_caps[],
1934 : : union cpt_eng_caps *hw_caps, int *cur_pos)
1935 : : {
1936 [ # # ]: 0 : if (hw_caps[CPT_ENG_TYPE_SE].sg_ver2) {
1937 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm3);
# # ]
1938 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm4);
# # ]
1939 : : }
1940 : :
1941 [ # # ]: 0 : if (hw_caps[CPT_ENG_TYPE_AE].sm2)
1942 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm2);
# # ]
1943 : 0 : }
1944 : :
1945 : : static void
1946 : 0 : crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
1947 : : union cpt_eng_caps *hw_caps)
1948 : : {
1949 : 0 : int cur_pos = 0;
1950 : :
1951 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, mul);
# # ]
1952 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
1953 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha3);
# # ]
1954 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, chacha20);
# # ]
1955 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, zuc_snow3g);
# # ]
1956 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
1957 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, kasumi);
# # ]
1958 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
1959 : :
1960 [ # # ]: 0 : if (!roc_model_is_cn10k())
1961 : : cn9k_crypto_caps_add(cnxk_caps, &cur_pos);
1962 : :
1963 [ # # ]: 0 : if (roc_model_is_cn10k())
1964 : 0 : cn10k_crypto_caps_add(cnxk_caps, hw_caps, &cur_pos);
1965 : :
1966 : 0 : cpt_caps_add(cnxk_caps, &cur_pos, caps_null, RTE_DIM(caps_null));
1967 : 0 : cpt_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
1968 : :
1969 [ # # ]: 0 : if (roc_model_is_cn10k())
1970 : 0 : cn10k_crypto_caps_update(cnxk_caps);
1971 : 0 : }
1972 : :
1973 : : const struct rte_cryptodev_capabilities *
1974 : 0 : cnxk_crypto_capabilities_get(struct cnxk_cpt_vf *vf)
1975 : : {
1976 : 0 : return vf->crypto_caps;
1977 : : }
1978 : :
1979 : : static void
1980 : : sec_ipsec_caps_limit_check(int *cur_pos, int nb_caps)
1981 : : {
1982 : 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_SEC_IPSEC_CRYPTO_MAX_CAPS);
1983 : : }
1984 : :
1985 : : static void
1986 [ # # ]: 0 : sec_ipsec_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
1987 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
1988 : : {
1989 : : sec_ipsec_caps_limit_check(cur_pos, nb_caps);
1990 : :
1991 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
1992 : 0 : *cur_pos += nb_caps;
1993 : 0 : }
1994 : :
1995 : : static void
1996 [ # # ]: 0 : cn10k_sec_ipsec_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos)
1997 : : {
1998 : : const struct rte_cryptodev_capabilities *cap;
1999 : : unsigned int i;
2000 : :
2001 : : sec_ipsec_caps_limit_check(cur_pos, 1);
2002 : :
2003 : : /* NULL auth */
2004 [ # # ]: 0 : for (i = 0; i < RTE_DIM(caps_null); i++) {
2005 : : cap = &caps_null[i];
2006 [ # # ]: 0 : if (cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH &&
2007 : : cap->sym.auth.algo == RTE_CRYPTO_AUTH_NULL) {
2008 : 0 : cnxk_caps[*cur_pos] = caps_null[i];
2009 : 0 : *cur_pos += 1;
2010 : : }
2011 : : }
2012 : 0 : }
2013 : :
2014 : : static void
2015 : : cn9k_sec_ipsec_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[])
2016 : : {
2017 : :
2018 : : struct rte_cryptodev_capabilities *caps;
2019 : : int i = 0;
2020 : :
2021 [ # # ]: 0 : while ((caps = &cnxk_caps[i++])->op != RTE_CRYPTO_OP_TYPE_UNDEFINED) {
2022 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
2023 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH) &&
2024 : : (caps->sym.auth.algo == RTE_CRYPTO_AUTH_SHA256_HMAC)) {
2025 : 0 : caps->sym.auth.key_size.min = 32;
2026 : 0 : caps->sym.auth.key_size.max = 64;
2027 : 0 : caps->sym.auth.key_size.increment = 1;
2028 : :
2029 : 0 : break;
2030 : : }
2031 : : }
2032 : : }
2033 : :
2034 : : static void
2035 : 0 : sec_ipsec_crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
2036 : : union cpt_eng_caps *hw_caps)
2037 : : {
2038 : 0 : int cur_pos = 0;
2039 : :
2040 [ # # # # : 0 : SEC_IPSEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
2041 [ # # # # : 0 : SEC_IPSEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
2042 [ # # # # : 0 : SEC_IPSEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
2043 : :
2044 [ # # ]: 0 : if (roc_model_is_cn10k())
2045 : 0 : cn10k_sec_ipsec_crypto_caps_update(cnxk_caps, &cur_pos);
2046 : : else
2047 : : cn9k_sec_ipsec_crypto_caps_update(cnxk_caps);
2048 : :
2049 : 0 : sec_ipsec_caps_add(cnxk_caps, &cur_pos, sec_ipsec_caps_null, RTE_DIM(sec_ipsec_caps_null));
2050 : 0 : sec_ipsec_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
2051 : 0 : }
2052 : :
2053 : : static void
2054 : : cnxk_sec_ipsec_caps_update(struct rte_security_capability *sec_cap)
2055 : : {
2056 : 0 : sec_cap->ipsec.options.udp_encap = 1;
2057 : 0 : sec_cap->ipsec.options.copy_df = 1;
2058 : 0 : sec_cap->ipsec.options.copy_dscp = 1;
2059 : : }
2060 : :
2061 : : static void
2062 : : cn10k_sec_ipsec_caps_update(struct rte_security_capability *sec_cap)
2063 : : {
2064 [ # # ]: 0 : if (sec_cap->ipsec.direction == RTE_SECURITY_IPSEC_SA_DIR_EGRESS) {
2065 : : #ifdef LA_IPSEC_DEBUG
2066 : : sec_cap->ipsec.options.iv_gen_disable = 1;
2067 : : #endif
2068 : : } else {
2069 : 0 : sec_cap->ipsec.options.udp_ports_verify = 1;
2070 [ # # ]: 0 : if (sec_cap->ipsec.mode == RTE_SECURITY_IPSEC_SA_MODE_TUNNEL)
2071 : 0 : sec_cap->ipsec.options.tunnel_hdr_verify =
2072 : : RTE_SECURITY_IPSEC_TUNNEL_VERIFY_SRC_DST_ADDR;
2073 : : }
2074 : 0 : sec_cap->ipsec.options.dec_ttl = 1;
2075 : 0 : sec_cap->ipsec.options.ip_csum_enable = 1;
2076 : 0 : sec_cap->ipsec.options.l4_csum_enable = 1;
2077 : 0 : sec_cap->ipsec.options.stats = 1;
2078 : 0 : sec_cap->ipsec.options.esn = 1;
2079 : 0 : sec_cap->ipsec.options.copy_flabel = 1;
2080 : 0 : sec_cap->ipsec.replay_win_sz_max = ROC_AR_WIN_SIZE_MAX;
2081 : 0 : }
2082 : :
2083 : : static void
2084 : : cn9k_sec_ipsec_caps_update(struct rte_security_capability *sec_cap)
2085 : : {
2086 : : if (sec_cap->ipsec.direction == RTE_SECURITY_IPSEC_SA_DIR_EGRESS) {
2087 : : #ifdef LA_IPSEC_DEBUG
2088 : : sec_cap->ipsec.options.iv_gen_disable = 1;
2089 : : #endif
2090 : : }
2091 : 0 : sec_cap->ipsec.replay_win_sz_max = CNXK_ON_AR_WIN_SIZE_MAX;
2092 : 0 : sec_cap->ipsec.options.esn = 1;
2093 : 0 : }
2094 : :
2095 : : static void
2096 : : sec_tls12_caps_limit_check(int *cur_pos, int nb_caps)
2097 : : {
2098 : 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_SEC_TLS_1_2_CRYPTO_MAX_CAPS);
2099 : : }
2100 : :
2101 : : static void
2102 [ # # ]: 0 : sec_tls12_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
2103 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
2104 : : {
2105 : : sec_tls12_caps_limit_check(cur_pos, nb_caps);
2106 : :
2107 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
2108 : 0 : *cur_pos += nb_caps;
2109 : 0 : }
2110 : :
2111 : : static void
2112 : 0 : sec_tls12_crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
2113 : : union cpt_eng_caps *hw_caps)
2114 : : {
2115 : 0 : int cur_pos = 0;
2116 : :
2117 [ # # # # : 0 : SEC_TLS12_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
2118 [ # # # # : 0 : SEC_TLS12_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
2119 [ # # # # : 0 : SEC_TLS12_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
2120 : :
2121 : 0 : sec_tls12_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
2122 : 0 : }
2123 : :
2124 : : static void
2125 : : sec_tls13_caps_limit_check(int *cur_pos, int nb_caps)
2126 : : {
2127 : 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_SEC_TLS_1_3_CRYPTO_MAX_CAPS);
2128 : : }
2129 : :
2130 : : static void
2131 [ # # ]: 0 : sec_tls13_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
2132 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
2133 : : {
2134 : : sec_tls13_caps_limit_check(cur_pos, nb_caps);
2135 : :
2136 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
2137 : 0 : *cur_pos += nb_caps;
2138 : 0 : }
2139 : :
2140 : : static void
2141 : 0 : sec_tls13_crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
2142 : : union cpt_eng_caps *hw_caps)
2143 : : {
2144 : 0 : int cur_pos = 0;
2145 : :
2146 [ # # # # : 0 : SEC_TLS13_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
2147 : :
2148 : 0 : sec_tls13_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
2149 : 0 : }
2150 : :
2151 : : void
2152 : 0 : cnxk_cpt_caps_populate(struct cnxk_cpt_vf *vf)
2153 : : {
2154 : : unsigned long i;
2155 : :
2156 : 0 : crypto_caps_populate(vf->crypto_caps, vf->cpt.hw_caps);
2157 : 0 : sec_ipsec_crypto_caps_populate(vf->sec_ipsec_crypto_caps, vf->cpt.hw_caps);
2158 : :
2159 [ # # ]: 0 : if (vf->cpt.hw_caps[CPT_ENG_TYPE_SE].tls) {
2160 : 0 : sec_tls12_crypto_caps_populate(vf->sec_tls_1_2_crypto_caps, vf->cpt.hw_caps);
2161 : 0 : sec_tls12_crypto_caps_populate(vf->sec_dtls_1_2_crypto_caps, vf->cpt.hw_caps);
2162 : 0 : sec_tls13_crypto_caps_populate(vf->sec_tls_1_3_crypto_caps, vf->cpt.hw_caps);
2163 : : }
2164 : :
2165 : : PLT_STATIC_ASSERT(RTE_DIM(sec_caps_templ) <= RTE_DIM(vf->sec_caps));
2166 : 0 : memcpy(vf->sec_caps, sec_caps_templ, sizeof(sec_caps_templ));
2167 : :
2168 [ # # ]: 0 : for (i = 0; i < RTE_DIM(sec_caps_templ) - 1; i++) {
2169 : :
2170 [ # # ]: 0 : if (vf->sec_caps[i].protocol == RTE_SECURITY_PROTOCOL_IPSEC) {
2171 [ # # ]: 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_ipsec_crypto_caps;
2172 : :
2173 : : cnxk_sec_ipsec_caps_update(&vf->sec_caps[i]);
2174 : :
2175 [ # # ]: 0 : if (roc_model_is_cn10k())
2176 : : cn10k_sec_ipsec_caps_update(&vf->sec_caps[i]);
2177 : :
2178 [ # # ]: 0 : if (roc_model_is_cn9k())
2179 : : cn9k_sec_ipsec_caps_update(&vf->sec_caps[i]);
2180 [ # # ]: 0 : } else if (vf->sec_caps[i].protocol == RTE_SECURITY_PROTOCOL_TLS_RECORD) {
2181 [ # # ]: 0 : if (vf->sec_caps[i].tls_record.ver == RTE_SECURITY_VERSION_TLS_1_3)
2182 : 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_tls_1_3_crypto_caps;
2183 [ # # ]: 0 : else if (vf->sec_caps[i].tls_record.ver == RTE_SECURITY_VERSION_DTLS_1_2)
2184 : 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_dtls_1_2_crypto_caps;
2185 : : else
2186 : 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_tls_1_2_crypto_caps;
2187 : : }
2188 : : }
2189 : 0 : }
2190 : :
2191 : : const struct rte_security_capability *
2192 : 0 : cnxk_crypto_sec_capabilities_get(void *device)
2193 : : {
2194 : : struct rte_cryptodev *dev = device;
2195 : : struct cnxk_cpt_vf *vf;
2196 : :
2197 : 0 : vf = dev->data->dev_private;
2198 : 0 : return vf->sec_caps;
2199 : : }
|