Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(c) 2018 Cavium, Inc
3 : : */
4 : :
5 : : #include <rte_cryptodev.h>
6 : :
7 : : #include "otx_cryptodev_capabilities.h"
8 : :
9 : : static const struct rte_cryptodev_capabilities otx_sym_capabilities[] = {
10 : : /* Symmetric capabilities */
11 : : { /* NULL (AUTH) */
12 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
13 : : {.sym = {
14 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
15 : : {.auth = {
16 : : .algo = RTE_CRYPTO_AUTH_NULL,
17 : : .block_size = 1,
18 : : .key_size = {
19 : : .min = 0,
20 : : .max = 0,
21 : : .increment = 0
22 : : },
23 : : .digest_size = {
24 : : .min = 0,
25 : : .max = 0,
26 : : .increment = 0
27 : : },
28 : : }, },
29 : : }, },
30 : : },
31 : : { /* AES GMAC (AUTH) */
32 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
33 : : {.sym = {
34 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
35 : : {.auth = {
36 : : .algo = RTE_CRYPTO_AUTH_AES_GMAC,
37 : : .block_size = 16,
38 : : .key_size = {
39 : : .min = 16,
40 : : .max = 32,
41 : : .increment = 8
42 : : },
43 : : .digest_size = {
44 : : .min = 8,
45 : : .max = 16,
46 : : .increment = 4
47 : : },
48 : : .iv_size = {
49 : : .min = 12,
50 : : .max = 12,
51 : : .increment = 0
52 : : }
53 : : }, }
54 : : }, }
55 : : },
56 : : { /* KASUMI (F9) */
57 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
58 : : {.sym = {
59 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
60 : : {.auth = {
61 : : .algo = RTE_CRYPTO_AUTH_KASUMI_F9,
62 : : .block_size = 8,
63 : : .key_size = {
64 : : .min = 16,
65 : : .max = 16,
66 : : .increment = 0
67 : : },
68 : : .digest_size = {
69 : : .min = 4,
70 : : .max = 4,
71 : : .increment = 0
72 : : },
73 : : }, }
74 : : }, }
75 : : },
76 : : { /* MD5 */
77 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
78 : : {.sym = {
79 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
80 : : {.auth = {
81 : : .algo = RTE_CRYPTO_AUTH_MD5,
82 : : .block_size = 64,
83 : : .key_size = {
84 : : .min = 0,
85 : : .max = 0,
86 : : .increment = 0
87 : : },
88 : : .digest_size = {
89 : : .min = 1,
90 : : .max = 16,
91 : : .increment = 1
92 : : },
93 : : }, }
94 : : }, }
95 : : },
96 : : { /* MD5 HMAC */
97 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
98 : : {.sym = {
99 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
100 : : {.auth = {
101 : : .algo = RTE_CRYPTO_AUTH_MD5_HMAC,
102 : : .block_size = 64,
103 : : .key_size = {
104 : : .min = 8,
105 : : .max = 64,
106 : : .increment = 8
107 : : },
108 : : .digest_size = {
109 : : .min = 1,
110 : : .max = 16,
111 : : .increment = 1
112 : : },
113 : : }, }
114 : : }, }
115 : : },
116 : : { /* SHA1 */
117 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
118 : : {.sym = {
119 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
120 : : {.auth = {
121 : : .algo = RTE_CRYPTO_AUTH_SHA1,
122 : : .block_size = 64,
123 : : .key_size = {
124 : : .min = 0,
125 : : .max = 0,
126 : : .increment = 0
127 : : },
128 : : .digest_size = {
129 : : .min = 1,
130 : : .max = 20,
131 : : .increment = 1
132 : : },
133 : : }, }
134 : : }, }
135 : : },
136 : : { /* SHA1 HMAC */
137 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
138 : : {.sym = {
139 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
140 : : {.auth = {
141 : : .algo = RTE_CRYPTO_AUTH_SHA1_HMAC,
142 : : .block_size = 64,
143 : : .key_size = {
144 : : .min = 1,
145 : : .max = 1024,
146 : : .increment = 1
147 : : },
148 : : .digest_size = {
149 : : .min = 1,
150 : : .max = 20,
151 : : .increment = 1
152 : : },
153 : : }, }
154 : : }, }
155 : : },
156 : : { /* SHA224 */
157 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
158 : : {.sym = {
159 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
160 : : {.auth = {
161 : : .algo = RTE_CRYPTO_AUTH_SHA224,
162 : : .block_size = 64,
163 : : .key_size = {
164 : : .min = 0,
165 : : .max = 0,
166 : : .increment = 0
167 : : },
168 : : .digest_size = {
169 : : .min = 1,
170 : : .max = 28,
171 : : .increment = 1
172 : : },
173 : : }, }
174 : : }, }
175 : : },
176 : : { /* SHA224 HMAC */
177 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
178 : : {.sym = {
179 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
180 : : {.auth = {
181 : : .algo = RTE_CRYPTO_AUTH_SHA224_HMAC,
182 : : .block_size = 64,
183 : : .key_size = {
184 : : .min = 1,
185 : : .max = 1024,
186 : : .increment = 1
187 : : },
188 : : .digest_size = {
189 : : .min = 1,
190 : : .max = 28,
191 : : .increment = 1
192 : : },
193 : : }, }
194 : : }, }
195 : : },
196 : : { /* SHA256 */
197 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
198 : : {.sym = {
199 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
200 : : {.auth = {
201 : : .algo = RTE_CRYPTO_AUTH_SHA256,
202 : : .block_size = 64,
203 : : .key_size = {
204 : : .min = 0,
205 : : .max = 0,
206 : : .increment = 0
207 : : },
208 : : .digest_size = {
209 : : .min = 1,
210 : : .max = 32,
211 : : .increment = 1
212 : : },
213 : : }, }
214 : : }, }
215 : : },
216 : : { /* SHA256 HMAC */
217 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
218 : : {.sym = {
219 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
220 : : {.auth = {
221 : : .algo = RTE_CRYPTO_AUTH_SHA256_HMAC,
222 : : .block_size = 64,
223 : : .key_size = {
224 : : .min = 1,
225 : : .max = 1024,
226 : : .increment = 1
227 : : },
228 : : .digest_size = {
229 : : .min = 1,
230 : : .max = 32,
231 : : .increment = 1
232 : : },
233 : : }, }
234 : : }, }
235 : : },
236 : : { /* SHA384 */
237 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
238 : : {.sym = {
239 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
240 : : {.auth = {
241 : : .algo = RTE_CRYPTO_AUTH_SHA384,
242 : : .block_size = 64,
243 : : .key_size = {
244 : : .min = 0,
245 : : .max = 0,
246 : : .increment = 0
247 : : },
248 : : .digest_size = {
249 : : .min = 1,
250 : : .max = 48,
251 : : .increment = 1
252 : : },
253 : : }, }
254 : : }, }
255 : : },
256 : : { /* SHA384 HMAC */
257 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
258 : : {.sym = {
259 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
260 : : {.auth = {
261 : : .algo = RTE_CRYPTO_AUTH_SHA384_HMAC,
262 : : .block_size = 64,
263 : : .key_size = {
264 : : .min = 1,
265 : : .max = 1024,
266 : : .increment = 1
267 : : },
268 : : .digest_size = {
269 : : .min = 1,
270 : : .max = 48,
271 : : .increment = 1
272 : : },
273 : : }, }
274 : : }, }
275 : : },
276 : : { /* SHA512 */
277 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
278 : : {.sym = {
279 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
280 : : {.auth = {
281 : : .algo = RTE_CRYPTO_AUTH_SHA512,
282 : : .block_size = 128,
283 : : .key_size = {
284 : : .min = 0,
285 : : .max = 0,
286 : : .increment = 0
287 : : },
288 : : .digest_size = {
289 : : .min = 1,
290 : : .max = 64,
291 : : .increment = 1
292 : : },
293 : : }, }
294 : : }, }
295 : : },
296 : : { /* SHA512 HMAC */
297 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
298 : : {.sym = {
299 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
300 : : {.auth = {
301 : : .algo = RTE_CRYPTO_AUTH_SHA512_HMAC,
302 : : .block_size = 128,
303 : : .key_size = {
304 : : .min = 1,
305 : : .max = 1024,
306 : : .increment = 1
307 : : },
308 : : .digest_size = {
309 : : .min = 1,
310 : : .max = 64,
311 : : .increment = 1
312 : : },
313 : : }, }
314 : : }, }
315 : : },
316 : : { /* SNOW 3G (UIA2) */
317 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
318 : : {.sym = {
319 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
320 : : {.auth = {
321 : : .algo = RTE_CRYPTO_AUTH_SNOW3G_UIA2,
322 : : .block_size = 16,
323 : : .key_size = {
324 : : .min = 16,
325 : : .max = 16,
326 : : .increment = 0
327 : : },
328 : : .digest_size = {
329 : : .min = 4,
330 : : .max = 4,
331 : : .increment = 0
332 : : },
333 : : .iv_size = {
334 : : .min = 16,
335 : : .max = 16,
336 : : .increment = 0
337 : : }
338 : : }, }
339 : : }, }
340 : : },
341 : : { /* ZUC (EIA3) */
342 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
343 : : {.sym = {
344 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH,
345 : : {.auth = {
346 : : .algo = RTE_CRYPTO_AUTH_ZUC_EIA3,
347 : : .block_size = 16,
348 : : .key_size = {
349 : : .min = 16,
350 : : .max = 16,
351 : : .increment = 0
352 : : },
353 : : .digest_size = {
354 : : .min = 4,
355 : : .max = 4,
356 : : .increment = 0
357 : : },
358 : : .iv_size = {
359 : : .min = 16,
360 : : .max = 16,
361 : : .increment = 0
362 : : }
363 : : }, }
364 : : }, }
365 : : },
366 : : { /* NULL (CIPHER) */
367 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
368 : : {.sym = {
369 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
370 : : {.cipher = {
371 : : .algo = RTE_CRYPTO_CIPHER_NULL,
372 : : .block_size = 1,
373 : : .key_size = {
374 : : .min = 0,
375 : : .max = 0,
376 : : .increment = 0
377 : : },
378 : : .iv_size = {
379 : : .min = 0,
380 : : .max = 0,
381 : : .increment = 0
382 : : }
383 : : }, },
384 : : }, }
385 : : },
386 : : { /* 3DES CBC */
387 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
388 : : {.sym = {
389 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
390 : : {.cipher = {
391 : : .algo = RTE_CRYPTO_CIPHER_3DES_CBC,
392 : : .block_size = 8,
393 : : .key_size = {
394 : : .min = 24,
395 : : .max = 24,
396 : : .increment = 0
397 : : },
398 : : .iv_size = {
399 : : .min = 8,
400 : : .max = 16,
401 : : .increment = 8
402 : : }
403 : : }, }
404 : : }, }
405 : : },
406 : : { /* 3DES ECB */
407 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
408 : : {.sym = {
409 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
410 : : {.cipher = {
411 : : .algo = RTE_CRYPTO_CIPHER_3DES_ECB,
412 : : .block_size = 8,
413 : : .key_size = {
414 : : .min = 24,
415 : : .max = 24,
416 : : .increment = 0
417 : : },
418 : : .iv_size = {
419 : : .min = 0,
420 : : .max = 0,
421 : : .increment = 0
422 : : }
423 : : }, }
424 : : }, }
425 : : },
426 : : { /* AES CBC */
427 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
428 : : {.sym = {
429 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
430 : : {.cipher = {
431 : : .algo = RTE_CRYPTO_CIPHER_AES_CBC,
432 : : .block_size = 16,
433 : : .key_size = {
434 : : .min = 16,
435 : : .max = 32,
436 : : .increment = 8
437 : : },
438 : : .iv_size = {
439 : : .min = 16,
440 : : .max = 16,
441 : : .increment = 0
442 : : }
443 : : }, }
444 : : }, }
445 : : },
446 : : { /* AES CTR */
447 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
448 : : {.sym = {
449 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
450 : : {.cipher = {
451 : : .algo = RTE_CRYPTO_CIPHER_AES_CTR,
452 : : .block_size = 16,
453 : : .key_size = {
454 : : .min = 16,
455 : : .max = 32,
456 : : .increment = 8
457 : : },
458 : : .iv_size = {
459 : : .min = 12,
460 : : .max = 16,
461 : : .increment = 4
462 : : }
463 : : }, }
464 : : }, }
465 : : },
466 : : { /* AES XTS */
467 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
468 : : {.sym = {
469 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
470 : : {.cipher = {
471 : : .algo = RTE_CRYPTO_CIPHER_AES_XTS,
472 : : .block_size = 16,
473 : : .key_size = {
474 : : .min = 32,
475 : : .max = 64,
476 : : .increment = 0
477 : : },
478 : : .iv_size = {
479 : : .min = 16,
480 : : .max = 16,
481 : : .increment = 0
482 : : }
483 : : }, }
484 : : }, }
485 : : },
486 : : { /* DES CBC */
487 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
488 : : {.sym = {
489 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
490 : : {.cipher = {
491 : : .algo = RTE_CRYPTO_CIPHER_DES_CBC,
492 : : .block_size = 8,
493 : : .key_size = {
494 : : .min = 8,
495 : : .max = 8,
496 : : .increment = 0
497 : : },
498 : : .iv_size = {
499 : : .min = 8,
500 : : .max = 8,
501 : : .increment = 0
502 : : }
503 : : }, }
504 : : }, }
505 : : },
506 : : { /* KASUMI (F8) */
507 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
508 : : {.sym = {
509 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
510 : : {.cipher = {
511 : : .algo = RTE_CRYPTO_CIPHER_KASUMI_F8,
512 : : .block_size = 8,
513 : : .key_size = {
514 : : .min = 16,
515 : : .max = 16,
516 : : .increment = 0
517 : : },
518 : : .iv_size = {
519 : : .min = 8,
520 : : .max = 8,
521 : : .increment = 0
522 : : }
523 : : }, }
524 : : }, }
525 : : },
526 : : { /* SNOW 3G (UEA2) */
527 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
528 : : {.sym = {
529 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
530 : : {.cipher = {
531 : : .algo = RTE_CRYPTO_CIPHER_SNOW3G_UEA2,
532 : : .block_size = 16,
533 : : .key_size = {
534 : : .min = 16,
535 : : .max = 16,
536 : : .increment = 0
537 : : },
538 : : .iv_size = {
539 : : .min = 16,
540 : : .max = 16,
541 : : .increment = 0
542 : : }
543 : : }, }
544 : : }, }
545 : : },
546 : : { /* ZUC (EEA3) */
547 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
548 : : {.sym = {
549 : : .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER,
550 : : {.cipher = {
551 : : .algo = RTE_CRYPTO_CIPHER_ZUC_EEA3,
552 : : .block_size = 16,
553 : : .key_size = {
554 : : .min = 16,
555 : : .max = 16,
556 : : .increment = 0
557 : : },
558 : : .iv_size = {
559 : : .min = 16,
560 : : .max = 16,
561 : : .increment = 0
562 : : }
563 : : }, }
564 : : }, }
565 : : },
566 : : { /* AES GCM */
567 : : .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC,
568 : : {.sym = {
569 : : .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD,
570 : : {.aead = {
571 : : .algo = RTE_CRYPTO_AEAD_AES_GCM,
572 : : .block_size = 16,
573 : : .key_size = {
574 : : .min = 16,
575 : : .max = 32,
576 : : .increment = 8
577 : : },
578 : : .digest_size = {
579 : : .min = 8,
580 : : .max = 16,
581 : : .increment = 4
582 : : },
583 : : .aad_size = {
584 : : .min = 0,
585 : : .max = 1024,
586 : : .increment = 1
587 : : },
588 : : .iv_size = {
589 : : .min = 12,
590 : : .max = 12,
591 : : .increment = 0
592 : : }
593 : : }, }
594 : : }, }
595 : : },
596 : : /* End of symmetric capabilities */
597 : : RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
598 : : };
599 : :
600 : : static const struct rte_cryptodev_capabilities otx_asym_capabilities[] = {
601 : : /* Asymmetric capabilities */
602 : : { /* RSA */
603 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
604 : : {.asym = {
605 : : .xform_capa = {
606 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_RSA,
607 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
608 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY) |
609 : : (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) |
610 : : (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)),
611 : : {.modlen = {
612 : : .min = 17,
613 : : .max = 1024,
614 : : .increment = 1
615 : : }, }
616 : : }
617 : : }, }
618 : : },
619 : : { /* MOD_EXP */
620 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
621 : : {.asym = {
622 : : .xform_capa = {
623 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX,
624 : : .op_types = 0,
625 : : {.modlen = {
626 : : .min = 17,
627 : : .max = 1024,
628 : : .increment = 1
629 : : }, }
630 : : }
631 : : }, }
632 : : },
633 : : { /* ECDSA */
634 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
635 : : {.asym = {
636 : : .xform_capa = {
637 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_ECDSA,
638 : : .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) |
639 : : (1 << RTE_CRYPTO_ASYM_OP_VERIFY)),
640 : : }
641 : : },
642 : : }
643 : : },
644 : : { /* ECPM */
645 : : .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC,
646 : : {.asym = {
647 : : .xform_capa = {
648 : : .xform_type = RTE_CRYPTO_ASYM_XFORM_ECPM,
649 : : .op_types = 0
650 : : }
651 : : },
652 : : }
653 : : },
654 : : /* End of asymmetric capabilities */
655 : : RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST()
656 : : };
657 : :
658 : : const struct rte_cryptodev_capabilities *
659 : 0 : otx_get_capabilities(uint64_t flags)
660 : : {
661 [ # # ]: 0 : if (flags & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO)
662 : : return otx_asym_capabilities;
663 : : else
664 : 0 : return otx_sym_capabilities;
665 : :
666 : : }
|