15566a3e3SBruce Richardson /* SPDX-License-Identifier: BSD-3-Clause 25566a3e3SBruce Richardson * Copyright(c) 2016-2017 Intel Corporation 38a9867a6SSlawomir Mrozowicz */ 48a9867a6SSlawomir Mrozowicz 58a9867a6SSlawomir Mrozowicz #include <string.h> 68a9867a6SSlawomir Mrozowicz 78a9867a6SSlawomir Mrozowicz #include <rte_common.h> 88a9867a6SSlawomir Mrozowicz #include <rte_malloc.h> 98a9867a6SSlawomir Mrozowicz #include <rte_cryptodev_pmd.h> 108a9867a6SSlawomir Mrozowicz 118a9867a6SSlawomir Mrozowicz #include "rte_openssl_pmd_private.h" 12*3e9d6bd4SSunila Sahu #include "compat.h" 138a9867a6SSlawomir Mrozowicz 148a9867a6SSlawomir Mrozowicz 158a9867a6SSlawomir Mrozowicz static const struct rte_cryptodev_capabilities openssl_pmd_capabilities[] = { 168a9867a6SSlawomir Mrozowicz { /* MD5 HMAC */ 178a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 188a9867a6SSlawomir Mrozowicz {.sym = { 198a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 208a9867a6SSlawomir Mrozowicz {.auth = { 218a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_MD5_HMAC, 228a9867a6SSlawomir Mrozowicz .block_size = 64, 238a9867a6SSlawomir Mrozowicz .key_size = { 24e5e7bc71SPablo de Lara .min = 1, 258a9867a6SSlawomir Mrozowicz .max = 64, 26e5e7bc71SPablo de Lara .increment = 1 278a9867a6SSlawomir Mrozowicz }, 288a9867a6SSlawomir Mrozowicz .digest_size = { 298a9867a6SSlawomir Mrozowicz .min = 16, 308a9867a6SSlawomir Mrozowicz .max = 16, 318a9867a6SSlawomir Mrozowicz .increment = 0 328a9867a6SSlawomir Mrozowicz }, 33acf86169SPablo de Lara .iv_size = { 0 } 348a9867a6SSlawomir Mrozowicz }, } 358a9867a6SSlawomir Mrozowicz }, } 368a9867a6SSlawomir Mrozowicz }, 378a9867a6SSlawomir Mrozowicz { /* MD5 */ 388a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 398a9867a6SSlawomir Mrozowicz {.sym = { 408a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 418a9867a6SSlawomir Mrozowicz {.auth = { 428a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_MD5, 438a9867a6SSlawomir Mrozowicz .block_size = 64, 448a9867a6SSlawomir Mrozowicz .key_size = { 458a9867a6SSlawomir Mrozowicz .min = 0, 468a9867a6SSlawomir Mrozowicz .max = 0, 478a9867a6SSlawomir Mrozowicz .increment = 0 488a9867a6SSlawomir Mrozowicz }, 498a9867a6SSlawomir Mrozowicz .digest_size = { 508a9867a6SSlawomir Mrozowicz .min = 16, 518a9867a6SSlawomir Mrozowicz .max = 16, 528a9867a6SSlawomir Mrozowicz .increment = 0 538a9867a6SSlawomir Mrozowicz }, 54acf86169SPablo de Lara .iv_size = { 0 } 558a9867a6SSlawomir Mrozowicz }, } 568a9867a6SSlawomir Mrozowicz }, } 578a9867a6SSlawomir Mrozowicz }, 588a9867a6SSlawomir Mrozowicz { /* SHA1 HMAC */ 598a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 608a9867a6SSlawomir Mrozowicz {.sym = { 618a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 628a9867a6SSlawomir Mrozowicz {.auth = { 638a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA1_HMAC, 648a9867a6SSlawomir Mrozowicz .block_size = 64, 658a9867a6SSlawomir Mrozowicz .key_size = { 66e5e7bc71SPablo de Lara .min = 1, 678a9867a6SSlawomir Mrozowicz .max = 64, 68e5e7bc71SPablo de Lara .increment = 1 698a9867a6SSlawomir Mrozowicz }, 708a9867a6SSlawomir Mrozowicz .digest_size = { 718a9867a6SSlawomir Mrozowicz .min = 20, 728a9867a6SSlawomir Mrozowicz .max = 20, 738a9867a6SSlawomir Mrozowicz .increment = 0 748a9867a6SSlawomir Mrozowicz }, 75acf86169SPablo de Lara .iv_size = { 0 } 768a9867a6SSlawomir Mrozowicz }, } 778a9867a6SSlawomir Mrozowicz }, } 788a9867a6SSlawomir Mrozowicz }, 798a9867a6SSlawomir Mrozowicz { /* SHA1 */ 808a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 818a9867a6SSlawomir Mrozowicz {.sym = { 828a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 838a9867a6SSlawomir Mrozowicz {.auth = { 848a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA1, 858a9867a6SSlawomir Mrozowicz .block_size = 64, 868a9867a6SSlawomir Mrozowicz .key_size = { 878a9867a6SSlawomir Mrozowicz .min = 0, 888a9867a6SSlawomir Mrozowicz .max = 0, 898a9867a6SSlawomir Mrozowicz .increment = 0 908a9867a6SSlawomir Mrozowicz }, 918a9867a6SSlawomir Mrozowicz .digest_size = { 928a9867a6SSlawomir Mrozowicz .min = 20, 938a9867a6SSlawomir Mrozowicz .max = 20, 948a9867a6SSlawomir Mrozowicz .increment = 0 958a9867a6SSlawomir Mrozowicz }, 96acf86169SPablo de Lara .iv_size = { 0 } 978a9867a6SSlawomir Mrozowicz }, } 988a9867a6SSlawomir Mrozowicz }, } 998a9867a6SSlawomir Mrozowicz }, 1008a9867a6SSlawomir Mrozowicz { /* SHA224 HMAC */ 1018a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1028a9867a6SSlawomir Mrozowicz {.sym = { 1038a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1048a9867a6SSlawomir Mrozowicz {.auth = { 1058a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA224_HMAC, 1068a9867a6SSlawomir Mrozowicz .block_size = 64, 1078a9867a6SSlawomir Mrozowicz .key_size = { 108e5e7bc71SPablo de Lara .min = 1, 1098a9867a6SSlawomir Mrozowicz .max = 64, 110e5e7bc71SPablo de Lara .increment = 1 1118a9867a6SSlawomir Mrozowicz }, 1128a9867a6SSlawomir Mrozowicz .digest_size = { 1138a9867a6SSlawomir Mrozowicz .min = 28, 1148a9867a6SSlawomir Mrozowicz .max = 28, 1158a9867a6SSlawomir Mrozowicz .increment = 0 1168a9867a6SSlawomir Mrozowicz }, 117acf86169SPablo de Lara .iv_size = { 0 } 1188a9867a6SSlawomir Mrozowicz }, } 1198a9867a6SSlawomir Mrozowicz }, } 1208a9867a6SSlawomir Mrozowicz }, 1218a9867a6SSlawomir Mrozowicz { /* SHA224 */ 1228a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1238a9867a6SSlawomir Mrozowicz {.sym = { 1248a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1258a9867a6SSlawomir Mrozowicz {.auth = { 1268a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA224, 1278a9867a6SSlawomir Mrozowicz .block_size = 64, 1288a9867a6SSlawomir Mrozowicz .key_size = { 1298a9867a6SSlawomir Mrozowicz .min = 0, 1308a9867a6SSlawomir Mrozowicz .max = 0, 1318a9867a6SSlawomir Mrozowicz .increment = 0 1328a9867a6SSlawomir Mrozowicz }, 1338a9867a6SSlawomir Mrozowicz .digest_size = { 1348a9867a6SSlawomir Mrozowicz .min = 28, 1358a9867a6SSlawomir Mrozowicz .max = 28, 1368a9867a6SSlawomir Mrozowicz .increment = 0 1378a9867a6SSlawomir Mrozowicz }, 138acf86169SPablo de Lara .iv_size = { 0 } 1398a9867a6SSlawomir Mrozowicz }, } 1408a9867a6SSlawomir Mrozowicz }, } 1418a9867a6SSlawomir Mrozowicz }, 1428a9867a6SSlawomir Mrozowicz { /* SHA256 HMAC */ 1438a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1448a9867a6SSlawomir Mrozowicz {.sym = { 1458a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1468a9867a6SSlawomir Mrozowicz {.auth = { 1478a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA256_HMAC, 1488a9867a6SSlawomir Mrozowicz .block_size = 64, 1498a9867a6SSlawomir Mrozowicz .key_size = { 150e5e7bc71SPablo de Lara .min = 1, 1518a9867a6SSlawomir Mrozowicz .max = 64, 152e5e7bc71SPablo de Lara .increment = 1 1538a9867a6SSlawomir Mrozowicz }, 1548a9867a6SSlawomir Mrozowicz .digest_size = { 1558a9867a6SSlawomir Mrozowicz .min = 32, 1568a9867a6SSlawomir Mrozowicz .max = 32, 1578a9867a6SSlawomir Mrozowicz .increment = 0 1588a9867a6SSlawomir Mrozowicz }, 159acf86169SPablo de Lara .iv_size = { 0 } 1608a9867a6SSlawomir Mrozowicz }, } 1618a9867a6SSlawomir Mrozowicz }, } 1628a9867a6SSlawomir Mrozowicz }, 1638a9867a6SSlawomir Mrozowicz { /* SHA256 */ 1648a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1658a9867a6SSlawomir Mrozowicz {.sym = { 1668a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1678a9867a6SSlawomir Mrozowicz {.auth = { 1688a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA256, 1698a9867a6SSlawomir Mrozowicz .block_size = 64, 1708a9867a6SSlawomir Mrozowicz .key_size = { 1718a9867a6SSlawomir Mrozowicz .min = 0, 1728a9867a6SSlawomir Mrozowicz .max = 0, 1738a9867a6SSlawomir Mrozowicz .increment = 0 1748a9867a6SSlawomir Mrozowicz }, 1758a9867a6SSlawomir Mrozowicz .digest_size = { 1768a9867a6SSlawomir Mrozowicz .min = 32, 1778a9867a6SSlawomir Mrozowicz .max = 32, 1788a9867a6SSlawomir Mrozowicz .increment = 0 1798a9867a6SSlawomir Mrozowicz }, 180acf86169SPablo de Lara .iv_size = { 0 } 1818a9867a6SSlawomir Mrozowicz }, } 1828a9867a6SSlawomir Mrozowicz }, } 1838a9867a6SSlawomir Mrozowicz }, 1848a9867a6SSlawomir Mrozowicz { /* SHA384 HMAC */ 1858a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1868a9867a6SSlawomir Mrozowicz {.sym = { 1878a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1888a9867a6SSlawomir Mrozowicz {.auth = { 1898a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA384_HMAC, 1908a9867a6SSlawomir Mrozowicz .block_size = 128, 1918a9867a6SSlawomir Mrozowicz .key_size = { 192e5e7bc71SPablo de Lara .min = 1, 1938a9867a6SSlawomir Mrozowicz .max = 128, 194e5e7bc71SPablo de Lara .increment = 1 1958a9867a6SSlawomir Mrozowicz }, 1968a9867a6SSlawomir Mrozowicz .digest_size = { 1978a9867a6SSlawomir Mrozowicz .min = 48, 1988a9867a6SSlawomir Mrozowicz .max = 48, 1998a9867a6SSlawomir Mrozowicz .increment = 0 2008a9867a6SSlawomir Mrozowicz }, 201acf86169SPablo de Lara .iv_size = { 0 } 2028a9867a6SSlawomir Mrozowicz }, } 2038a9867a6SSlawomir Mrozowicz }, } 2048a9867a6SSlawomir Mrozowicz }, 2058a9867a6SSlawomir Mrozowicz { /* SHA384 */ 2068a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2078a9867a6SSlawomir Mrozowicz {.sym = { 2088a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 2098a9867a6SSlawomir Mrozowicz {.auth = { 2108a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA384, 2118a9867a6SSlawomir Mrozowicz .block_size = 128, 2128a9867a6SSlawomir Mrozowicz .key_size = { 2138a9867a6SSlawomir Mrozowicz .min = 0, 2148a9867a6SSlawomir Mrozowicz .max = 0, 2158a9867a6SSlawomir Mrozowicz .increment = 0 2168a9867a6SSlawomir Mrozowicz }, 2178a9867a6SSlawomir Mrozowicz .digest_size = { 2188a9867a6SSlawomir Mrozowicz .min = 48, 2198a9867a6SSlawomir Mrozowicz .max = 48, 2208a9867a6SSlawomir Mrozowicz .increment = 0 2218a9867a6SSlawomir Mrozowicz }, 222acf86169SPablo de Lara .iv_size = { 0 } 2238a9867a6SSlawomir Mrozowicz }, } 2248a9867a6SSlawomir Mrozowicz }, } 2258a9867a6SSlawomir Mrozowicz }, 2268a9867a6SSlawomir Mrozowicz { /* SHA512 HMAC */ 2278a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2288a9867a6SSlawomir Mrozowicz {.sym = { 2298a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 2308a9867a6SSlawomir Mrozowicz {.auth = { 2318a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA512_HMAC, 2328a9867a6SSlawomir Mrozowicz .block_size = 128, 2338a9867a6SSlawomir Mrozowicz .key_size = { 234e5e7bc71SPablo de Lara .min = 1, 2358a9867a6SSlawomir Mrozowicz .max = 128, 236e5e7bc71SPablo de Lara .increment = 1 2378a9867a6SSlawomir Mrozowicz }, 2388a9867a6SSlawomir Mrozowicz .digest_size = { 2398a9867a6SSlawomir Mrozowicz .min = 64, 2408a9867a6SSlawomir Mrozowicz .max = 64, 2418a9867a6SSlawomir Mrozowicz .increment = 0 2428a9867a6SSlawomir Mrozowicz }, 243acf86169SPablo de Lara .iv_size = { 0 } 2448a9867a6SSlawomir Mrozowicz }, } 2458a9867a6SSlawomir Mrozowicz }, } 2468a9867a6SSlawomir Mrozowicz }, 2478a9867a6SSlawomir Mrozowicz { /* SHA512 */ 2488a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2498a9867a6SSlawomir Mrozowicz {.sym = { 2508a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 2518a9867a6SSlawomir Mrozowicz {.auth = { 2528a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA512, 2538a9867a6SSlawomir Mrozowicz .block_size = 128, 2548a9867a6SSlawomir Mrozowicz .key_size = { 2558a9867a6SSlawomir Mrozowicz .min = 0, 2568a9867a6SSlawomir Mrozowicz .max = 0, 2578a9867a6SSlawomir Mrozowicz .increment = 0 2588a9867a6SSlawomir Mrozowicz }, 2598a9867a6SSlawomir Mrozowicz .digest_size = { 2608a9867a6SSlawomir Mrozowicz .min = 64, 2618a9867a6SSlawomir Mrozowicz .max = 64, 2628a9867a6SSlawomir Mrozowicz .increment = 0 2638a9867a6SSlawomir Mrozowicz }, 264acf86169SPablo de Lara .iv_size = { 0 } 2658a9867a6SSlawomir Mrozowicz }, } 2668a9867a6SSlawomir Mrozowicz }, } 2678a9867a6SSlawomir Mrozowicz }, 2688a9867a6SSlawomir Mrozowicz { /* AES CBC */ 2698a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2708a9867a6SSlawomir Mrozowicz {.sym = { 2718a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 2728a9867a6SSlawomir Mrozowicz {.cipher = { 2738a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_AES_CBC, 2748a9867a6SSlawomir Mrozowicz .block_size = 16, 2758a9867a6SSlawomir Mrozowicz .key_size = { 2768a9867a6SSlawomir Mrozowicz .min = 16, 2778a9867a6SSlawomir Mrozowicz .max = 32, 2788a9867a6SSlawomir Mrozowicz .increment = 8 2798a9867a6SSlawomir Mrozowicz }, 2808a9867a6SSlawomir Mrozowicz .iv_size = { 2818a9867a6SSlawomir Mrozowicz .min = 16, 2828a9867a6SSlawomir Mrozowicz .max = 16, 2838a9867a6SSlawomir Mrozowicz .increment = 0 2848a9867a6SSlawomir Mrozowicz } 2858a9867a6SSlawomir Mrozowicz }, } 2868a9867a6SSlawomir Mrozowicz }, } 2878a9867a6SSlawomir Mrozowicz }, 2888a9867a6SSlawomir Mrozowicz { /* AES CTR */ 2898a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2908a9867a6SSlawomir Mrozowicz {.sym = { 2918a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 2928a9867a6SSlawomir Mrozowicz {.cipher = { 2938a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_AES_CTR, 2948a9867a6SSlawomir Mrozowicz .block_size = 16, 2958a9867a6SSlawomir Mrozowicz .key_size = { 2968a9867a6SSlawomir Mrozowicz .min = 16, 2978a9867a6SSlawomir Mrozowicz .max = 32, 2988a9867a6SSlawomir Mrozowicz .increment = 8 2998a9867a6SSlawomir Mrozowicz }, 3008a9867a6SSlawomir Mrozowicz .iv_size = { 3018a9867a6SSlawomir Mrozowicz .min = 16, 3028a9867a6SSlawomir Mrozowicz .max = 16, 3038a9867a6SSlawomir Mrozowicz .increment = 0 3048a9867a6SSlawomir Mrozowicz } 3058a9867a6SSlawomir Mrozowicz }, } 3068a9867a6SSlawomir Mrozowicz }, } 3078a9867a6SSlawomir Mrozowicz }, 308b79e4c00SPablo de Lara { /* AES GCM */ 3098a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3108a9867a6SSlawomir Mrozowicz {.sym = { 311b79e4c00SPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD, 312b79e4c00SPablo de Lara {.aead = { 313b79e4c00SPablo de Lara .algo = RTE_CRYPTO_AEAD_AES_GCM, 3148a9867a6SSlawomir Mrozowicz .block_size = 16, 3158a9867a6SSlawomir Mrozowicz .key_size = { 3168a9867a6SSlawomir Mrozowicz .min = 16, 3178a9867a6SSlawomir Mrozowicz .max = 32, 3188a9867a6SSlawomir Mrozowicz .increment = 8 3198a9867a6SSlawomir Mrozowicz }, 3208a9867a6SSlawomir Mrozowicz .digest_size = { 3218a9867a6SSlawomir Mrozowicz .min = 16, 3228a9867a6SSlawomir Mrozowicz .max = 16, 3238a9867a6SSlawomir Mrozowicz .increment = 0 3248a9867a6SSlawomir Mrozowicz }, 3258a9867a6SSlawomir Mrozowicz .aad_size = { 3260625598aSArek Kusztal .min = 0, 3270625598aSArek Kusztal .max = 65535, 3280625598aSArek Kusztal .increment = 1 329acf86169SPablo de Lara }, 3308a9867a6SSlawomir Mrozowicz .iv_size = { 3318a9867a6SSlawomir Mrozowicz .min = 12, 3328a9867a6SSlawomir Mrozowicz .max = 16, 3338a9867a6SSlawomir Mrozowicz .increment = 4 334b79e4c00SPablo de Lara }, 3358a9867a6SSlawomir Mrozowicz }, } 3368a9867a6SSlawomir Mrozowicz }, } 3378a9867a6SSlawomir Mrozowicz }, 3381a4998dcSPablo de Lara { /* AES CCM */ 3391a4998dcSPablo de Lara .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3401a4998dcSPablo de Lara {.sym = { 3411a4998dcSPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD, 3421a4998dcSPablo de Lara {.aead = { 3431a4998dcSPablo de Lara .algo = RTE_CRYPTO_AEAD_AES_CCM, 3441a4998dcSPablo de Lara .block_size = 16, 3451a4998dcSPablo de Lara .key_size = { 3461a4998dcSPablo de Lara .min = 16, 3471a4998dcSPablo de Lara .max = 32, 3481a4998dcSPablo de Lara .increment = 8 3491a4998dcSPablo de Lara }, 3501a4998dcSPablo de Lara .digest_size = { 3511a4998dcSPablo de Lara .min = 4, 3521a4998dcSPablo de Lara .max = 16, 3531a4998dcSPablo de Lara .increment = 2 3541a4998dcSPablo de Lara }, 3551a4998dcSPablo de Lara .aad_size = { 3561a4998dcSPablo de Lara .min = 0, 3571a4998dcSPablo de Lara .max = 65535, 3581a4998dcSPablo de Lara .increment = 1 3591a4998dcSPablo de Lara }, 3601a4998dcSPablo de Lara .iv_size = { 3611a4998dcSPablo de Lara .min = 7, 3621a4998dcSPablo de Lara .max = 13, 3631a4998dcSPablo de Lara .increment = 1 3641a4998dcSPablo de Lara }, 3651a4998dcSPablo de Lara }, } 3661a4998dcSPablo de Lara }, } 3671a4998dcSPablo de Lara }, 3688a9867a6SSlawomir Mrozowicz { /* AES GMAC (AUTH) */ 3698a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3708a9867a6SSlawomir Mrozowicz {.sym = { 3718a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 3728a9867a6SSlawomir Mrozowicz {.auth = { 3738a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_AES_GMAC, 3748a9867a6SSlawomir Mrozowicz .block_size = 16, 3758a9867a6SSlawomir Mrozowicz .key_size = { 3768a9867a6SSlawomir Mrozowicz .min = 16, 3778a9867a6SSlawomir Mrozowicz .max = 32, 3788a9867a6SSlawomir Mrozowicz .increment = 8 3798a9867a6SSlawomir Mrozowicz }, 3808a9867a6SSlawomir Mrozowicz .digest_size = { 3818a9867a6SSlawomir Mrozowicz .min = 16, 3828a9867a6SSlawomir Mrozowicz .max = 16, 3838a9867a6SSlawomir Mrozowicz .increment = 0 3848a9867a6SSlawomir Mrozowicz }, 385e32e4fa8SPablo de Lara .iv_size = { 386e32e4fa8SPablo de Lara .min = 12, 387e32e4fa8SPablo de Lara .max = 16, 3888a9867a6SSlawomir Mrozowicz .increment = 4 389e32e4fa8SPablo de Lara } 3908a9867a6SSlawomir Mrozowicz }, } 3918a9867a6SSlawomir Mrozowicz }, } 3928a9867a6SSlawomir Mrozowicz }, 3938a9867a6SSlawomir Mrozowicz { /* 3DES CBC */ 3948a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3958a9867a6SSlawomir Mrozowicz {.sym = { 3968a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 3978a9867a6SSlawomir Mrozowicz {.cipher = { 3988a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_3DES_CBC, 3998a9867a6SSlawomir Mrozowicz .block_size = 8, 4008a9867a6SSlawomir Mrozowicz .key_size = { 4019607e37eSMarko Kovacevic .min = 8, 4028a9867a6SSlawomir Mrozowicz .max = 24, 4038a9867a6SSlawomir Mrozowicz .increment = 8 4048a9867a6SSlawomir Mrozowicz }, 4058a9867a6SSlawomir Mrozowicz .iv_size = { 4068a9867a6SSlawomir Mrozowicz .min = 8, 4078a9867a6SSlawomir Mrozowicz .max = 8, 4088a9867a6SSlawomir Mrozowicz .increment = 0 4098a9867a6SSlawomir Mrozowicz } 4108a9867a6SSlawomir Mrozowicz }, } 4118a9867a6SSlawomir Mrozowicz }, } 4128a9867a6SSlawomir Mrozowicz }, 4138a9867a6SSlawomir Mrozowicz { /* 3DES CTR */ 4148a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 4158a9867a6SSlawomir Mrozowicz {.sym = { 4168a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 4178a9867a6SSlawomir Mrozowicz {.cipher = { 4188a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_3DES_CTR, 4198a9867a6SSlawomir Mrozowicz .block_size = 8, 4208a9867a6SSlawomir Mrozowicz .key_size = { 4218a9867a6SSlawomir Mrozowicz .min = 16, 4228a9867a6SSlawomir Mrozowicz .max = 24, 4238a9867a6SSlawomir Mrozowicz .increment = 8 4248a9867a6SSlawomir Mrozowicz }, 4258a9867a6SSlawomir Mrozowicz .iv_size = { 4268a9867a6SSlawomir Mrozowicz .min = 8, 4278a9867a6SSlawomir Mrozowicz .max = 8, 4288a9867a6SSlawomir Mrozowicz .increment = 0 4298a9867a6SSlawomir Mrozowicz } 4308a9867a6SSlawomir Mrozowicz }, } 4318a9867a6SSlawomir Mrozowicz }, } 4328a9867a6SSlawomir Mrozowicz }, 433c1734807SPablo de Lara { /* DES CBC */ 434c1734807SPablo de Lara .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 435c1734807SPablo de Lara {.sym = { 436c1734807SPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 437c1734807SPablo de Lara {.cipher = { 438c1734807SPablo de Lara .algo = RTE_CRYPTO_CIPHER_DES_CBC, 439c1734807SPablo de Lara .block_size = 8, 440c1734807SPablo de Lara .key_size = { 441c1734807SPablo de Lara .min = 8, 442c1734807SPablo de Lara .max = 8, 443c1734807SPablo de Lara .increment = 0 444c1734807SPablo de Lara }, 445c1734807SPablo de Lara .iv_size = { 446c1734807SPablo de Lara .min = 8, 447c1734807SPablo de Lara .max = 8, 448c1734807SPablo de Lara .increment = 0 449c1734807SPablo de Lara } 450c1734807SPablo de Lara }, } 451c1734807SPablo de Lara }, } 452c1734807SPablo de Lara }, 4531dee7bc7SPablo de Lara { /* DES DOCSIS BPI */ 4541dee7bc7SPablo de Lara .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 4551dee7bc7SPablo de Lara {.sym = { 4561dee7bc7SPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 4571dee7bc7SPablo de Lara {.cipher = { 4581dee7bc7SPablo de Lara .algo = RTE_CRYPTO_CIPHER_DES_DOCSISBPI, 4591dee7bc7SPablo de Lara .block_size = 8, 4601dee7bc7SPablo de Lara .key_size = { 4611dee7bc7SPablo de Lara .min = 8, 4621dee7bc7SPablo de Lara .max = 8, 4631dee7bc7SPablo de Lara .increment = 0 4641dee7bc7SPablo de Lara }, 4651dee7bc7SPablo de Lara .iv_size = { 4661dee7bc7SPablo de Lara .min = 8, 4671dee7bc7SPablo de Lara .max = 8, 4681dee7bc7SPablo de Lara .increment = 0 4691dee7bc7SPablo de Lara } 4701dee7bc7SPablo de Lara }, } 4711dee7bc7SPablo de Lara }, } 4721dee7bc7SPablo de Lara }, 473*3e9d6bd4SSunila Sahu { /* RSA */ 474*3e9d6bd4SSunila Sahu .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 475*3e9d6bd4SSunila Sahu {.asym = { 476*3e9d6bd4SSunila Sahu .xform_capa = { 477*3e9d6bd4SSunila Sahu .xform_type = RTE_CRYPTO_ASYM_XFORM_RSA, 478*3e9d6bd4SSunila Sahu .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) | 479*3e9d6bd4SSunila Sahu (1 << RTE_CRYPTO_ASYM_OP_VERIFY) | 480*3e9d6bd4SSunila Sahu (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) | 481*3e9d6bd4SSunila Sahu (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)), 482*3e9d6bd4SSunila Sahu { 483*3e9d6bd4SSunila Sahu .modlen = { 484*3e9d6bd4SSunila Sahu /* min length is based on openssl rsa keygen */ 485*3e9d6bd4SSunila Sahu .min = 30, 486*3e9d6bd4SSunila Sahu /* value 0 symbolizes no limit on max length */ 487*3e9d6bd4SSunila Sahu .max = 0, 488*3e9d6bd4SSunila Sahu .increment = 1 489*3e9d6bd4SSunila Sahu }, } 490*3e9d6bd4SSunila Sahu } 491*3e9d6bd4SSunila Sahu }, 492*3e9d6bd4SSunila Sahu } 493*3e9d6bd4SSunila Sahu }, 494*3e9d6bd4SSunila Sahu { /* modexp */ 495*3e9d6bd4SSunila Sahu .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 496*3e9d6bd4SSunila Sahu {.asym = { 497*3e9d6bd4SSunila Sahu .xform_capa = { 498*3e9d6bd4SSunila Sahu .xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX, 499*3e9d6bd4SSunila Sahu .op_types = 0, 500*3e9d6bd4SSunila Sahu { 501*3e9d6bd4SSunila Sahu .modlen = { 502*3e9d6bd4SSunila Sahu /* value 0 symbolizes no limit on min length */ 503*3e9d6bd4SSunila Sahu .min = 0, 504*3e9d6bd4SSunila Sahu /* value 0 symbolizes no limit on max length */ 505*3e9d6bd4SSunila Sahu .max = 0, 506*3e9d6bd4SSunila Sahu .increment = 1 507*3e9d6bd4SSunila Sahu }, } 508*3e9d6bd4SSunila Sahu } 509*3e9d6bd4SSunila Sahu }, 510*3e9d6bd4SSunila Sahu } 511*3e9d6bd4SSunila Sahu }, 512*3e9d6bd4SSunila Sahu { /* modinv */ 513*3e9d6bd4SSunila Sahu .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 514*3e9d6bd4SSunila Sahu {.asym = { 515*3e9d6bd4SSunila Sahu .xform_capa = { 516*3e9d6bd4SSunila Sahu .xform_type = RTE_CRYPTO_ASYM_XFORM_MODINV, 517*3e9d6bd4SSunila Sahu .op_types = 0, 518*3e9d6bd4SSunila Sahu { 519*3e9d6bd4SSunila Sahu .modlen = { 520*3e9d6bd4SSunila Sahu /* value 0 symbolizes no limit on min length */ 521*3e9d6bd4SSunila Sahu .min = 0, 522*3e9d6bd4SSunila Sahu /* value 0 symbolizes no limit on max length */ 523*3e9d6bd4SSunila Sahu .max = 0, 524*3e9d6bd4SSunila Sahu .increment = 1 525*3e9d6bd4SSunila Sahu }, } 526*3e9d6bd4SSunila Sahu } 527*3e9d6bd4SSunila Sahu }, 528*3e9d6bd4SSunila Sahu } 529*3e9d6bd4SSunila Sahu }, 5308a9867a6SSlawomir Mrozowicz 5318a9867a6SSlawomir Mrozowicz RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() 5328a9867a6SSlawomir Mrozowicz }; 5338a9867a6SSlawomir Mrozowicz 5348a9867a6SSlawomir Mrozowicz 5358a9867a6SSlawomir Mrozowicz /** Configure device */ 5368a9867a6SSlawomir Mrozowicz static int 53760e686c2SFan Zhang openssl_pmd_config(__rte_unused struct rte_cryptodev *dev, 53860e686c2SFan Zhang __rte_unused struct rte_cryptodev_config *config) 5398a9867a6SSlawomir Mrozowicz { 5408a9867a6SSlawomir Mrozowicz return 0; 5418a9867a6SSlawomir Mrozowicz } 5428a9867a6SSlawomir Mrozowicz 5438a9867a6SSlawomir Mrozowicz /** Start device */ 5448a9867a6SSlawomir Mrozowicz static int 5458a9867a6SSlawomir Mrozowicz openssl_pmd_start(__rte_unused struct rte_cryptodev *dev) 5468a9867a6SSlawomir Mrozowicz { 5478a9867a6SSlawomir Mrozowicz return 0; 5488a9867a6SSlawomir Mrozowicz } 5498a9867a6SSlawomir Mrozowicz 5508a9867a6SSlawomir Mrozowicz /** Stop device */ 5518a9867a6SSlawomir Mrozowicz static void 5528a9867a6SSlawomir Mrozowicz openssl_pmd_stop(__rte_unused struct rte_cryptodev *dev) 5538a9867a6SSlawomir Mrozowicz { 5548a9867a6SSlawomir Mrozowicz } 5558a9867a6SSlawomir Mrozowicz 5568a9867a6SSlawomir Mrozowicz /** Close device */ 5578a9867a6SSlawomir Mrozowicz static int 5588a9867a6SSlawomir Mrozowicz openssl_pmd_close(__rte_unused struct rte_cryptodev *dev) 5598a9867a6SSlawomir Mrozowicz { 5608a9867a6SSlawomir Mrozowicz return 0; 5618a9867a6SSlawomir Mrozowicz } 5628a9867a6SSlawomir Mrozowicz 5638a9867a6SSlawomir Mrozowicz 5648a9867a6SSlawomir Mrozowicz /** Get device statistics */ 5658a9867a6SSlawomir Mrozowicz static void 5668a9867a6SSlawomir Mrozowicz openssl_pmd_stats_get(struct rte_cryptodev *dev, 5678a9867a6SSlawomir Mrozowicz struct rte_cryptodev_stats *stats) 5688a9867a6SSlawomir Mrozowicz { 5698a9867a6SSlawomir Mrozowicz int qp_id; 5708a9867a6SSlawomir Mrozowicz 5718a9867a6SSlawomir Mrozowicz for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { 5728a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = dev->data->queue_pairs[qp_id]; 5738a9867a6SSlawomir Mrozowicz 5748a9867a6SSlawomir Mrozowicz stats->enqueued_count += qp->stats.enqueued_count; 5758a9867a6SSlawomir Mrozowicz stats->dequeued_count += qp->stats.dequeued_count; 5768a9867a6SSlawomir Mrozowicz 5778a9867a6SSlawomir Mrozowicz stats->enqueue_err_count += qp->stats.enqueue_err_count; 5788a9867a6SSlawomir Mrozowicz stats->dequeue_err_count += qp->stats.dequeue_err_count; 5798a9867a6SSlawomir Mrozowicz } 5808a9867a6SSlawomir Mrozowicz } 5818a9867a6SSlawomir Mrozowicz 5828a9867a6SSlawomir Mrozowicz /** Reset device statistics */ 5838a9867a6SSlawomir Mrozowicz static void 5848a9867a6SSlawomir Mrozowicz openssl_pmd_stats_reset(struct rte_cryptodev *dev) 5858a9867a6SSlawomir Mrozowicz { 5868a9867a6SSlawomir Mrozowicz int qp_id; 5878a9867a6SSlawomir Mrozowicz 5888a9867a6SSlawomir Mrozowicz for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { 5898a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = dev->data->queue_pairs[qp_id]; 5908a9867a6SSlawomir Mrozowicz 5918a9867a6SSlawomir Mrozowicz memset(&qp->stats, 0, sizeof(qp->stats)); 5928a9867a6SSlawomir Mrozowicz } 5938a9867a6SSlawomir Mrozowicz } 5948a9867a6SSlawomir Mrozowicz 5958a9867a6SSlawomir Mrozowicz 5968a9867a6SSlawomir Mrozowicz /** Get device info */ 5978a9867a6SSlawomir Mrozowicz static void 5988a9867a6SSlawomir Mrozowicz openssl_pmd_info_get(struct rte_cryptodev *dev, 5998a9867a6SSlawomir Mrozowicz struct rte_cryptodev_info *dev_info) 6008a9867a6SSlawomir Mrozowicz { 6018a9867a6SSlawomir Mrozowicz struct openssl_private *internals = dev->data->dev_private; 6028a9867a6SSlawomir Mrozowicz 6038a9867a6SSlawomir Mrozowicz if (dev_info != NULL) { 6047a364faeSSlawomir Mrozowicz dev_info->driver_id = dev->driver_id; 6058a9867a6SSlawomir Mrozowicz dev_info->feature_flags = dev->feature_flags; 6068a9867a6SSlawomir Mrozowicz dev_info->capabilities = openssl_pmd_capabilities; 6078a9867a6SSlawomir Mrozowicz dev_info->max_nb_queue_pairs = internals->max_nb_qpairs; 608e1fc5b76SPablo de Lara /* No limit of number of sessions */ 609e1fc5b76SPablo de Lara dev_info->sym.max_nb_sessions = 0; 6108a9867a6SSlawomir Mrozowicz } 6118a9867a6SSlawomir Mrozowicz } 6128a9867a6SSlawomir Mrozowicz 6138a9867a6SSlawomir Mrozowicz /** Release queue pair */ 6148a9867a6SSlawomir Mrozowicz static int 6158a9867a6SSlawomir Mrozowicz openssl_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id) 6168a9867a6SSlawomir Mrozowicz { 6178a9867a6SSlawomir Mrozowicz if (dev->data->queue_pairs[qp_id] != NULL) { 6188a9867a6SSlawomir Mrozowicz rte_free(dev->data->queue_pairs[qp_id]); 6198a9867a6SSlawomir Mrozowicz dev->data->queue_pairs[qp_id] = NULL; 6208a9867a6SSlawomir Mrozowicz } 6218a9867a6SSlawomir Mrozowicz return 0; 6228a9867a6SSlawomir Mrozowicz } 6238a9867a6SSlawomir Mrozowicz 6248a9867a6SSlawomir Mrozowicz /** set a unique name for the queue pair based on it's name, dev_id and qp_id */ 6258a9867a6SSlawomir Mrozowicz static int 6268a9867a6SSlawomir Mrozowicz openssl_pmd_qp_set_unique_name(struct rte_cryptodev *dev, 6278a9867a6SSlawomir Mrozowicz struct openssl_qp *qp) 6288a9867a6SSlawomir Mrozowicz { 6298a9867a6SSlawomir Mrozowicz unsigned int n = snprintf(qp->name, sizeof(qp->name), 6308a9867a6SSlawomir Mrozowicz "openssl_pmd_%u_qp_%u", 6318a9867a6SSlawomir Mrozowicz dev->data->dev_id, qp->id); 6328a9867a6SSlawomir Mrozowicz 6336ab25e63STomasz Duszynski if (n >= sizeof(qp->name)) 6348a9867a6SSlawomir Mrozowicz return -1; 6358a9867a6SSlawomir Mrozowicz 6368a9867a6SSlawomir Mrozowicz return 0; 6378a9867a6SSlawomir Mrozowicz } 6388a9867a6SSlawomir Mrozowicz 6398a9867a6SSlawomir Mrozowicz 6408a9867a6SSlawomir Mrozowicz /** Create a ring to place processed operations on */ 6418a9867a6SSlawomir Mrozowicz static struct rte_ring * 6428a9867a6SSlawomir Mrozowicz openssl_pmd_qp_create_processed_ops_ring(struct openssl_qp *qp, 6438a9867a6SSlawomir Mrozowicz unsigned int ring_size, int socket_id) 6448a9867a6SSlawomir Mrozowicz { 6458a9867a6SSlawomir Mrozowicz struct rte_ring *r; 6468a9867a6SSlawomir Mrozowicz 6478a9867a6SSlawomir Mrozowicz r = rte_ring_lookup(qp->name); 6488a9867a6SSlawomir Mrozowicz if (r) { 649636e7392SBruce Richardson if (rte_ring_get_size(r) >= ring_size) { 650094b2386SNaga Suresh Somarowthu OPENSSL_LOG(INFO, 6518a9867a6SSlawomir Mrozowicz "Reusing existing ring %s for processed ops", 6528a9867a6SSlawomir Mrozowicz qp->name); 6538a9867a6SSlawomir Mrozowicz return r; 6548a9867a6SSlawomir Mrozowicz } 6558a9867a6SSlawomir Mrozowicz 656094b2386SNaga Suresh Somarowthu OPENSSL_LOG(ERR, 6578a9867a6SSlawomir Mrozowicz "Unable to reuse existing ring %s for processed ops", 6588a9867a6SSlawomir Mrozowicz qp->name); 6598a9867a6SSlawomir Mrozowicz return NULL; 6608a9867a6SSlawomir Mrozowicz } 6618a9867a6SSlawomir Mrozowicz 6628a9867a6SSlawomir Mrozowicz return rte_ring_create(qp->name, ring_size, socket_id, 6638a9867a6SSlawomir Mrozowicz RING_F_SP_ENQ | RING_F_SC_DEQ); 6648a9867a6SSlawomir Mrozowicz } 6658a9867a6SSlawomir Mrozowicz 6668a9867a6SSlawomir Mrozowicz 6678a9867a6SSlawomir Mrozowicz /** Setup a queue pair */ 6688a9867a6SSlawomir Mrozowicz static int 6698a9867a6SSlawomir Mrozowicz openssl_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id, 6708a9867a6SSlawomir Mrozowicz const struct rte_cryptodev_qp_conf *qp_conf, 671f7db6f82SPablo de Lara int socket_id, struct rte_mempool *session_pool) 6728a9867a6SSlawomir Mrozowicz { 6738a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = NULL; 6748a9867a6SSlawomir Mrozowicz 6758a9867a6SSlawomir Mrozowicz /* Free memory prior to re-allocation if needed. */ 6768a9867a6SSlawomir Mrozowicz if (dev->data->queue_pairs[qp_id] != NULL) 6778a9867a6SSlawomir Mrozowicz openssl_pmd_qp_release(dev, qp_id); 6788a9867a6SSlawomir Mrozowicz 6798a9867a6SSlawomir Mrozowicz /* Allocate the queue pair data structure. */ 6808a9867a6SSlawomir Mrozowicz qp = rte_zmalloc_socket("OPENSSL PMD Queue Pair", sizeof(*qp), 6818a9867a6SSlawomir Mrozowicz RTE_CACHE_LINE_SIZE, socket_id); 6828a9867a6SSlawomir Mrozowicz if (qp == NULL) 6838a9867a6SSlawomir Mrozowicz return -ENOMEM; 6848a9867a6SSlawomir Mrozowicz 6858a9867a6SSlawomir Mrozowicz qp->id = qp_id; 6868a9867a6SSlawomir Mrozowicz dev->data->queue_pairs[qp_id] = qp; 6878a9867a6SSlawomir Mrozowicz 6888a9867a6SSlawomir Mrozowicz if (openssl_pmd_qp_set_unique_name(dev, qp)) 6898a9867a6SSlawomir Mrozowicz goto qp_setup_cleanup; 6908a9867a6SSlawomir Mrozowicz 6918a9867a6SSlawomir Mrozowicz qp->processed_ops = openssl_pmd_qp_create_processed_ops_ring(qp, 6928a9867a6SSlawomir Mrozowicz qp_conf->nb_descriptors, socket_id); 6938a9867a6SSlawomir Mrozowicz if (qp->processed_ops == NULL) 6948a9867a6SSlawomir Mrozowicz goto qp_setup_cleanup; 6958a9867a6SSlawomir Mrozowicz 696f7db6f82SPablo de Lara qp->sess_mp = session_pool; 6978a9867a6SSlawomir Mrozowicz 6988a9867a6SSlawomir Mrozowicz memset(&qp->stats, 0, sizeof(qp->stats)); 6998a9867a6SSlawomir Mrozowicz 7008a9867a6SSlawomir Mrozowicz return 0; 7018a9867a6SSlawomir Mrozowicz 7028a9867a6SSlawomir Mrozowicz qp_setup_cleanup: 7038a9867a6SSlawomir Mrozowicz if (qp) 7048a9867a6SSlawomir Mrozowicz rte_free(qp); 7058a9867a6SSlawomir Mrozowicz 7068a9867a6SSlawomir Mrozowicz return -1; 7078a9867a6SSlawomir Mrozowicz } 7088a9867a6SSlawomir Mrozowicz 7098a9867a6SSlawomir Mrozowicz /** Return the number of allocated queue pairs */ 7108a9867a6SSlawomir Mrozowicz static uint32_t 7118a9867a6SSlawomir Mrozowicz openssl_pmd_qp_count(struct rte_cryptodev *dev) 7128a9867a6SSlawomir Mrozowicz { 7138a9867a6SSlawomir Mrozowicz return dev->data->nb_queue_pairs; 7148a9867a6SSlawomir Mrozowicz } 7158a9867a6SSlawomir Mrozowicz 716*3e9d6bd4SSunila Sahu /** Returns the size of the symmetric session structure */ 7178a9867a6SSlawomir Mrozowicz static unsigned 718012c5076SPablo de Lara openssl_pmd_sym_session_get_size(struct rte_cryptodev *dev __rte_unused) 7198a9867a6SSlawomir Mrozowicz { 7208a9867a6SSlawomir Mrozowicz return sizeof(struct openssl_session); 7218a9867a6SSlawomir Mrozowicz } 7228a9867a6SSlawomir Mrozowicz 723*3e9d6bd4SSunila Sahu /** Returns the size of the asymmetric session structure */ 724*3e9d6bd4SSunila Sahu static unsigned 725*3e9d6bd4SSunila Sahu openssl_pmd_asym_session_get_size(struct rte_cryptodev *dev __rte_unused) 726*3e9d6bd4SSunila Sahu { 727*3e9d6bd4SSunila Sahu return sizeof(struct openssl_asym_session); 728*3e9d6bd4SSunila Sahu } 729*3e9d6bd4SSunila Sahu 7308a9867a6SSlawomir Mrozowicz /** Configure the session from a crypto xform chain */ 731b3bbd9e5SSlawomir Mrozowicz static int 732012c5076SPablo de Lara openssl_pmd_sym_session_configure(struct rte_cryptodev *dev __rte_unused, 733b3bbd9e5SSlawomir Mrozowicz struct rte_crypto_sym_xform *xform, 734b3bbd9e5SSlawomir Mrozowicz struct rte_cryptodev_sym_session *sess, 735b3bbd9e5SSlawomir Mrozowicz struct rte_mempool *mempool) 7368a9867a6SSlawomir Mrozowicz { 737b3bbd9e5SSlawomir Mrozowicz void *sess_private_data; 73827391b53SPablo de Lara int ret; 739b3bbd9e5SSlawomir Mrozowicz 7408a9867a6SSlawomir Mrozowicz if (unlikely(sess == NULL)) { 741094b2386SNaga Suresh Somarowthu OPENSSL_LOG(ERR, "invalid session struct"); 74227391b53SPablo de Lara return -EINVAL; 743b3bbd9e5SSlawomir Mrozowicz } 744b3bbd9e5SSlawomir Mrozowicz 745b3bbd9e5SSlawomir Mrozowicz if (rte_mempool_get(mempool, &sess_private_data)) { 746094b2386SNaga Suresh Somarowthu OPENSSL_LOG(ERR, 747b3bbd9e5SSlawomir Mrozowicz "Couldn't get object from session mempool"); 74827391b53SPablo de Lara return -ENOMEM; 7498a9867a6SSlawomir Mrozowicz } 7508a9867a6SSlawomir Mrozowicz 75127391b53SPablo de Lara ret = openssl_set_session_parameters(sess_private_data, xform); 75227391b53SPablo de Lara if (ret != 0) { 753094b2386SNaga Suresh Somarowthu OPENSSL_LOG(ERR, "failed configure session parameters"); 754b3bbd9e5SSlawomir Mrozowicz 755b3bbd9e5SSlawomir Mrozowicz /* Return session to mempool */ 756b3bbd9e5SSlawomir Mrozowicz rte_mempool_put(mempool, sess_private_data); 75727391b53SPablo de Lara return ret; 7588a9867a6SSlawomir Mrozowicz } 7598a9867a6SSlawomir Mrozowicz 760012c5076SPablo de Lara set_sym_session_private_data(sess, dev->driver_id, 761b3bbd9e5SSlawomir Mrozowicz sess_private_data); 762b3bbd9e5SSlawomir Mrozowicz 763b3bbd9e5SSlawomir Mrozowicz return 0; 7648a9867a6SSlawomir Mrozowicz } 7658a9867a6SSlawomir Mrozowicz 766*3e9d6bd4SSunila Sahu static int openssl_set_asym_session_parameters( 767*3e9d6bd4SSunila Sahu struct openssl_asym_session *asym_session, 768*3e9d6bd4SSunila Sahu struct rte_crypto_asym_xform *xform) 769*3e9d6bd4SSunila Sahu { 770*3e9d6bd4SSunila Sahu int ret = 0; 771*3e9d6bd4SSunila Sahu 772*3e9d6bd4SSunila Sahu if (xform->next != NULL) { 773*3e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, "chained xfrms are not supported on %s", 774*3e9d6bd4SSunila Sahu rte_crypto_asym_xform_strings[xform->xform_type]); 775*3e9d6bd4SSunila Sahu return -1; 776*3e9d6bd4SSunila Sahu } 777*3e9d6bd4SSunila Sahu 778*3e9d6bd4SSunila Sahu switch (xform->xform_type) { 779*3e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_RSA: 780*3e9d6bd4SSunila Sahu { 781*3e9d6bd4SSunila Sahu BIGNUM *n = NULL; 782*3e9d6bd4SSunila Sahu BIGNUM *e = NULL; 783*3e9d6bd4SSunila Sahu BIGNUM *d = NULL; 784*3e9d6bd4SSunila Sahu BIGNUM *p = NULL, *q = NULL, *dmp1 = NULL; 785*3e9d6bd4SSunila Sahu BIGNUM *iqmp = NULL, *dmq1 = NULL; 786*3e9d6bd4SSunila Sahu 787*3e9d6bd4SSunila Sahu /* copy xfrm data into rsa struct */ 788*3e9d6bd4SSunila Sahu n = BN_bin2bn((const unsigned char *)xform->rsa.n.data, 789*3e9d6bd4SSunila Sahu xform->rsa.n.length, n); 790*3e9d6bd4SSunila Sahu e = BN_bin2bn((const unsigned char *)xform->rsa.e.data, 791*3e9d6bd4SSunila Sahu xform->rsa.e.length, e); 792*3e9d6bd4SSunila Sahu 793*3e9d6bd4SSunila Sahu if (!n || !e) 794*3e9d6bd4SSunila Sahu goto err_rsa; 795*3e9d6bd4SSunila Sahu 796*3e9d6bd4SSunila Sahu RSA *rsa = RSA_new(); 797*3e9d6bd4SSunila Sahu if (rsa == NULL) 798*3e9d6bd4SSunila Sahu goto err_rsa; 799*3e9d6bd4SSunila Sahu 800*3e9d6bd4SSunila Sahu if (xform->rsa.key_type == RTE_RSA_KEY_TYPE_EXP) { 801*3e9d6bd4SSunila Sahu d = BN_bin2bn( 802*3e9d6bd4SSunila Sahu (const unsigned char *)xform->rsa.d.data, 803*3e9d6bd4SSunila Sahu xform->rsa.d.length, 804*3e9d6bd4SSunila Sahu d); 805*3e9d6bd4SSunila Sahu if (!d) { 806*3e9d6bd4SSunila Sahu RSA_free(rsa); 807*3e9d6bd4SSunila Sahu goto err_rsa; 808*3e9d6bd4SSunila Sahu } 809*3e9d6bd4SSunila Sahu } else { 810*3e9d6bd4SSunila Sahu p = BN_bin2bn((const unsigned char *) 811*3e9d6bd4SSunila Sahu xform->rsa.qt.p.data, 812*3e9d6bd4SSunila Sahu xform->rsa.qt.p.length, 813*3e9d6bd4SSunila Sahu p); 814*3e9d6bd4SSunila Sahu q = BN_bin2bn((const unsigned char *) 815*3e9d6bd4SSunila Sahu xform->rsa.qt.q.data, 816*3e9d6bd4SSunila Sahu xform->rsa.qt.q.length, 817*3e9d6bd4SSunila Sahu q); 818*3e9d6bd4SSunila Sahu dmp1 = BN_bin2bn((const unsigned char *) 819*3e9d6bd4SSunila Sahu xform->rsa.qt.dP.data, 820*3e9d6bd4SSunila Sahu xform->rsa.qt.dP.length, 821*3e9d6bd4SSunila Sahu dmp1); 822*3e9d6bd4SSunila Sahu dmq1 = BN_bin2bn((const unsigned char *) 823*3e9d6bd4SSunila Sahu xform->rsa.qt.dQ.data, 824*3e9d6bd4SSunila Sahu xform->rsa.qt.dQ.length, 825*3e9d6bd4SSunila Sahu dmq1); 826*3e9d6bd4SSunila Sahu iqmp = BN_bin2bn((const unsigned char *) 827*3e9d6bd4SSunila Sahu xform->rsa.qt.qInv.data, 828*3e9d6bd4SSunila Sahu xform->rsa.qt.qInv.length, 829*3e9d6bd4SSunila Sahu iqmp); 830*3e9d6bd4SSunila Sahu 831*3e9d6bd4SSunila Sahu if (!p || !q || !dmp1 || !dmq1 || !iqmp) { 832*3e9d6bd4SSunila Sahu RSA_free(rsa); 833*3e9d6bd4SSunila Sahu goto err_rsa; 834*3e9d6bd4SSunila Sahu } 835*3e9d6bd4SSunila Sahu set_rsa_params(rsa, p, q, ret); 836*3e9d6bd4SSunila Sahu if (ret) { 837*3e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, 838*3e9d6bd4SSunila Sahu "failed to set rsa params\n"); 839*3e9d6bd4SSunila Sahu RSA_free(rsa); 840*3e9d6bd4SSunila Sahu goto err_rsa; 841*3e9d6bd4SSunila Sahu } 842*3e9d6bd4SSunila Sahu set_rsa_crt_params(rsa, dmp1, dmq1, iqmp, ret); 843*3e9d6bd4SSunila Sahu if (ret) { 844*3e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, 845*3e9d6bd4SSunila Sahu "failed to set crt params\n"); 846*3e9d6bd4SSunila Sahu RSA_free(rsa); 847*3e9d6bd4SSunila Sahu /* 848*3e9d6bd4SSunila Sahu * set already populated params to NULL 849*3e9d6bd4SSunila Sahu * as its freed by call to RSA_free 850*3e9d6bd4SSunila Sahu */ 851*3e9d6bd4SSunila Sahu p = q = NULL; 852*3e9d6bd4SSunila Sahu goto err_rsa; 853*3e9d6bd4SSunila Sahu } 854*3e9d6bd4SSunila Sahu } 855*3e9d6bd4SSunila Sahu 856*3e9d6bd4SSunila Sahu set_rsa_keys(rsa, n, e, d, ret); 857*3e9d6bd4SSunila Sahu if (ret) { 858*3e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, "Failed to load rsa keys\n"); 859*3e9d6bd4SSunila Sahu RSA_free(rsa); 860*3e9d6bd4SSunila Sahu return -1; 861*3e9d6bd4SSunila Sahu } 862*3e9d6bd4SSunila Sahu asym_session->u.r.rsa = rsa; 863*3e9d6bd4SSunila Sahu asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_RSA; 864*3e9d6bd4SSunila Sahu break; 865*3e9d6bd4SSunila Sahu err_rsa: 866*3e9d6bd4SSunila Sahu if (n) 867*3e9d6bd4SSunila Sahu BN_free(n); 868*3e9d6bd4SSunila Sahu if (e) 869*3e9d6bd4SSunila Sahu BN_free(e); 870*3e9d6bd4SSunila Sahu if (d) 871*3e9d6bd4SSunila Sahu BN_free(d); 872*3e9d6bd4SSunila Sahu if (p) 873*3e9d6bd4SSunila Sahu BN_free(p); 874*3e9d6bd4SSunila Sahu if (q) 875*3e9d6bd4SSunila Sahu BN_free(q); 876*3e9d6bd4SSunila Sahu if (dmp1) 877*3e9d6bd4SSunila Sahu BN_free(dmp1); 878*3e9d6bd4SSunila Sahu if (dmq1) 879*3e9d6bd4SSunila Sahu BN_free(dmq1); 880*3e9d6bd4SSunila Sahu if (iqmp) 881*3e9d6bd4SSunila Sahu BN_free(iqmp); 882*3e9d6bd4SSunila Sahu 883*3e9d6bd4SSunila Sahu return -1; 884*3e9d6bd4SSunila Sahu } 885*3e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_MODEX: 886*3e9d6bd4SSunila Sahu { 887*3e9d6bd4SSunila Sahu struct rte_crypto_modex_xform *xfrm = &(xform->modex); 888*3e9d6bd4SSunila Sahu 889*3e9d6bd4SSunila Sahu BN_CTX *ctx = BN_CTX_new(); 890*3e9d6bd4SSunila Sahu if (ctx == NULL) { 891*3e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, 892*3e9d6bd4SSunila Sahu " failed to allocate resources\n"); 893*3e9d6bd4SSunila Sahu return -1; 894*3e9d6bd4SSunila Sahu } 895*3e9d6bd4SSunila Sahu BN_CTX_start(ctx); 896*3e9d6bd4SSunila Sahu BIGNUM *mod = BN_CTX_get(ctx); 897*3e9d6bd4SSunila Sahu BIGNUM *exp = BN_CTX_get(ctx); 898*3e9d6bd4SSunila Sahu if (mod == NULL || exp == NULL) { 899*3e9d6bd4SSunila Sahu BN_CTX_end(ctx); 900*3e9d6bd4SSunila Sahu BN_CTX_free(ctx); 901*3e9d6bd4SSunila Sahu return -1; 902*3e9d6bd4SSunila Sahu } 903*3e9d6bd4SSunila Sahu 904*3e9d6bd4SSunila Sahu mod = BN_bin2bn((const unsigned char *) 905*3e9d6bd4SSunila Sahu xfrm->modulus.data, 906*3e9d6bd4SSunila Sahu xfrm->modulus.length, mod); 907*3e9d6bd4SSunila Sahu exp = BN_bin2bn((const unsigned char *) 908*3e9d6bd4SSunila Sahu xfrm->exponent.data, 909*3e9d6bd4SSunila Sahu xfrm->exponent.length, exp); 910*3e9d6bd4SSunila Sahu asym_session->u.e.ctx = ctx; 911*3e9d6bd4SSunila Sahu asym_session->u.e.mod = mod; 912*3e9d6bd4SSunila Sahu asym_session->u.e.exp = exp; 913*3e9d6bd4SSunila Sahu asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_MODEX; 914*3e9d6bd4SSunila Sahu break; 915*3e9d6bd4SSunila Sahu } 916*3e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_MODINV: 917*3e9d6bd4SSunila Sahu { 918*3e9d6bd4SSunila Sahu struct rte_crypto_modinv_xform *xfrm = &(xform->modinv); 919*3e9d6bd4SSunila Sahu 920*3e9d6bd4SSunila Sahu BN_CTX *ctx = BN_CTX_new(); 921*3e9d6bd4SSunila Sahu if (ctx == NULL) { 922*3e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, 923*3e9d6bd4SSunila Sahu " failed to allocate resources\n"); 924*3e9d6bd4SSunila Sahu return -1; 925*3e9d6bd4SSunila Sahu } 926*3e9d6bd4SSunila Sahu BN_CTX_start(ctx); 927*3e9d6bd4SSunila Sahu BIGNUM *mod = BN_CTX_get(ctx); 928*3e9d6bd4SSunila Sahu if (mod == NULL) { 929*3e9d6bd4SSunila Sahu BN_CTX_end(ctx); 930*3e9d6bd4SSunila Sahu BN_CTX_free(ctx); 931*3e9d6bd4SSunila Sahu return -1; 932*3e9d6bd4SSunila Sahu } 933*3e9d6bd4SSunila Sahu 934*3e9d6bd4SSunila Sahu mod = BN_bin2bn((const unsigned char *) 935*3e9d6bd4SSunila Sahu xfrm->modulus.data, 936*3e9d6bd4SSunila Sahu xfrm->modulus.length, 937*3e9d6bd4SSunila Sahu mod); 938*3e9d6bd4SSunila Sahu asym_session->u.m.ctx = ctx; 939*3e9d6bd4SSunila Sahu asym_session->u.m.modulus = mod; 940*3e9d6bd4SSunila Sahu asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_MODINV; 941*3e9d6bd4SSunila Sahu break; 942*3e9d6bd4SSunila Sahu } 943*3e9d6bd4SSunila Sahu default: 944*3e9d6bd4SSunila Sahu return -1; 945*3e9d6bd4SSunila Sahu } 946*3e9d6bd4SSunila Sahu 947*3e9d6bd4SSunila Sahu return 0; 948*3e9d6bd4SSunila Sahu } 949*3e9d6bd4SSunila Sahu 950*3e9d6bd4SSunila Sahu /** Configure the session from a crypto xform chain */ 951*3e9d6bd4SSunila Sahu static int 952*3e9d6bd4SSunila Sahu openssl_pmd_asym_session_configure(struct rte_cryptodev *dev __rte_unused, 953*3e9d6bd4SSunila Sahu struct rte_crypto_asym_xform *xform, 954*3e9d6bd4SSunila Sahu struct rte_cryptodev_asym_session *sess, 955*3e9d6bd4SSunila Sahu struct rte_mempool *mempool) 956*3e9d6bd4SSunila Sahu { 957*3e9d6bd4SSunila Sahu void *asym_sess_private_data; 958*3e9d6bd4SSunila Sahu int ret; 959*3e9d6bd4SSunila Sahu 960*3e9d6bd4SSunila Sahu if (unlikely(sess == NULL)) { 961*3e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, "invalid asymmetric session struct"); 962*3e9d6bd4SSunila Sahu return -EINVAL; 963*3e9d6bd4SSunila Sahu } 964*3e9d6bd4SSunila Sahu 965*3e9d6bd4SSunila Sahu if (rte_mempool_get(mempool, &asym_sess_private_data)) { 966*3e9d6bd4SSunila Sahu CDEV_LOG_ERR( 967*3e9d6bd4SSunila Sahu "Couldn't get object from session mempool"); 968*3e9d6bd4SSunila Sahu return -ENOMEM; 969*3e9d6bd4SSunila Sahu } 970*3e9d6bd4SSunila Sahu 971*3e9d6bd4SSunila Sahu ret = openssl_set_asym_session_parameters(asym_sess_private_data, 972*3e9d6bd4SSunila Sahu xform); 973*3e9d6bd4SSunila Sahu if (ret != 0) { 974*3e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, "failed configure session parameters"); 975*3e9d6bd4SSunila Sahu 976*3e9d6bd4SSunila Sahu /* Return session to mempool */ 977*3e9d6bd4SSunila Sahu rte_mempool_put(mempool, asym_sess_private_data); 978*3e9d6bd4SSunila Sahu return ret; 979*3e9d6bd4SSunila Sahu } 980*3e9d6bd4SSunila Sahu 981*3e9d6bd4SSunila Sahu set_asym_session_private_data(sess, dev->driver_id, 982*3e9d6bd4SSunila Sahu asym_sess_private_data); 983*3e9d6bd4SSunila Sahu 984*3e9d6bd4SSunila Sahu return 0; 985*3e9d6bd4SSunila Sahu } 9868a9867a6SSlawomir Mrozowicz 9878a9867a6SSlawomir Mrozowicz /** Clear the memory of session so it doesn't leave key material behind */ 9888a9867a6SSlawomir Mrozowicz static void 989012c5076SPablo de Lara openssl_pmd_sym_session_clear(struct rte_cryptodev *dev, 990b3bbd9e5SSlawomir Mrozowicz struct rte_cryptodev_sym_session *sess) 9918a9867a6SSlawomir Mrozowicz { 992b3bbd9e5SSlawomir Mrozowicz uint8_t index = dev->driver_id; 993012c5076SPablo de Lara void *sess_priv = get_sym_session_private_data(sess, index); 994b3bbd9e5SSlawomir Mrozowicz 995b3bbd9e5SSlawomir Mrozowicz /* Zero out the whole structure */ 996b3bbd9e5SSlawomir Mrozowicz if (sess_priv) { 997b3bbd9e5SSlawomir Mrozowicz openssl_reset_session(sess_priv); 998b3bbd9e5SSlawomir Mrozowicz memset(sess_priv, 0, sizeof(struct openssl_session)); 999b3bbd9e5SSlawomir Mrozowicz struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); 1000012c5076SPablo de Lara set_sym_session_private_data(sess, index, NULL); 1001b3bbd9e5SSlawomir Mrozowicz rte_mempool_put(sess_mp, sess_priv); 10028a9867a6SSlawomir Mrozowicz } 10038a9867a6SSlawomir Mrozowicz } 10048a9867a6SSlawomir Mrozowicz 1005*3e9d6bd4SSunila Sahu static void openssl_reset_asym_session(struct openssl_asym_session *sess) 1006*3e9d6bd4SSunila Sahu { 1007*3e9d6bd4SSunila Sahu switch (sess->xfrm_type) { 1008*3e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_RSA: 1009*3e9d6bd4SSunila Sahu if (sess->u.r.rsa) 1010*3e9d6bd4SSunila Sahu RSA_free(sess->u.r.rsa); 1011*3e9d6bd4SSunila Sahu break; 1012*3e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_MODEX: 1013*3e9d6bd4SSunila Sahu if (sess->u.e.ctx) { 1014*3e9d6bd4SSunila Sahu BN_CTX_end(sess->u.e.ctx); 1015*3e9d6bd4SSunila Sahu BN_CTX_free(sess->u.e.ctx); 1016*3e9d6bd4SSunila Sahu } 1017*3e9d6bd4SSunila Sahu break; 1018*3e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_MODINV: 1019*3e9d6bd4SSunila Sahu if (sess->u.m.ctx) { 1020*3e9d6bd4SSunila Sahu BN_CTX_end(sess->u.m.ctx); 1021*3e9d6bd4SSunila Sahu BN_CTX_free(sess->u.m.ctx); 1022*3e9d6bd4SSunila Sahu } 1023*3e9d6bd4SSunila Sahu break; 1024*3e9d6bd4SSunila Sahu default: 1025*3e9d6bd4SSunila Sahu break; 1026*3e9d6bd4SSunila Sahu } 1027*3e9d6bd4SSunila Sahu } 1028*3e9d6bd4SSunila Sahu 1029*3e9d6bd4SSunila Sahu /** Clear the memory of asymmetric session 1030*3e9d6bd4SSunila Sahu * so it doesn't leave key material behind 1031*3e9d6bd4SSunila Sahu */ 1032*3e9d6bd4SSunila Sahu static void 1033*3e9d6bd4SSunila Sahu openssl_pmd_asym_session_clear(struct rte_cryptodev *dev, 1034*3e9d6bd4SSunila Sahu struct rte_cryptodev_asym_session *sess) 1035*3e9d6bd4SSunila Sahu { 1036*3e9d6bd4SSunila Sahu uint8_t index = dev->driver_id; 1037*3e9d6bd4SSunila Sahu void *sess_priv = get_asym_session_private_data(sess, index); 1038*3e9d6bd4SSunila Sahu 1039*3e9d6bd4SSunila Sahu /* Zero out the whole structure */ 1040*3e9d6bd4SSunila Sahu if (sess_priv) { 1041*3e9d6bd4SSunila Sahu openssl_reset_asym_session(sess_priv); 1042*3e9d6bd4SSunila Sahu memset(sess_priv, 0, sizeof(struct openssl_asym_session)); 1043*3e9d6bd4SSunila Sahu struct rte_mempool *sess_mp = rte_mempool_from_obj(sess_priv); 1044*3e9d6bd4SSunila Sahu set_asym_session_private_data(sess, index, NULL); 1045*3e9d6bd4SSunila Sahu rte_mempool_put(sess_mp, sess_priv); 1046*3e9d6bd4SSunila Sahu } 1047*3e9d6bd4SSunila Sahu } 1048*3e9d6bd4SSunila Sahu 10498a9867a6SSlawomir Mrozowicz struct rte_cryptodev_ops openssl_pmd_ops = { 10508a9867a6SSlawomir Mrozowicz .dev_configure = openssl_pmd_config, 10518a9867a6SSlawomir Mrozowicz .dev_start = openssl_pmd_start, 10528a9867a6SSlawomir Mrozowicz .dev_stop = openssl_pmd_stop, 10538a9867a6SSlawomir Mrozowicz .dev_close = openssl_pmd_close, 10548a9867a6SSlawomir Mrozowicz 10558a9867a6SSlawomir Mrozowicz .stats_get = openssl_pmd_stats_get, 10568a9867a6SSlawomir Mrozowicz .stats_reset = openssl_pmd_stats_reset, 10578a9867a6SSlawomir Mrozowicz 10588a9867a6SSlawomir Mrozowicz .dev_infos_get = openssl_pmd_info_get, 10598a9867a6SSlawomir Mrozowicz 10608a9867a6SSlawomir Mrozowicz .queue_pair_setup = openssl_pmd_qp_setup, 10618a9867a6SSlawomir Mrozowicz .queue_pair_release = openssl_pmd_qp_release, 10628a9867a6SSlawomir Mrozowicz .queue_pair_count = openssl_pmd_qp_count, 10638a9867a6SSlawomir Mrozowicz 1064012c5076SPablo de Lara .sym_session_get_size = openssl_pmd_sym_session_get_size, 1065*3e9d6bd4SSunila Sahu .asym_session_get_size = openssl_pmd_asym_session_get_size, 1066012c5076SPablo de Lara .sym_session_configure = openssl_pmd_sym_session_configure, 1067*3e9d6bd4SSunila Sahu .asym_session_configure = openssl_pmd_asym_session_configure, 1068*3e9d6bd4SSunila Sahu .sym_session_clear = openssl_pmd_sym_session_clear, 1069*3e9d6bd4SSunila Sahu .asym_session_clear = openssl_pmd_asym_session_clear 10708a9867a6SSlawomir Mrozowicz }; 10718a9867a6SSlawomir Mrozowicz 10728a9867a6SSlawomir Mrozowicz struct rte_cryptodev_ops *rte_openssl_pmd_ops = &openssl_pmd_ops; 1073