xref: /dpdk/drivers/crypto/octeontx/otx_cryptodev_capabilities.c (revision 8d8afdec6b4fbd489a05154413e41b21072bda71)
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 *
otx_get_capabilities(uint64_t flags)659 otx_get_capabilities(uint64_t flags)
660 {
661 	if (flags & RTE_CRYPTODEV_FF_ASYMMETRIC_CRYPTO)
662 		return otx_asym_capabilities;
663 	else
664 		return otx_sym_capabilities;
665 
666 }
667