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_eddsa[] = {
1205 : : { /* EdDSA */
1206 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
1207 : : {.asym = {
1208 : : .xform_capa = {
1209 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_EDDSA,
1210 : : .hash_algos = (RTE_BIT64(RTE_CRYPTO_AUTH_SHA512) |
1211 : : RTE_BIT64(RTE_CRYPTO_AUTH_SHAKE_256)),
1212 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
1213 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY))
1214 : : }
1215 : : }
1216 : : }
1217 : : }
1218 : : };
1219 : :
1220 : : static const struct rte_cryptodev_capabilities caps_end[] = {
1221 : : RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
1222 : : };
1223 : :
1224 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_aes[] = {
1225 : : { /* AES GCM */
1226 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1227 : : {.sym = {
1228 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1229 : : {.aead = {
1230 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
1231 : : .block_size = 16,
1232 : : .key_size = {
1233 : : .min = 16,
1234 : : .max = 32,
1235 : : .increment = 8
1236 : : },
1237 : : .digest_size = {
1238 : : .min = 16,
1239 : : .max = 16,
1240 : : .increment = 0
1241 : : },
1242 : : .aad_size = {
1243 : : .min = 8,
1244 : : .max = 12,
1245 : : .increment = 4
1246 : : },
1247 : : .iv_size = {
1248 : : .min = 12,
1249 : : .max = 12,
1250 : : .increment = 0
1251 : : }
1252 : : }, }
1253 : : }, }
1254 : : },
1255 : : { /* AES CCM */
1256 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1257 : : {.sym = {
1258 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1259 : : {.aead = {
1260 : : .algo = RTE_CRYPTO_AEAD_AES_CCM,
1261 : : .block_size = 16,
1262 : : .key_size = {
1263 : : .min = 16,
1264 : : .max = 32,
1265 : : .increment = 8
1266 : : },
1267 : : .digest_size = {
1268 : : .min = 16,
1269 : : .max = 16,
1270 : : .increment = 0
1271 : : },
1272 : : .aad_size = {
1273 : : .min = 8,
1274 : : .max = 12,
1275 : : .increment = 4
1276 : : },
1277 : : .iv_size = {
1278 : : .min = 11,
1279 : : .max = 11,
1280 : : .increment = 0
1281 : : }
1282 : : }, }
1283 : : }, }
1284 : : },
1285 : : { /* AES CTR */
1286 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1287 : : {.sym = {
1288 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1289 : : {.cipher = {
1290 : : .algo = RTE_CRYPTO_CIPHER_AES_CTR,
1291 : : .block_size = 16,
1292 : : .key_size = {
1293 : : .min = 16,
1294 : : .max = 32,
1295 : : .increment = 8
1296 : : },
1297 : : .iv_size = {
1298 : : .min = 12,
1299 : : .max = 16,
1300 : : .increment = 4
1301 : : }
1302 : : }, }
1303 : : }, }
1304 : : },
1305 : : { /* AES CBC */
1306 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1307 : : {.sym = {
1308 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1309 : : {.cipher = {
1310 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
1311 : : .block_size = 16,
1312 : : .key_size = {
1313 : : .min = 16,
1314 : : .max = 32,
1315 : : .increment = 8
1316 : : },
1317 : : .iv_size = {
1318 : : .min = 16,
1319 : : .max = 16,
1320 : : .increment = 0
1321 : : }
1322 : : }, }
1323 : : }, }
1324 : : },
1325 : : { /* AES-XCBC */
1326 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1327 : : { .sym = {
1328 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1329 : : {.auth = {
1330 : : .algo = RTE_CRYPTO_AUTH_AES_XCBC_MAC,
1331 : : .block_size = 16,
1332 : : .key_size = {
1333 : : .min = 16,
1334 : : .max = 16,
1335 : : .increment = 0
1336 : : },
1337 : : .digest_size = {
1338 : : .min = 12,
1339 : : .max = 12,
1340 : : .increment = 0,
1341 : : },
1342 : : }, }
1343 : : }, }
1344 : : },
1345 : : { /* AES GMAC (AUTH) */
1346 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1347 : : {.sym = {
1348 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1349 : : {.auth = {
1350 : : .algo = RTE_CRYPTO_AUTH_AES_GMAC,
1351 : : .block_size = 16,
1352 : : .key_size = {
1353 : : .min = 16,
1354 : : .max = 32,
1355 : : .increment = 8
1356 : : },
1357 : : .digest_size = {
1358 : : .min = 8,
1359 : : .max = 16,
1360 : : .increment = 4
1361 : : },
1362 : : .iv_size = {
1363 : : .min = 12,
1364 : : .max = 12,
1365 : : .increment = 0
1366 : : }
1367 : : }, }
1368 : : }, }
1369 : : },
1370 : : };
1371 : :
1372 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_des[] = {
1373 : : { /* DES */
1374 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1375 : : {.sym = {
1376 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1377 : : {.cipher = {
1378 : : .algo = RTE_CRYPTO_CIPHER_DES_CBC,
1379 : : .block_size = 8,
1380 : : .key_size = {
1381 : : .min = 8,
1382 : : .max = 8,
1383 : : .increment = 0
1384 : : },
1385 : : .iv_size = {
1386 : : .min = 8,
1387 : : .max = 8,
1388 : : .increment = 0
1389 : : }
1390 : : }, },
1391 : : }, }
1392 : : },
1393 : : { /* 3DES CBC */
1394 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1395 : : {.sym = {
1396 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1397 : : {.cipher = {
1398 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
1399 : : .block_size = 8,
1400 : : .key_size = {
1401 : : .min = 24,
1402 : : .max = 24,
1403 : : .increment = 0
1404 : : },
1405 : : .iv_size = {
1406 : : .min = 8,
1407 : : .max = 16,
1408 : : .increment = 8
1409 : : }
1410 : : }, }
1411 : : }, }
1412 : : },
1413 : : };
1414 : :
1415 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_sha1_sha2[] = {
1416 : : { /* SHA1 HMAC */
1417 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1418 : : {.sym = {
1419 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1420 : : {.auth = {
1421 : : .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
1422 : : .block_size = 64,
1423 : : .key_size = {
1424 : : .min = 20,
1425 : : .max = 64,
1426 : : .increment = 1
1427 : : },
1428 : : .digest_size = {
1429 : : .min = 12,
1430 : : .max = 12,
1431 : : .increment = 0
1432 : : },
1433 : : }, }
1434 : : }, }
1435 : : },
1436 : : { /* SHA256 HMAC */
1437 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1438 : : {.sym = {
1439 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1440 : : {.auth = {
1441 : : .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
1442 : : .block_size = 64,
1443 : : .key_size = {
1444 : : .min = 1,
1445 : : .max = 1024,
1446 : : .increment = 1
1447 : : },
1448 : : .digest_size = {
1449 : : .min = 16,
1450 : : .max = 16,
1451 : : .increment = 0
1452 : : },
1453 : : }, }
1454 : : }, }
1455 : : },
1456 : : { /* SHA384 HMAC */
1457 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1458 : : {.sym = {
1459 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1460 : : {.auth = {
1461 : : .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
1462 : : .block_size = 64,
1463 : : .key_size = {
1464 : : .min = 48,
1465 : : .max = 48,
1466 : : .increment = 0
1467 : : },
1468 : : .digest_size = {
1469 : : .min = 24,
1470 : : .max = 24,
1471 : : .increment = 0
1472 : : },
1473 : : }, }
1474 : : }, }
1475 : : },
1476 : : { /* SHA512 HMAC */
1477 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1478 : : {.sym = {
1479 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1480 : : {.auth = {
1481 : : .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
1482 : : .block_size = 128,
1483 : : .key_size = {
1484 : : .min = 64,
1485 : : .max = 64,
1486 : : .increment = 0
1487 : : },
1488 : : .digest_size = {
1489 : : .min = 32,
1490 : : .max = 32,
1491 : : .increment = 0
1492 : : },
1493 : : }, }
1494 : : }, }
1495 : : },
1496 : : { /* MD5 HMAC */
1497 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1498 : : {.sym = {
1499 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1500 : : {.auth = {
1501 : : .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
1502 : : .block_size = 64,
1503 : : .key_size = {
1504 : : .min = 16,
1505 : : .max = 16,
1506 : : .increment = 0
1507 : : },
1508 : : .digest_size = {
1509 : : .min = 12,
1510 : : .max = 12,
1511 : : .increment = 0
1512 : : },
1513 : : }, }
1514 : : }, }
1515 : : },
1516 : : };
1517 : :
1518 : : static const struct rte_cryptodev_capabilities sec_ipsec_caps_null[] = {
1519 : : { /* NULL (CIPHER) */
1520 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1521 : : {.sym = {
1522 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1523 : : {.cipher = {
1524 : : .algo = RTE_CRYPTO_CIPHER_NULL,
1525 : : .block_size = 1,
1526 : : .key_size = {
1527 : : .min = 0,
1528 : : .max = 0,
1529 : : .increment = 0
1530 : : },
1531 : : .iv_size = {
1532 : : .min = 0,
1533 : : .max = 0,
1534 : : .increment = 0
1535 : : }
1536 : : }, },
1537 : : }, }
1538 : : },
1539 : : };
1540 : :
1541 : : static const struct rte_cryptodev_capabilities sec_tls12_caps_aes[] = {
1542 : : { /* AES GCM */
1543 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1544 : : {.sym = {
1545 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1546 : : {.aead = {
1547 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
1548 : : .block_size = 16,
1549 : : .key_size = {
1550 : : .min = 16,
1551 : : .max = 32,
1552 : : .increment = 16
1553 : : },
1554 : : .digest_size = {
1555 : : .min = 16,
1556 : : .max = 16,
1557 : : .increment = 0
1558 : : },
1559 : : .aad_size = {
1560 : : .min = 13,
1561 : : .max = 13,
1562 : : .increment = 0
1563 : : },
1564 : : .iv_size = {
1565 : : .min = 12,
1566 : : .max = 12,
1567 : : .increment = 0
1568 : : }
1569 : : }, }
1570 : : }, }
1571 : : },
1572 : : { /* AES CBC */
1573 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1574 : : {.sym = {
1575 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1576 : : {.cipher = {
1577 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
1578 : : .block_size = 16,
1579 : : .key_size = {
1580 : : .min = 16,
1581 : : .max = 32,
1582 : : .increment = 8
1583 : : },
1584 : : .iv_size = {
1585 : : .min = 16,
1586 : : .max = 16,
1587 : : .increment = 0
1588 : : }
1589 : : }, }
1590 : : }, }
1591 : : },
1592 : : };
1593 : :
1594 : : static const struct rte_cryptodev_capabilities sec_tls12_caps_des[] = {
1595 : : { /* 3DES CBC */
1596 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1597 : : {.sym = {
1598 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
1599 : : {.cipher = {
1600 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
1601 : : .block_size = 8,
1602 : : .key_size = {
1603 : : .min = 24,
1604 : : .max = 24,
1605 : : .increment = 0
1606 : : },
1607 : : .iv_size = {
1608 : : .min = 8,
1609 : : .max = 8,
1610 : : .increment = 0
1611 : : }
1612 : : }, }
1613 : : }, }
1614 : : },
1615 : : };
1616 : :
1617 : : static const struct rte_cryptodev_capabilities sec_tls12_caps_sha1_sha2[] = {
1618 : : { /* SHA1 HMAC */
1619 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1620 : : {.sym = {
1621 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1622 : : {.auth = {
1623 : : .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
1624 : : .block_size = 64,
1625 : : .key_size = {
1626 : : .min = 20,
1627 : : .max = 20,
1628 : : .increment = 0
1629 : : },
1630 : : .digest_size = {
1631 : : .min = 20,
1632 : : .max = 20,
1633 : : .increment = 0
1634 : : },
1635 : : }, }
1636 : : }, }
1637 : : },
1638 : : { /* SHA256 HMAC */
1639 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1640 : : {.sym = {
1641 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1642 : : {.auth = {
1643 : : .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
1644 : : .block_size = 64,
1645 : : .key_size = {
1646 : : .min = 32,
1647 : : .max = 32,
1648 : : .increment = 0
1649 : : },
1650 : : .digest_size = {
1651 : : .min = 32,
1652 : : .max = 32,
1653 : : .increment = 0
1654 : : },
1655 : : }, }
1656 : : }, }
1657 : : },
1658 : : { /* SHA384 HMAC */
1659 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1660 : : {.sym = {
1661 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
1662 : : {.auth = {
1663 : : .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
1664 : : .block_size = 64,
1665 : : .key_size = {
1666 : : .min = 48,
1667 : : .max = 48,
1668 : : .increment = 0
1669 : : },
1670 : : .digest_size = {
1671 : : .min = 48,
1672 : : .max = 48,
1673 : : .increment = 0
1674 : : },
1675 : : }, }
1676 : : }, }
1677 : : },
1678 : :
1679 : : };
1680 : :
1681 : : static const struct rte_cryptodev_capabilities sec_tls13_caps_aes[] = {
1682 : : { /* AES GCM */
1683 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1684 : : {.sym = {
1685 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1686 : : {.aead = {
1687 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
1688 : : .block_size = 16,
1689 : : .key_size = {
1690 : : .min = 16,
1691 : : .max = 32,
1692 : : .increment = 16
1693 : : },
1694 : : .digest_size = {
1695 : : .min = 16,
1696 : : .max = 16,
1697 : : .increment = 0
1698 : : },
1699 : : .aad_size = {
1700 : : .min = 5,
1701 : : .max = 5,
1702 : : .increment = 0
1703 : : },
1704 : : .iv_size = {
1705 : : .min = 0,
1706 : : .max = 0,
1707 : : .increment = 0
1708 : : }
1709 : : }, }
1710 : : }, }
1711 : : },
1712 : : { /* CHACHA POLY */
1713 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
1714 : : {.sym = {
1715 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
1716 : : {.aead = {
1717 : : .algo = RTE_CRYPTO_AEAD_CHACHA20_POLY1305,
1718 : : .block_size = 64,
1719 : : .key_size = {
1720 : : .min = 32,
1721 : : .max = 32,
1722 : : .increment = 0
1723 : : },
1724 : : .digest_size = {
1725 : : .min = 16,
1726 : : .max = 16,
1727 : : .increment = 0
1728 : : },
1729 : : .aad_size = {
1730 : : .min = 5,
1731 : : .max = 5,
1732 : : .increment = 0
1733 : : },
1734 : : .iv_size = {
1735 : : .min = 0,
1736 : : .max = 0,
1737 : : .increment = 0
1738 : : }
1739 : : }, }
1740 : : }, }
1741 : : },
1742 : :
1743 : : };
1744 : :
1745 : :
1746 : : static const struct rte_security_capability sec_caps_templ[] = {
1747 : : { /* IPsec Lookaside Protocol ESP Tunnel Ingress */
1748 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1749 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1750 : : .ipsec = {
1751 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1752 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1753 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1754 : : .options = { 0 },
1755 : : },
1756 : : .crypto_capabilities = NULL,
1757 : : },
1758 : : { /* IPsec Lookaside Protocol ESP Tunnel Egress */
1759 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1760 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1761 : : .ipsec = {
1762 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1763 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1764 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1765 : : .options = { 0 },
1766 : : },
1767 : : .crypto_capabilities = NULL,
1768 : : },
1769 : : { /* IPsec Lookaside Protocol ESP Transport Ingress */
1770 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1771 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1772 : : .ipsec = {
1773 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1774 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1775 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1776 : : .options = { 0 },
1777 : : },
1778 : : .crypto_capabilities = NULL,
1779 : : },
1780 : : { /* IPsec Lookaside Protocol ESP Transport Egress */
1781 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1782 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1783 : : .ipsec = {
1784 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
1785 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1786 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1787 : : .options = { 0 },
1788 : : },
1789 : : .crypto_capabilities = NULL,
1790 : : },
1791 : : { /* IPsec Lookaside Protocol AH Tunnel Ingress */
1792 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1793 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1794 : : .ipsec = {
1795 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1796 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1797 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1798 : : .options = { 0 },
1799 : : },
1800 : : .crypto_capabilities = NULL,
1801 : : },
1802 : : { /* IPsec Lookaside Protocol AH Tunnel Egress */
1803 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1804 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1805 : : .ipsec = {
1806 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1807 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL,
1808 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1809 : : .options = { 0 },
1810 : : },
1811 : : .crypto_capabilities = NULL,
1812 : : },
1813 : : { /* IPsec Lookaside Protocol AH Transport Ingress */
1814 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1815 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1816 : : .ipsec = {
1817 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1818 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1819 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS,
1820 : : .options = { 0 },
1821 : : },
1822 : : .crypto_capabilities = NULL,
1823 : : },
1824 : : { /* IPsec Lookaside Protocol AH Transport Egress */
1825 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1826 : : .protocol = RTE_SECURITY_PROTOCOL_IPSEC,
1827 : : .ipsec = {
1828 : : .proto = RTE_SECURITY_IPSEC_SA_PROTO_AH,
1829 : : .mode = RTE_SECURITY_IPSEC_SA_MODE_TRANSPORT,
1830 : : .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS,
1831 : : .options = { 0 },
1832 : : },
1833 : : .crypto_capabilities = NULL,
1834 : : },
1835 : : { /* TLS 1.2 Record Read */
1836 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1837 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1838 : : .tls_record = {
1839 : : .ver = RTE_SECURITY_VERSION_TLS_1_2,
1840 : : .type = RTE_SECURITY_TLS_SESS_TYPE_READ,
1841 : : .ar_win_size = 0,
1842 : : },
1843 : : .crypto_capabilities = NULL,
1844 : : },
1845 : : { /* TLS 1.2 Record Write */
1846 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1847 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1848 : : .tls_record = {
1849 : : .ver = RTE_SECURITY_VERSION_TLS_1_2,
1850 : : .type = RTE_SECURITY_TLS_SESS_TYPE_WRITE,
1851 : : .ar_win_size = 0,
1852 : : },
1853 : : .crypto_capabilities = NULL,
1854 : : },
1855 : : { /* DTLS 1.2 Record Read */
1856 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1857 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1858 : : .tls_record = {
1859 : : .ver = RTE_SECURITY_VERSION_DTLS_1_2,
1860 : : .type = RTE_SECURITY_TLS_SESS_TYPE_READ,
1861 : : .ar_win_size = 0,
1862 : : },
1863 : : .crypto_capabilities = NULL,
1864 : : },
1865 : : { /* DTLS 1.2 Record Write */
1866 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1867 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1868 : : .tls_record = {
1869 : : .ver = RTE_SECURITY_VERSION_DTLS_1_2,
1870 : : .type = RTE_SECURITY_TLS_SESS_TYPE_WRITE,
1871 : : .ar_win_size = 0,
1872 : : },
1873 : : .crypto_capabilities = NULL,
1874 : : },
1875 : : { /* TLS 1.3 Record Read */
1876 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1877 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1878 : : .tls_record = {
1879 : : .ver = RTE_SECURITY_VERSION_TLS_1_3,
1880 : : .type = RTE_SECURITY_TLS_SESS_TYPE_READ,
1881 : : .ar_win_size = 0,
1882 : : },
1883 : : .crypto_capabilities = NULL,
1884 : : },
1885 : : { /* TLS 1.3 Record Write */
1886 : : .action = RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL,
1887 : : .protocol = RTE_SECURITY_PROTOCOL_TLS_RECORD,
1888 : : .tls_record = {
1889 : : .ver = RTE_SECURITY_VERSION_TLS_1_3,
1890 : : .type = RTE_SECURITY_TLS_SESS_TYPE_WRITE,
1891 : : .ar_win_size = 0,
1892 : : },
1893 : : .crypto_capabilities = NULL,
1894 : : },
1895 : : {
1896 : : .action = RTE_SECURITY_ACTION_TYPE_NONE
1897 : : }
1898 : : };
1899 : :
1900 : : static void
1901 : 0 : cpt_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
1902 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
1903 : : {
1904 [ # # ]: 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_CPT_MAX_CAPS);
1905 : :
1906 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
1907 : 0 : *cur_pos += nb_caps;
1908 : 0 : }
1909 : :
1910 : : static void
1911 : 0 : cn10k_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[])
1912 : : {
1913 : :
1914 : : struct rte_cryptodev_capabilities *caps;
1915 : : int i = 0;
1916 : :
1917 [ # # ]: 0 : while ((caps = &cnxk_caps[i++])->op != RTE_CRYPTO_OP_TYPE_UNDEFINED) {
1918 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
1919 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_CIPHER) &&
1920 : : (caps->sym.cipher.algo == RTE_CRYPTO_CIPHER_ZUC_EEA3)) {
1921 : :
1922 : 0 : caps->sym.cipher.key_size.max = 32;
1923 : 0 : caps->sym.cipher.key_size.increment = 16;
1924 : 0 : caps->sym.cipher.iv_size.max = 25;
1925 : 0 : caps->sym.cipher.iv_size.increment = 1;
1926 : : }
1927 : :
1928 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
1929 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH) &&
1930 : : (caps->sym.auth.algo == RTE_CRYPTO_AUTH_ZUC_EIA3)) {
1931 : :
1932 : 0 : caps->sym.auth.key_size.max = 32;
1933 : 0 : caps->sym.auth.key_size.increment = 16;
1934 : 0 : caps->sym.auth.digest_size.max = 16;
1935 : 0 : caps->sym.auth.digest_size.increment = 4;
1936 : 0 : caps->sym.auth.iv_size.max = 25;
1937 : 0 : caps->sym.auth.iv_size.increment = 1;
1938 : : }
1939 : : }
1940 : 0 : }
1941 : :
1942 : : static void
1943 : : cn9k_crypto_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos)
1944 : : {
1945 : 0 : cpt_caps_add(cnxk_caps, cur_pos, caps_docsis, RTE_DIM(caps_docsis));
1946 : 0 : }
1947 : :
1948 : : static void
1949 : 0 : cn10k_crypto_caps_add(struct rte_cryptodev_capabilities cnxk_caps[],
1950 : : union cpt_eng_caps *hw_caps, int *cur_pos)
1951 : : {
1952 [ # # ]: 0 : if (hw_caps[CPT_ENG_TYPE_SE].sg_ver2) {
1953 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm3);
# # ]
1954 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm4);
# # ]
1955 : : }
1956 : :
1957 [ # # ]: 0 : if (hw_caps[CPT_ENG_TYPE_AE].sm2)
1958 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, sm2);
# # ]
1959 : :
1960 [ # # ]: 0 : if (hw_caps[CPT_ENG_TYPE_AE].eddsa)
1961 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, cur_pos, hw_caps, eddsa);
# # ]
1962 : 0 : }
1963 : :
1964 : : static void
1965 : 0 : crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
1966 : : union cpt_eng_caps *hw_caps)
1967 : : {
1968 : 0 : int cur_pos = 0;
1969 : :
1970 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, mul);
# # ]
1971 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
1972 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha3);
# # ]
1973 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, chacha20);
# # ]
1974 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, zuc_snow3g);
# # ]
1975 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
1976 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, kasumi);
# # ]
1977 [ # # # # : 0 : CPT_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
1978 : :
1979 [ # # ]: 0 : if (!roc_model_is_cn10k())
1980 : : cn9k_crypto_caps_add(cnxk_caps, &cur_pos);
1981 : :
1982 [ # # ]: 0 : if (roc_model_is_cn10k())
1983 : 0 : cn10k_crypto_caps_add(cnxk_caps, hw_caps, &cur_pos);
1984 : :
1985 : 0 : cpt_caps_add(cnxk_caps, &cur_pos, caps_null, RTE_DIM(caps_null));
1986 : 0 : cpt_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
1987 : :
1988 [ # # ]: 0 : if (roc_model_is_cn10k())
1989 : 0 : cn10k_crypto_caps_update(cnxk_caps);
1990 : 0 : }
1991 : :
1992 : : const struct rte_cryptodev_capabilities *
1993 : 0 : cnxk_crypto_capabilities_get(struct cnxk_cpt_vf *vf)
1994 : : {
1995 : 0 : return vf->crypto_caps;
1996 : : }
1997 : :
1998 : : static void
1999 : : sec_ipsec_caps_limit_check(int *cur_pos, int nb_caps)
2000 : : {
2001 : 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_SEC_IPSEC_CRYPTO_MAX_CAPS);
2002 : : }
2003 : :
2004 : : static void
2005 [ # # ]: 0 : sec_ipsec_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
2006 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
2007 : : {
2008 : : sec_ipsec_caps_limit_check(cur_pos, nb_caps);
2009 : :
2010 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
2011 : 0 : *cur_pos += nb_caps;
2012 : 0 : }
2013 : :
2014 : : static void
2015 [ # # ]: 0 : cn10k_sec_ipsec_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos)
2016 : : {
2017 : : const struct rte_cryptodev_capabilities *cap;
2018 : : unsigned int i;
2019 : :
2020 : : sec_ipsec_caps_limit_check(cur_pos, 1);
2021 : :
2022 : : /* NULL auth */
2023 [ # # ]: 0 : for (i = 0; i < RTE_DIM(caps_null); i++) {
2024 : : cap = &caps_null[i];
2025 [ # # ]: 0 : if (cap->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH &&
2026 : : cap->sym.auth.algo == RTE_CRYPTO_AUTH_NULL) {
2027 : 0 : cnxk_caps[*cur_pos] = caps_null[i];
2028 : 0 : *cur_pos += 1;
2029 : : }
2030 : : }
2031 : 0 : }
2032 : :
2033 : : static void
2034 : : cn9k_sec_ipsec_crypto_caps_update(struct rte_cryptodev_capabilities cnxk_caps[])
2035 : : {
2036 : :
2037 : : struct rte_cryptodev_capabilities *caps;
2038 : : int i = 0;
2039 : :
2040 [ # # ]: 0 : while ((caps = &cnxk_caps[i++])->op != RTE_CRYPTO_OP_TYPE_UNDEFINED) {
2041 [ # # ]: 0 : if ((caps->op == RTE_CRYPTO_OP_TYPE_SYMMETRIC) &&
2042 [ # # ]: 0 : (caps->sym.xform_type == RTE_CRYPTO_SYM_XFORM_AUTH) &&
2043 : : (caps->sym.auth.algo == RTE_CRYPTO_AUTH_SHA256_HMAC)) {
2044 : 0 : caps->sym.auth.key_size.min = 32;
2045 : 0 : caps->sym.auth.key_size.max = 64;
2046 : 0 : caps->sym.auth.key_size.increment = 1;
2047 : :
2048 : 0 : break;
2049 : : }
2050 : : }
2051 : : }
2052 : :
2053 : : static void
2054 : 0 : sec_ipsec_crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
2055 : : union cpt_eng_caps *hw_caps)
2056 : : {
2057 : 0 : int cur_pos = 0;
2058 : :
2059 [ # # # # : 0 : SEC_IPSEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
2060 [ # # # # : 0 : SEC_IPSEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
2061 [ # # # # : 0 : SEC_IPSEC_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
2062 : :
2063 [ # # ]: 0 : if (roc_model_is_cn10k())
2064 : 0 : cn10k_sec_ipsec_crypto_caps_update(cnxk_caps, &cur_pos);
2065 : : else
2066 : : cn9k_sec_ipsec_crypto_caps_update(cnxk_caps);
2067 : :
2068 : 0 : sec_ipsec_caps_add(cnxk_caps, &cur_pos, sec_ipsec_caps_null, RTE_DIM(sec_ipsec_caps_null));
2069 : 0 : sec_ipsec_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
2070 : 0 : }
2071 : :
2072 : : static void
2073 : : cnxk_sec_ipsec_caps_update(struct rte_security_capability *sec_cap)
2074 : : {
2075 : 0 : sec_cap->ipsec.options.udp_encap = 1;
2076 : 0 : sec_cap->ipsec.options.copy_df = 1;
2077 : 0 : sec_cap->ipsec.options.copy_dscp = 1;
2078 : : }
2079 : :
2080 : : static void
2081 : : cn10k_sec_ipsec_caps_update(struct rte_security_capability *sec_cap)
2082 : : {
2083 [ # # ]: 0 : if (sec_cap->ipsec.direction == RTE_SECURITY_IPSEC_SA_DIR_EGRESS) {
2084 : : #ifdef LA_IPSEC_DEBUG
2085 : : sec_cap->ipsec.options.iv_gen_disable = 1;
2086 : : #endif
2087 : : } else {
2088 : 0 : sec_cap->ipsec.options.udp_ports_verify = 1;
2089 [ # # ]: 0 : if (sec_cap->ipsec.mode == RTE_SECURITY_IPSEC_SA_MODE_TUNNEL)
2090 : 0 : sec_cap->ipsec.options.tunnel_hdr_verify =
2091 : : RTE_SECURITY_IPSEC_TUNNEL_VERIFY_SRC_DST_ADDR;
2092 : : }
2093 : 0 : sec_cap->ipsec.options.dec_ttl = 1;
2094 : 0 : sec_cap->ipsec.options.ip_csum_enable = 1;
2095 : 0 : sec_cap->ipsec.options.l4_csum_enable = 1;
2096 : 0 : sec_cap->ipsec.options.stats = 1;
2097 : 0 : sec_cap->ipsec.options.esn = 1;
2098 : 0 : sec_cap->ipsec.options.copy_flabel = 1;
2099 : 0 : sec_cap->ipsec.replay_win_sz_max = ROC_AR_WIN_SIZE_MAX;
2100 : 0 : }
2101 : :
2102 : : static void
2103 : : cn9k_sec_ipsec_caps_update(struct rte_security_capability *sec_cap)
2104 : : {
2105 : : if (sec_cap->ipsec.direction == RTE_SECURITY_IPSEC_SA_DIR_EGRESS) {
2106 : : #ifdef LA_IPSEC_DEBUG
2107 : : sec_cap->ipsec.options.iv_gen_disable = 1;
2108 : : #endif
2109 : : }
2110 : 0 : sec_cap->ipsec.replay_win_sz_max = CNXK_ON_AR_WIN_SIZE_MAX;
2111 : 0 : sec_cap->ipsec.options.esn = 1;
2112 : 0 : }
2113 : :
2114 : : static void
2115 : : sec_tls12_caps_limit_check(int *cur_pos, int nb_caps)
2116 : : {
2117 : 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_SEC_TLS_1_2_CRYPTO_MAX_CAPS);
2118 : : }
2119 : :
2120 : : static void
2121 [ # # ]: 0 : sec_tls12_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
2122 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
2123 : : {
2124 : : sec_tls12_caps_limit_check(cur_pos, nb_caps);
2125 : :
2126 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
2127 : 0 : *cur_pos += nb_caps;
2128 : 0 : }
2129 : :
2130 : : static void
2131 : 0 : sec_tls12_crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
2132 : : union cpt_eng_caps *hw_caps)
2133 : : {
2134 : 0 : int cur_pos = 0;
2135 : :
2136 [ # # # # : 0 : SEC_TLS12_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
2137 [ # # # # : 0 : SEC_TLS12_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, des);
# # ]
2138 [ # # # # : 0 : SEC_TLS12_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, sha1_sha2);
# # ]
2139 : :
2140 : 0 : sec_tls12_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
2141 : 0 : }
2142 : :
2143 : : static void
2144 : : sec_tls13_caps_limit_check(int *cur_pos, int nb_caps)
2145 : : {
2146 : 0 : PLT_VERIFY(*cur_pos + nb_caps <= CNXK_SEC_TLS_1_3_CRYPTO_MAX_CAPS);
2147 : : }
2148 : :
2149 : : static void
2150 [ # # ]: 0 : sec_tls13_caps_add(struct rte_cryptodev_capabilities cnxk_caps[], int *cur_pos,
2151 : : const struct rte_cryptodev_capabilities *caps, int nb_caps)
2152 : : {
2153 : : sec_tls13_caps_limit_check(cur_pos, nb_caps);
2154 : :
2155 : 0 : memcpy(&cnxk_caps[*cur_pos], caps, nb_caps * sizeof(caps[0]));
2156 : 0 : *cur_pos += nb_caps;
2157 : 0 : }
2158 : :
2159 : : static void
2160 : 0 : sec_tls13_crypto_caps_populate(struct rte_cryptodev_capabilities cnxk_caps[],
2161 : : union cpt_eng_caps *hw_caps)
2162 : : {
2163 : 0 : int cur_pos = 0;
2164 : :
2165 [ # # # # : 0 : SEC_TLS13_CAPS_ADD(cnxk_caps, &cur_pos, hw_caps, aes);
# # ]
2166 : :
2167 : 0 : sec_tls13_caps_add(cnxk_caps, &cur_pos, caps_end, RTE_DIM(caps_end));
2168 : 0 : }
2169 : :
2170 : : void
2171 : 0 : cnxk_cpt_caps_populate(struct cnxk_cpt_vf *vf)
2172 : : {
2173 : : unsigned long i;
2174 : :
2175 : 0 : crypto_caps_populate(vf->crypto_caps, vf->cpt.hw_caps);
2176 : 0 : sec_ipsec_crypto_caps_populate(vf->sec_ipsec_crypto_caps, vf->cpt.hw_caps);
2177 : :
2178 [ # # ]: 0 : if (vf->cpt.hw_caps[CPT_ENG_TYPE_SE].tls) {
2179 : 0 : sec_tls12_crypto_caps_populate(vf->sec_tls_1_2_crypto_caps, vf->cpt.hw_caps);
2180 : 0 : sec_tls12_crypto_caps_populate(vf->sec_dtls_1_2_crypto_caps, vf->cpt.hw_caps);
2181 : 0 : sec_tls13_crypto_caps_populate(vf->sec_tls_1_3_crypto_caps, vf->cpt.hw_caps);
2182 : : }
2183 : :
2184 : : PLT_STATIC_ASSERT(RTE_DIM(sec_caps_templ) <= RTE_DIM(vf->sec_caps));
2185 : 0 : memcpy(vf->sec_caps, sec_caps_templ, sizeof(sec_caps_templ));
2186 : :
2187 [ # # ]: 0 : for (i = 0; i < RTE_DIM(sec_caps_templ) - 1; i++) {
2188 : :
2189 [ # # ]: 0 : if (vf->sec_caps[i].protocol == RTE_SECURITY_PROTOCOL_IPSEC) {
2190 [ # # ]: 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_ipsec_crypto_caps;
2191 : :
2192 : : cnxk_sec_ipsec_caps_update(&vf->sec_caps[i]);
2193 : :
2194 [ # # ]: 0 : if (roc_model_is_cn10k())
2195 : : cn10k_sec_ipsec_caps_update(&vf->sec_caps[i]);
2196 : :
2197 [ # # ]: 0 : if (roc_model_is_cn9k())
2198 : : cn9k_sec_ipsec_caps_update(&vf->sec_caps[i]);
2199 [ # # ]: 0 : } else if (vf->sec_caps[i].protocol == RTE_SECURITY_PROTOCOL_TLS_RECORD) {
2200 [ # # ]: 0 : if (vf->sec_caps[i].tls_record.ver == RTE_SECURITY_VERSION_TLS_1_3)
2201 : 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_tls_1_3_crypto_caps;
2202 [ # # ]: 0 : else if (vf->sec_caps[i].tls_record.ver == RTE_SECURITY_VERSION_DTLS_1_2)
2203 : 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_dtls_1_2_crypto_caps;
2204 : : else
2205 : 0 : vf->sec_caps[i].crypto_capabilities = vf->sec_tls_1_2_crypto_caps;
2206 : : }
2207 : : }
2208 : 0 : }
2209 : :
2210 : : const struct rte_security_capability *
2211 : 0 : cnxk_crypto_sec_capabilities_get(void *device)
2212 : : {
2213 : : struct rte_cryptodev *dev = device;
2214 : : struct cnxk_cpt_vf *vf;
2215 : :
2216 : 0 : vf = dev->data->dev_private;
2217 : 0 : return vf->sec_caps;
2218 : : }
|