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> 9af668035SAkhil Goyal #include <cryptodev_pmd.h> 108a9867a6SSlawomir Mrozowicz 11b28f28aeSDharmik Thakkar #include "openssl_pmd_private.h" 123e9d6bd4SSunila Sahu #include "compat.h" 13d7bd42f6SKai Ji #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 14d7bd42f6SKai Ji #include <openssl/provider.h> 15d7bd42f6SKai Ji #include <openssl/core_names.h> 16d7bd42f6SKai Ji #include <openssl/param_build.h> 17d7bd42f6SKai Ji #endif 188a9867a6SSlawomir Mrozowicz 198a9867a6SSlawomir Mrozowicz static const struct rte_cryptodev_capabilities openssl_pmd_capabilities[] = { 208a9867a6SSlawomir Mrozowicz { /* MD5 HMAC */ 218a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 228a9867a6SSlawomir Mrozowicz {.sym = { 238a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 248a9867a6SSlawomir Mrozowicz {.auth = { 258a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_MD5_HMAC, 268a9867a6SSlawomir Mrozowicz .block_size = 64, 278a9867a6SSlawomir Mrozowicz .key_size = { 28e5e7bc71SPablo de Lara .min = 1, 298a9867a6SSlawomir Mrozowicz .max = 64, 30e5e7bc71SPablo de Lara .increment = 1 318a9867a6SSlawomir Mrozowicz }, 328a9867a6SSlawomir Mrozowicz .digest_size = { 33c3d22a65SDmitry Eremin-Solenikov .min = 1, 348a9867a6SSlawomir Mrozowicz .max = 16, 35c3d22a65SDmitry Eremin-Solenikov .increment = 1 368a9867a6SSlawomir Mrozowicz }, 37acf86169SPablo de Lara .iv_size = { 0 } 388a9867a6SSlawomir Mrozowicz }, } 398a9867a6SSlawomir Mrozowicz }, } 408a9867a6SSlawomir Mrozowicz }, 418a9867a6SSlawomir Mrozowicz { /* MD5 */ 428a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 438a9867a6SSlawomir Mrozowicz {.sym = { 448a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 458a9867a6SSlawomir Mrozowicz {.auth = { 468a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_MD5, 478a9867a6SSlawomir Mrozowicz .block_size = 64, 488a9867a6SSlawomir Mrozowicz .key_size = { 498a9867a6SSlawomir Mrozowicz .min = 0, 508a9867a6SSlawomir Mrozowicz .max = 0, 518a9867a6SSlawomir Mrozowicz .increment = 0 528a9867a6SSlawomir Mrozowicz }, 538a9867a6SSlawomir Mrozowicz .digest_size = { 548a9867a6SSlawomir Mrozowicz .min = 16, 558a9867a6SSlawomir Mrozowicz .max = 16, 568a9867a6SSlawomir Mrozowicz .increment = 0 578a9867a6SSlawomir Mrozowicz }, 58acf86169SPablo de Lara .iv_size = { 0 } 598a9867a6SSlawomir Mrozowicz }, } 608a9867a6SSlawomir Mrozowicz }, } 618a9867a6SSlawomir Mrozowicz }, 628a9867a6SSlawomir Mrozowicz { /* SHA1 HMAC */ 638a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 648a9867a6SSlawomir Mrozowicz {.sym = { 658a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 668a9867a6SSlawomir Mrozowicz {.auth = { 678a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA1_HMAC, 688a9867a6SSlawomir Mrozowicz .block_size = 64, 698a9867a6SSlawomir Mrozowicz .key_size = { 70e5e7bc71SPablo de Lara .min = 1, 718a9867a6SSlawomir Mrozowicz .max = 64, 72e5e7bc71SPablo de Lara .increment = 1 738a9867a6SSlawomir Mrozowicz }, 748a9867a6SSlawomir Mrozowicz .digest_size = { 75c3d22a65SDmitry Eremin-Solenikov .min = 1, 768a9867a6SSlawomir Mrozowicz .max = 20, 77c3d22a65SDmitry Eremin-Solenikov .increment = 1 788a9867a6SSlawomir Mrozowicz }, 79acf86169SPablo de Lara .iv_size = { 0 } 808a9867a6SSlawomir Mrozowicz }, } 818a9867a6SSlawomir Mrozowicz }, } 828a9867a6SSlawomir Mrozowicz }, 838a9867a6SSlawomir Mrozowicz { /* SHA1 */ 848a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 858a9867a6SSlawomir Mrozowicz {.sym = { 868a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 878a9867a6SSlawomir Mrozowicz {.auth = { 888a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA1, 898a9867a6SSlawomir Mrozowicz .block_size = 64, 908a9867a6SSlawomir Mrozowicz .key_size = { 918a9867a6SSlawomir Mrozowicz .min = 0, 928a9867a6SSlawomir Mrozowicz .max = 0, 938a9867a6SSlawomir Mrozowicz .increment = 0 948a9867a6SSlawomir Mrozowicz }, 958a9867a6SSlawomir Mrozowicz .digest_size = { 968a9867a6SSlawomir Mrozowicz .min = 20, 978a9867a6SSlawomir Mrozowicz .max = 20, 988a9867a6SSlawomir Mrozowicz .increment = 0 998a9867a6SSlawomir Mrozowicz }, 100acf86169SPablo de Lara .iv_size = { 0 } 1018a9867a6SSlawomir Mrozowicz }, } 1028a9867a6SSlawomir Mrozowicz }, } 1038a9867a6SSlawomir Mrozowicz }, 1048a9867a6SSlawomir Mrozowicz { /* SHA224 HMAC */ 1058a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1068a9867a6SSlawomir Mrozowicz {.sym = { 1078a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1088a9867a6SSlawomir Mrozowicz {.auth = { 1098a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA224_HMAC, 1108a9867a6SSlawomir Mrozowicz .block_size = 64, 1118a9867a6SSlawomir Mrozowicz .key_size = { 112e5e7bc71SPablo de Lara .min = 1, 1138a9867a6SSlawomir Mrozowicz .max = 64, 114e5e7bc71SPablo de Lara .increment = 1 1158a9867a6SSlawomir Mrozowicz }, 1168a9867a6SSlawomir Mrozowicz .digest_size = { 117c3d22a65SDmitry Eremin-Solenikov .min = 1, 1188a9867a6SSlawomir Mrozowicz .max = 28, 119c3d22a65SDmitry Eremin-Solenikov .increment = 1 1208a9867a6SSlawomir Mrozowicz }, 121acf86169SPablo de Lara .iv_size = { 0 } 1228a9867a6SSlawomir Mrozowicz }, } 1238a9867a6SSlawomir Mrozowicz }, } 1248a9867a6SSlawomir Mrozowicz }, 1258a9867a6SSlawomir Mrozowicz { /* SHA224 */ 1268a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1278a9867a6SSlawomir Mrozowicz {.sym = { 1288a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1298a9867a6SSlawomir Mrozowicz {.auth = { 1308a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA224, 1318a9867a6SSlawomir Mrozowicz .block_size = 64, 1328a9867a6SSlawomir Mrozowicz .key_size = { 1338a9867a6SSlawomir Mrozowicz .min = 0, 1348a9867a6SSlawomir Mrozowicz .max = 0, 1358a9867a6SSlawomir Mrozowicz .increment = 0 1368a9867a6SSlawomir Mrozowicz }, 1378a9867a6SSlawomir Mrozowicz .digest_size = { 138c3d22a65SDmitry Eremin-Solenikov .min = 1, 1398a9867a6SSlawomir Mrozowicz .max = 28, 140c3d22a65SDmitry Eremin-Solenikov .increment = 1 1418a9867a6SSlawomir Mrozowicz }, 142acf86169SPablo de Lara .iv_size = { 0 } 1438a9867a6SSlawomir Mrozowicz }, } 1448a9867a6SSlawomir Mrozowicz }, } 1458a9867a6SSlawomir Mrozowicz }, 1468a9867a6SSlawomir Mrozowicz { /* SHA256 HMAC */ 1478a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1488a9867a6SSlawomir Mrozowicz {.sym = { 1498a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1508a9867a6SSlawomir Mrozowicz {.auth = { 1518a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA256_HMAC, 1528a9867a6SSlawomir Mrozowicz .block_size = 64, 1538a9867a6SSlawomir Mrozowicz .key_size = { 154e5e7bc71SPablo de Lara .min = 1, 1558a9867a6SSlawomir Mrozowicz .max = 64, 156e5e7bc71SPablo de Lara .increment = 1 1578a9867a6SSlawomir Mrozowicz }, 1588a9867a6SSlawomir Mrozowicz .digest_size = { 159c3d22a65SDmitry Eremin-Solenikov .min = 1, 1608a9867a6SSlawomir Mrozowicz .max = 32, 161c3d22a65SDmitry Eremin-Solenikov .increment = 1 1628a9867a6SSlawomir Mrozowicz }, 163acf86169SPablo de Lara .iv_size = { 0 } 1648a9867a6SSlawomir Mrozowicz }, } 1658a9867a6SSlawomir Mrozowicz }, } 1668a9867a6SSlawomir Mrozowicz }, 1678a9867a6SSlawomir Mrozowicz { /* SHA256 */ 1688a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1698a9867a6SSlawomir Mrozowicz {.sym = { 1708a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1718a9867a6SSlawomir Mrozowicz {.auth = { 1728a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA256, 1738a9867a6SSlawomir Mrozowicz .block_size = 64, 1748a9867a6SSlawomir Mrozowicz .key_size = { 1758a9867a6SSlawomir Mrozowicz .min = 0, 1768a9867a6SSlawomir Mrozowicz .max = 0, 1778a9867a6SSlawomir Mrozowicz .increment = 0 1788a9867a6SSlawomir Mrozowicz }, 1798a9867a6SSlawomir Mrozowicz .digest_size = { 1808a9867a6SSlawomir Mrozowicz .min = 32, 1818a9867a6SSlawomir Mrozowicz .max = 32, 1828a9867a6SSlawomir Mrozowicz .increment = 0 1838a9867a6SSlawomir Mrozowicz }, 184acf86169SPablo de Lara .iv_size = { 0 } 1858a9867a6SSlawomir Mrozowicz }, } 1868a9867a6SSlawomir Mrozowicz }, } 1878a9867a6SSlawomir Mrozowicz }, 1888a9867a6SSlawomir Mrozowicz { /* SHA384 HMAC */ 1898a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 1908a9867a6SSlawomir Mrozowicz {.sym = { 1918a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 1928a9867a6SSlawomir Mrozowicz {.auth = { 1938a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA384_HMAC, 1948a9867a6SSlawomir Mrozowicz .block_size = 128, 1958a9867a6SSlawomir Mrozowicz .key_size = { 196e5e7bc71SPablo de Lara .min = 1, 1978a9867a6SSlawomir Mrozowicz .max = 128, 198e5e7bc71SPablo de Lara .increment = 1 1998a9867a6SSlawomir Mrozowicz }, 2008a9867a6SSlawomir Mrozowicz .digest_size = { 201c3d22a65SDmitry Eremin-Solenikov .min = 1, 2028a9867a6SSlawomir Mrozowicz .max = 48, 203c3d22a65SDmitry Eremin-Solenikov .increment = 1 2048a9867a6SSlawomir Mrozowicz }, 205acf86169SPablo de Lara .iv_size = { 0 } 2068a9867a6SSlawomir Mrozowicz }, } 2078a9867a6SSlawomir Mrozowicz }, } 2088a9867a6SSlawomir Mrozowicz }, 2098a9867a6SSlawomir Mrozowicz { /* SHA384 */ 2108a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2118a9867a6SSlawomir Mrozowicz {.sym = { 2128a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 2138a9867a6SSlawomir Mrozowicz {.auth = { 2148a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA384, 2158a9867a6SSlawomir Mrozowicz .block_size = 128, 2168a9867a6SSlawomir Mrozowicz .key_size = { 2178a9867a6SSlawomir Mrozowicz .min = 0, 2188a9867a6SSlawomir Mrozowicz .max = 0, 2198a9867a6SSlawomir Mrozowicz .increment = 0 2208a9867a6SSlawomir Mrozowicz }, 2218a9867a6SSlawomir Mrozowicz .digest_size = { 2228a9867a6SSlawomir Mrozowicz .min = 48, 2238a9867a6SSlawomir Mrozowicz .max = 48, 2248a9867a6SSlawomir Mrozowicz .increment = 0 2258a9867a6SSlawomir Mrozowicz }, 226acf86169SPablo de Lara .iv_size = { 0 } 2278a9867a6SSlawomir Mrozowicz }, } 2288a9867a6SSlawomir Mrozowicz }, } 2298a9867a6SSlawomir Mrozowicz }, 2308a9867a6SSlawomir Mrozowicz { /* SHA512 HMAC */ 2318a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2328a9867a6SSlawomir Mrozowicz {.sym = { 2338a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 2348a9867a6SSlawomir Mrozowicz {.auth = { 2358a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA512_HMAC, 2368a9867a6SSlawomir Mrozowicz .block_size = 128, 2378a9867a6SSlawomir Mrozowicz .key_size = { 238e5e7bc71SPablo de Lara .min = 1, 2398a9867a6SSlawomir Mrozowicz .max = 128, 240e5e7bc71SPablo de Lara .increment = 1 2418a9867a6SSlawomir Mrozowicz }, 2428a9867a6SSlawomir Mrozowicz .digest_size = { 243c3d22a65SDmitry Eremin-Solenikov .min = 1, 2448a9867a6SSlawomir Mrozowicz .max = 64, 245c3d22a65SDmitry Eremin-Solenikov .increment = 1 2468a9867a6SSlawomir Mrozowicz }, 247acf86169SPablo de Lara .iv_size = { 0 } 2488a9867a6SSlawomir Mrozowicz }, } 2498a9867a6SSlawomir Mrozowicz }, } 2508a9867a6SSlawomir Mrozowicz }, 2518a9867a6SSlawomir Mrozowicz { /* SHA512 */ 2528a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2538a9867a6SSlawomir Mrozowicz {.sym = { 2548a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 2558a9867a6SSlawomir Mrozowicz {.auth = { 2568a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_SHA512, 2578a9867a6SSlawomir Mrozowicz .block_size = 128, 2588a9867a6SSlawomir Mrozowicz .key_size = { 2598a9867a6SSlawomir Mrozowicz .min = 0, 2608a9867a6SSlawomir Mrozowicz .max = 0, 2618a9867a6SSlawomir Mrozowicz .increment = 0 2628a9867a6SSlawomir Mrozowicz }, 2638a9867a6SSlawomir Mrozowicz .digest_size = { 2648a9867a6SSlawomir Mrozowicz .min = 64, 2658a9867a6SSlawomir Mrozowicz .max = 64, 2668a9867a6SSlawomir Mrozowicz .increment = 0 2678a9867a6SSlawomir Mrozowicz }, 268acf86169SPablo de Lara .iv_size = { 0 } 2698a9867a6SSlawomir Mrozowicz }, } 2708a9867a6SSlawomir Mrozowicz }, } 2718a9867a6SSlawomir Mrozowicz }, 2728a9867a6SSlawomir Mrozowicz { /* AES CBC */ 2738a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2748a9867a6SSlawomir Mrozowicz {.sym = { 2758a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 2768a9867a6SSlawomir Mrozowicz {.cipher = { 2778a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_AES_CBC, 2788a9867a6SSlawomir Mrozowicz .block_size = 16, 2798a9867a6SSlawomir Mrozowicz .key_size = { 2808a9867a6SSlawomir Mrozowicz .min = 16, 2818a9867a6SSlawomir Mrozowicz .max = 32, 2828a9867a6SSlawomir Mrozowicz .increment = 8 2838a9867a6SSlawomir Mrozowicz }, 2848a9867a6SSlawomir Mrozowicz .iv_size = { 2858a9867a6SSlawomir Mrozowicz .min = 16, 2868a9867a6SSlawomir Mrozowicz .max = 16, 2878a9867a6SSlawomir Mrozowicz .increment = 0 2888a9867a6SSlawomir Mrozowicz } 2898a9867a6SSlawomir Mrozowicz }, } 2908a9867a6SSlawomir Mrozowicz }, } 2918a9867a6SSlawomir Mrozowicz }, 2928a9867a6SSlawomir Mrozowicz { /* AES CTR */ 2938a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 2948a9867a6SSlawomir Mrozowicz {.sym = { 2958a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 2968a9867a6SSlawomir Mrozowicz {.cipher = { 2978a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_AES_CTR, 2988a9867a6SSlawomir Mrozowicz .block_size = 16, 2998a9867a6SSlawomir Mrozowicz .key_size = { 3008a9867a6SSlawomir Mrozowicz .min = 16, 3018a9867a6SSlawomir Mrozowicz .max = 32, 3028a9867a6SSlawomir Mrozowicz .increment = 8 3038a9867a6SSlawomir Mrozowicz }, 3048a9867a6SSlawomir Mrozowicz .iv_size = { 3058a9867a6SSlawomir Mrozowicz .min = 16, 3068a9867a6SSlawomir Mrozowicz .max = 16, 3078a9867a6SSlawomir Mrozowicz .increment = 0 3088a9867a6SSlawomir Mrozowicz } 3098a9867a6SSlawomir Mrozowicz }, } 3108a9867a6SSlawomir Mrozowicz }, } 3118a9867a6SSlawomir Mrozowicz }, 312b79e4c00SPablo de Lara { /* AES GCM */ 3138a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3148a9867a6SSlawomir Mrozowicz {.sym = { 315b79e4c00SPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD, 316b79e4c00SPablo de Lara {.aead = { 317b79e4c00SPablo de Lara .algo = RTE_CRYPTO_AEAD_AES_GCM, 3188a9867a6SSlawomir Mrozowicz .block_size = 16, 3198a9867a6SSlawomir Mrozowicz .key_size = { 3208a9867a6SSlawomir Mrozowicz .min = 16, 3218a9867a6SSlawomir Mrozowicz .max = 32, 3228a9867a6SSlawomir Mrozowicz .increment = 8 3238a9867a6SSlawomir Mrozowicz }, 3248a9867a6SSlawomir Mrozowicz .digest_size = { 3258a9867a6SSlawomir Mrozowicz .min = 16, 3268a9867a6SSlawomir Mrozowicz .max = 16, 3278a9867a6SSlawomir Mrozowicz .increment = 0 3288a9867a6SSlawomir Mrozowicz }, 3298a9867a6SSlawomir Mrozowicz .aad_size = { 3300625598aSArek Kusztal .min = 0, 3310625598aSArek Kusztal .max = 65535, 3320625598aSArek Kusztal .increment = 1 333acf86169SPablo de Lara }, 3348a9867a6SSlawomir Mrozowicz .iv_size = { 3358a9867a6SSlawomir Mrozowicz .min = 12, 3368a9867a6SSlawomir Mrozowicz .max = 16, 3378a9867a6SSlawomir Mrozowicz .increment = 4 338b79e4c00SPablo de Lara }, 3398a9867a6SSlawomir Mrozowicz }, } 3408a9867a6SSlawomir Mrozowicz }, } 3418a9867a6SSlawomir Mrozowicz }, 3421a4998dcSPablo de Lara { /* AES CCM */ 3431a4998dcSPablo de Lara .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3441a4998dcSPablo de Lara {.sym = { 3451a4998dcSPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_AEAD, 3461a4998dcSPablo de Lara {.aead = { 3471a4998dcSPablo de Lara .algo = RTE_CRYPTO_AEAD_AES_CCM, 3481a4998dcSPablo de Lara .block_size = 16, 3491a4998dcSPablo de Lara .key_size = { 3501a4998dcSPablo de Lara .min = 16, 3511a4998dcSPablo de Lara .max = 32, 3521a4998dcSPablo de Lara .increment = 8 3531a4998dcSPablo de Lara }, 3541a4998dcSPablo de Lara .digest_size = { 3551a4998dcSPablo de Lara .min = 4, 3561a4998dcSPablo de Lara .max = 16, 3571a4998dcSPablo de Lara .increment = 2 3581a4998dcSPablo de Lara }, 3591a4998dcSPablo de Lara .aad_size = { 3601a4998dcSPablo de Lara .min = 0, 3611a4998dcSPablo de Lara .max = 65535, 3621a4998dcSPablo de Lara .increment = 1 3631a4998dcSPablo de Lara }, 3641a4998dcSPablo de Lara .iv_size = { 3651a4998dcSPablo de Lara .min = 7, 3661a4998dcSPablo de Lara .max = 13, 3671a4998dcSPablo de Lara .increment = 1 3681a4998dcSPablo de Lara }, 3691a4998dcSPablo de Lara }, } 3701a4998dcSPablo de Lara }, } 3711a4998dcSPablo de Lara }, 3728a9867a6SSlawomir Mrozowicz { /* AES GMAC (AUTH) */ 3738a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3748a9867a6SSlawomir Mrozowicz {.sym = { 3758a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 3768a9867a6SSlawomir Mrozowicz {.auth = { 3778a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_AUTH_AES_GMAC, 3788a9867a6SSlawomir Mrozowicz .block_size = 16, 3798a9867a6SSlawomir Mrozowicz .key_size = { 3808a9867a6SSlawomir Mrozowicz .min = 16, 3818a9867a6SSlawomir Mrozowicz .max = 32, 3828a9867a6SSlawomir Mrozowicz .increment = 8 3838a9867a6SSlawomir Mrozowicz }, 3848a9867a6SSlawomir Mrozowicz .digest_size = { 3858a9867a6SSlawomir Mrozowicz .min = 16, 3868a9867a6SSlawomir Mrozowicz .max = 16, 3878a9867a6SSlawomir Mrozowicz .increment = 0 3888a9867a6SSlawomir Mrozowicz }, 389e32e4fa8SPablo de Lara .iv_size = { 390e32e4fa8SPablo de Lara .min = 12, 391e32e4fa8SPablo de Lara .max = 16, 3928a9867a6SSlawomir Mrozowicz .increment = 4 393e32e4fa8SPablo de Lara } 3948a9867a6SSlawomir Mrozowicz }, } 3958a9867a6SSlawomir Mrozowicz }, } 3968a9867a6SSlawomir Mrozowicz }, 3972b9c693fSAshwin Sekhar T K { /* AES CMAC (AUTH) */ 3982b9c693fSAshwin Sekhar T K .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 3992b9c693fSAshwin Sekhar T K {.sym = { 4002b9c693fSAshwin Sekhar T K .xform_type = RTE_CRYPTO_SYM_XFORM_AUTH, 4012b9c693fSAshwin Sekhar T K {.auth = { 4022b9c693fSAshwin Sekhar T K .algo = RTE_CRYPTO_AUTH_AES_CMAC, 4032b9c693fSAshwin Sekhar T K .block_size = 16, 4042b9c693fSAshwin Sekhar T K .key_size = { 4052b9c693fSAshwin Sekhar T K .min = 16, 4062b9c693fSAshwin Sekhar T K .max = 32, 4072b9c693fSAshwin Sekhar T K .increment = 8 4082b9c693fSAshwin Sekhar T K }, 4092b9c693fSAshwin Sekhar T K .digest_size = { 4102b9c693fSAshwin Sekhar T K .min = 4, 4112b9c693fSAshwin Sekhar T K .max = 16, 4122b9c693fSAshwin Sekhar T K .increment = 4 4132b9c693fSAshwin Sekhar T K }, 4142b9c693fSAshwin Sekhar T K }, } 4152b9c693fSAshwin Sekhar T K }, } 4162b9c693fSAshwin Sekhar T K }, 4178a9867a6SSlawomir Mrozowicz { /* 3DES CBC */ 4188a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 4198a9867a6SSlawomir Mrozowicz {.sym = { 4208a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 4218a9867a6SSlawomir Mrozowicz {.cipher = { 4228a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_3DES_CBC, 4238a9867a6SSlawomir Mrozowicz .block_size = 8, 4248a9867a6SSlawomir Mrozowicz .key_size = { 4259607e37eSMarko Kovacevic .min = 8, 4268a9867a6SSlawomir Mrozowicz .max = 24, 4278a9867a6SSlawomir Mrozowicz .increment = 8 4288a9867a6SSlawomir Mrozowicz }, 4298a9867a6SSlawomir Mrozowicz .iv_size = { 4308a9867a6SSlawomir Mrozowicz .min = 8, 4318a9867a6SSlawomir Mrozowicz .max = 8, 4328a9867a6SSlawomir Mrozowicz .increment = 0 4338a9867a6SSlawomir Mrozowicz } 4348a9867a6SSlawomir Mrozowicz }, } 4358a9867a6SSlawomir Mrozowicz }, } 4368a9867a6SSlawomir Mrozowicz }, 4378a9867a6SSlawomir Mrozowicz { /* 3DES CTR */ 4388a9867a6SSlawomir Mrozowicz .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 4398a9867a6SSlawomir Mrozowicz {.sym = { 4408a9867a6SSlawomir Mrozowicz .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 4418a9867a6SSlawomir Mrozowicz {.cipher = { 4428a9867a6SSlawomir Mrozowicz .algo = RTE_CRYPTO_CIPHER_3DES_CTR, 4438a9867a6SSlawomir Mrozowicz .block_size = 8, 4448a9867a6SSlawomir Mrozowicz .key_size = { 4458a9867a6SSlawomir Mrozowicz .min = 16, 4468a9867a6SSlawomir Mrozowicz .max = 24, 4478a9867a6SSlawomir Mrozowicz .increment = 8 4488a9867a6SSlawomir Mrozowicz }, 4498a9867a6SSlawomir Mrozowicz .iv_size = { 4508a9867a6SSlawomir Mrozowicz .min = 8, 4518a9867a6SSlawomir Mrozowicz .max = 8, 4528a9867a6SSlawomir Mrozowicz .increment = 0 4538a9867a6SSlawomir Mrozowicz } 4548a9867a6SSlawomir Mrozowicz }, } 4558a9867a6SSlawomir Mrozowicz }, } 4568a9867a6SSlawomir Mrozowicz }, 457c1734807SPablo de Lara { /* DES CBC */ 458c1734807SPablo de Lara .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 459c1734807SPablo de Lara {.sym = { 460c1734807SPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 461c1734807SPablo de Lara {.cipher = { 462c1734807SPablo de Lara .algo = RTE_CRYPTO_CIPHER_DES_CBC, 463c1734807SPablo de Lara .block_size = 8, 464c1734807SPablo de Lara .key_size = { 465c1734807SPablo de Lara .min = 8, 466c1734807SPablo de Lara .max = 8, 467c1734807SPablo de Lara .increment = 0 468c1734807SPablo de Lara }, 469c1734807SPablo de Lara .iv_size = { 470c1734807SPablo de Lara .min = 8, 471c1734807SPablo de Lara .max = 8, 472c1734807SPablo de Lara .increment = 0 473c1734807SPablo de Lara } 474c1734807SPablo de Lara }, } 475c1734807SPablo de Lara }, } 476c1734807SPablo de Lara }, 4771dee7bc7SPablo de Lara { /* DES DOCSIS BPI */ 4781dee7bc7SPablo de Lara .op = RTE_CRYPTO_OP_TYPE_SYMMETRIC, 4791dee7bc7SPablo de Lara {.sym = { 4801dee7bc7SPablo de Lara .xform_type = RTE_CRYPTO_SYM_XFORM_CIPHER, 4811dee7bc7SPablo de Lara {.cipher = { 4821dee7bc7SPablo de Lara .algo = RTE_CRYPTO_CIPHER_DES_DOCSISBPI, 4831dee7bc7SPablo de Lara .block_size = 8, 4841dee7bc7SPablo de Lara .key_size = { 4851dee7bc7SPablo de Lara .min = 8, 4861dee7bc7SPablo de Lara .max = 8, 4871dee7bc7SPablo de Lara .increment = 0 4881dee7bc7SPablo de Lara }, 4891dee7bc7SPablo de Lara .iv_size = { 4901dee7bc7SPablo de Lara .min = 8, 4911dee7bc7SPablo de Lara .max = 8, 4921dee7bc7SPablo de Lara .increment = 0 4931dee7bc7SPablo de Lara } 4941dee7bc7SPablo de Lara }, } 4951dee7bc7SPablo de Lara }, } 4961dee7bc7SPablo de Lara }, 4973e9d6bd4SSunila Sahu { /* RSA */ 4983e9d6bd4SSunila Sahu .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 4993e9d6bd4SSunila Sahu {.asym = { 5003e9d6bd4SSunila Sahu .xform_capa = { 5013e9d6bd4SSunila Sahu .xform_type = RTE_CRYPTO_ASYM_XFORM_RSA, 5023e9d6bd4SSunila Sahu .op_types = ((1 << RTE_CRYPTO_ASYM_OP_SIGN) | 5033e9d6bd4SSunila Sahu (1 << RTE_CRYPTO_ASYM_OP_VERIFY) | 5043e9d6bd4SSunila Sahu (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) | 5053e9d6bd4SSunila Sahu (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)), 5063e9d6bd4SSunila Sahu { 5073e9d6bd4SSunila Sahu .modlen = { 5083e9d6bd4SSunila Sahu /* min length is based on openssl rsa keygen */ 5093e9d6bd4SSunila Sahu .min = 30, 5103e9d6bd4SSunila Sahu /* value 0 symbolizes no limit on max length */ 5113e9d6bd4SSunila Sahu .max = 0, 5123e9d6bd4SSunila Sahu .increment = 1 5133e9d6bd4SSunila Sahu }, } 5143e9d6bd4SSunila Sahu } 5153e9d6bd4SSunila Sahu }, 5163e9d6bd4SSunila Sahu } 5173e9d6bd4SSunila Sahu }, 5183e9d6bd4SSunila Sahu { /* modexp */ 5193e9d6bd4SSunila Sahu .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 5203e9d6bd4SSunila Sahu {.asym = { 5213e9d6bd4SSunila Sahu .xform_capa = { 5223e9d6bd4SSunila Sahu .xform_type = RTE_CRYPTO_ASYM_XFORM_MODEX, 5233e9d6bd4SSunila Sahu .op_types = 0, 5243e9d6bd4SSunila Sahu { 5253e9d6bd4SSunila Sahu .modlen = { 5263e9d6bd4SSunila Sahu /* value 0 symbolizes no limit on min length */ 5273e9d6bd4SSunila Sahu .min = 0, 5283e9d6bd4SSunila Sahu /* value 0 symbolizes no limit on max length */ 5293e9d6bd4SSunila Sahu .max = 0, 5303e9d6bd4SSunila Sahu .increment = 1 5313e9d6bd4SSunila Sahu }, } 5323e9d6bd4SSunila Sahu } 5333e9d6bd4SSunila Sahu }, 5343e9d6bd4SSunila Sahu } 5353e9d6bd4SSunila Sahu }, 5363e9d6bd4SSunila Sahu { /* modinv */ 5373e9d6bd4SSunila Sahu .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 5383e9d6bd4SSunila Sahu {.asym = { 5393e9d6bd4SSunila Sahu .xform_capa = { 5403e9d6bd4SSunila Sahu .xform_type = RTE_CRYPTO_ASYM_XFORM_MODINV, 5413e9d6bd4SSunila Sahu .op_types = 0, 5423e9d6bd4SSunila Sahu { 5433e9d6bd4SSunila Sahu .modlen = { 5443e9d6bd4SSunila Sahu /* value 0 symbolizes no limit on min length */ 5453e9d6bd4SSunila Sahu .min = 0, 5463e9d6bd4SSunila Sahu /* value 0 symbolizes no limit on max length */ 5473e9d6bd4SSunila Sahu .max = 0, 5483e9d6bd4SSunila Sahu .increment = 1 5493e9d6bd4SSunila Sahu }, } 5503e9d6bd4SSunila Sahu } 5513e9d6bd4SSunila Sahu }, 5523e9d6bd4SSunila Sahu } 5533e9d6bd4SSunila Sahu }, 554ac42813aSSunila Sahu { /* dh */ 555ac42813aSSunila Sahu .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 556ac42813aSSunila Sahu {.asym = { 557ac42813aSSunila Sahu .xform_capa = { 558ac42813aSSunila Sahu .xform_type = RTE_CRYPTO_ASYM_XFORM_DH, 559ac42813aSSunila Sahu .op_types = 5605fa1fb29SArek Kusztal ((1<<RTE_CRYPTO_ASYM_KE_PRIV_KEY_GENERATE) | 5615fa1fb29SArek Kusztal (1 << RTE_CRYPTO_ASYM_KE_PUB_KEY_GENERATE | 562ac42813aSSunila Sahu (1 << 5635fa1fb29SArek Kusztal RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE))), 564ac42813aSSunila Sahu { 565ac42813aSSunila Sahu .modlen = { 566ac42813aSSunila Sahu /* value 0 symbolizes no limit on min length */ 567ac42813aSSunila Sahu .min = 0, 568ac42813aSSunila Sahu /* value 0 symbolizes no limit on max length */ 569ac42813aSSunila Sahu .max = 0, 570ac42813aSSunila Sahu .increment = 1 571ac42813aSSunila Sahu }, } 572ac42813aSSunila Sahu } 573ac42813aSSunila Sahu }, 574ac42813aSSunila Sahu } 575ac42813aSSunila Sahu }, 576ac42813aSSunila Sahu { /* dsa */ 577ac42813aSSunila Sahu .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 578ac42813aSSunila Sahu {.asym = { 579ac42813aSSunila Sahu .xform_capa = { 580ac42813aSSunila Sahu .xform_type = RTE_CRYPTO_ASYM_XFORM_DSA, 581ac42813aSSunila Sahu .op_types = 582ac42813aSSunila Sahu ((1<<RTE_CRYPTO_ASYM_OP_SIGN) | 583ac42813aSSunila Sahu (1 << RTE_CRYPTO_ASYM_OP_VERIFY)), 584ac42813aSSunila Sahu { 585ac42813aSSunila Sahu .modlen = { 586ac42813aSSunila Sahu /* value 0 symbolizes no limit on min length */ 587ac42813aSSunila Sahu .min = 0, 588ac42813aSSunila Sahu /* value 0 symbolizes no limit on max length */ 589ac42813aSSunila Sahu .max = 0, 590ac42813aSSunila Sahu .increment = 1 591ac42813aSSunila Sahu }, } 592ac42813aSSunila Sahu } 593ac42813aSSunila Sahu }, 594ac42813aSSunila Sahu } 595ac42813aSSunila Sahu }, 5965a74d7fdSGowrishankar Muthukrishnan { /* ECFPM */ 5975a74d7fdSGowrishankar Muthukrishnan .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 5985a74d7fdSGowrishankar Muthukrishnan {.asym = { 5995a74d7fdSGowrishankar Muthukrishnan .xform_capa = { 6005a74d7fdSGowrishankar Muthukrishnan .xform_type = RTE_CRYPTO_ASYM_XFORM_ECFPM, 6015a74d7fdSGowrishankar Muthukrishnan .op_types = 0 6025a74d7fdSGowrishankar Muthukrishnan } 6035a74d7fdSGowrishankar Muthukrishnan } 6045a74d7fdSGowrishankar Muthukrishnan } 6055a74d7fdSGowrishankar Muthukrishnan }, 606e8f9c5c8SGowrishankar Muthukrishnan { /* SM2 */ 607e8f9c5c8SGowrishankar Muthukrishnan .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 608e8f9c5c8SGowrishankar Muthukrishnan {.asym = { 609e8f9c5c8SGowrishankar Muthukrishnan .xform_capa = { 610e8f9c5c8SGowrishankar Muthukrishnan .xform_type = RTE_CRYPTO_ASYM_XFORM_SM2, 611e8f9c5c8SGowrishankar Muthukrishnan .op_types = 612e8f9c5c8SGowrishankar Muthukrishnan ((1 << RTE_CRYPTO_ASYM_OP_SIGN) | 613e8f9c5c8SGowrishankar Muthukrishnan (1 << RTE_CRYPTO_ASYM_OP_VERIFY) | 614e8f9c5c8SGowrishankar Muthukrishnan (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) | 615e8f9c5c8SGowrishankar Muthukrishnan (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)), 616*8fdfedb1SGowrishankar Muthukrishnan .op_capa = { 617*8fdfedb1SGowrishankar Muthukrishnan [RTE_CRYPTO_ASYM_OP_ENCRYPT] = (1 << RTE_CRYPTO_SM2_RNG), 618*8fdfedb1SGowrishankar Muthukrishnan [RTE_CRYPTO_ASYM_OP_DECRYPT] = (1 << RTE_CRYPTO_SM2_RNG), 619*8fdfedb1SGowrishankar Muthukrishnan [RTE_CRYPTO_ASYM_OP_SIGN] = (1 << RTE_CRYPTO_SM2_RNG) | 620*8fdfedb1SGowrishankar Muthukrishnan (1 << RTE_CRYPTO_SM2_PH), 621*8fdfedb1SGowrishankar Muthukrishnan [RTE_CRYPTO_ASYM_OP_VERIFY] = (1 << RTE_CRYPTO_SM2_RNG) | 622*8fdfedb1SGowrishankar Muthukrishnan (1 << RTE_CRYPTO_SM2_PH) 623*8fdfedb1SGowrishankar Muthukrishnan }, 624*8fdfedb1SGowrishankar Muthukrishnan }, 625e8f9c5c8SGowrishankar Muthukrishnan } 626e8f9c5c8SGowrishankar Muthukrishnan } 627e8f9c5c8SGowrishankar Muthukrishnan }, 6285a74d7fdSGowrishankar Muthukrishnan { /* EdDSA */ 6295a74d7fdSGowrishankar Muthukrishnan .op = RTE_CRYPTO_OP_TYPE_ASYMMETRIC, 6305a74d7fdSGowrishankar Muthukrishnan {.asym = { 6315a74d7fdSGowrishankar Muthukrishnan .xform_capa = { 6325a74d7fdSGowrishankar Muthukrishnan .xform_type = RTE_CRYPTO_ASYM_XFORM_EDDSA, 6335a74d7fdSGowrishankar Muthukrishnan .hash_algos = (1 << RTE_CRYPTO_AUTH_SHA512 | 6345a74d7fdSGowrishankar Muthukrishnan 1 << RTE_CRYPTO_AUTH_SHAKE_256), 6355a74d7fdSGowrishankar Muthukrishnan .op_types = 6365a74d7fdSGowrishankar Muthukrishnan ((1<<RTE_CRYPTO_ASYM_OP_SIGN) | 6375a74d7fdSGowrishankar Muthukrishnan (1 << RTE_CRYPTO_ASYM_OP_VERIFY)), 6385a74d7fdSGowrishankar Muthukrishnan } 6395a74d7fdSGowrishankar Muthukrishnan } 6405a74d7fdSGowrishankar Muthukrishnan } 6415a74d7fdSGowrishankar Muthukrishnan }, 6428a9867a6SSlawomir Mrozowicz 6438a9867a6SSlawomir Mrozowicz RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() 6448a9867a6SSlawomir Mrozowicz }; 6458a9867a6SSlawomir Mrozowicz 6468a9867a6SSlawomir Mrozowicz 6478a9867a6SSlawomir Mrozowicz /** Configure device */ 6488a9867a6SSlawomir Mrozowicz static int 64960e686c2SFan Zhang openssl_pmd_config(__rte_unused struct rte_cryptodev *dev, 65060e686c2SFan Zhang __rte_unused struct rte_cryptodev_config *config) 6518a9867a6SSlawomir Mrozowicz { 6528a9867a6SSlawomir Mrozowicz return 0; 6538a9867a6SSlawomir Mrozowicz } 6548a9867a6SSlawomir Mrozowicz 6558a9867a6SSlawomir Mrozowicz /** Start device */ 6568a9867a6SSlawomir Mrozowicz static int 6578a9867a6SSlawomir Mrozowicz openssl_pmd_start(__rte_unused struct rte_cryptodev *dev) 6588a9867a6SSlawomir Mrozowicz { 6598a9867a6SSlawomir Mrozowicz return 0; 6608a9867a6SSlawomir Mrozowicz } 6618a9867a6SSlawomir Mrozowicz 6628a9867a6SSlawomir Mrozowicz /** Stop device */ 6638a9867a6SSlawomir Mrozowicz static void 6648a9867a6SSlawomir Mrozowicz openssl_pmd_stop(__rte_unused struct rte_cryptodev *dev) 6658a9867a6SSlawomir Mrozowicz { 6668a9867a6SSlawomir Mrozowicz } 6678a9867a6SSlawomir Mrozowicz 6688a9867a6SSlawomir Mrozowicz /** Close device */ 6698a9867a6SSlawomir Mrozowicz static int 6708a9867a6SSlawomir Mrozowicz openssl_pmd_close(__rte_unused struct rte_cryptodev *dev) 6718a9867a6SSlawomir Mrozowicz { 6728a9867a6SSlawomir Mrozowicz return 0; 6738a9867a6SSlawomir Mrozowicz } 6748a9867a6SSlawomir Mrozowicz 6758a9867a6SSlawomir Mrozowicz 6768a9867a6SSlawomir Mrozowicz /** Get device statistics */ 6778a9867a6SSlawomir Mrozowicz static void 6788a9867a6SSlawomir Mrozowicz openssl_pmd_stats_get(struct rte_cryptodev *dev, 6798a9867a6SSlawomir Mrozowicz struct rte_cryptodev_stats *stats) 6808a9867a6SSlawomir Mrozowicz { 6818a9867a6SSlawomir Mrozowicz int qp_id; 6828a9867a6SSlawomir Mrozowicz 6838a9867a6SSlawomir Mrozowicz for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { 6848a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = dev->data->queue_pairs[qp_id]; 6858a9867a6SSlawomir Mrozowicz 6868a9867a6SSlawomir Mrozowicz stats->enqueued_count += qp->stats.enqueued_count; 6878a9867a6SSlawomir Mrozowicz stats->dequeued_count += qp->stats.dequeued_count; 6888a9867a6SSlawomir Mrozowicz 6898a9867a6SSlawomir Mrozowicz stats->enqueue_err_count += qp->stats.enqueue_err_count; 6908a9867a6SSlawomir Mrozowicz stats->dequeue_err_count += qp->stats.dequeue_err_count; 6918a9867a6SSlawomir Mrozowicz } 6928a9867a6SSlawomir Mrozowicz } 6938a9867a6SSlawomir Mrozowicz 6948a9867a6SSlawomir Mrozowicz /** Reset device statistics */ 6958a9867a6SSlawomir Mrozowicz static void 6968a9867a6SSlawomir Mrozowicz openssl_pmd_stats_reset(struct rte_cryptodev *dev) 6978a9867a6SSlawomir Mrozowicz { 6988a9867a6SSlawomir Mrozowicz int qp_id; 6998a9867a6SSlawomir Mrozowicz 7008a9867a6SSlawomir Mrozowicz for (qp_id = 0; qp_id < dev->data->nb_queue_pairs; qp_id++) { 7018a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = dev->data->queue_pairs[qp_id]; 7028a9867a6SSlawomir Mrozowicz 7038a9867a6SSlawomir Mrozowicz memset(&qp->stats, 0, sizeof(qp->stats)); 7048a9867a6SSlawomir Mrozowicz } 7058a9867a6SSlawomir Mrozowicz } 7068a9867a6SSlawomir Mrozowicz 7078a9867a6SSlawomir Mrozowicz 7088a9867a6SSlawomir Mrozowicz /** Get device info */ 7098a9867a6SSlawomir Mrozowicz static void 7108a9867a6SSlawomir Mrozowicz openssl_pmd_info_get(struct rte_cryptodev *dev, 7118a9867a6SSlawomir Mrozowicz struct rte_cryptodev_info *dev_info) 7128a9867a6SSlawomir Mrozowicz { 7138a9867a6SSlawomir Mrozowicz struct openssl_private *internals = dev->data->dev_private; 7148a9867a6SSlawomir Mrozowicz 7158a9867a6SSlawomir Mrozowicz if (dev_info != NULL) { 7167a364faeSSlawomir Mrozowicz dev_info->driver_id = dev->driver_id; 7178a9867a6SSlawomir Mrozowicz dev_info->feature_flags = dev->feature_flags; 7188a9867a6SSlawomir Mrozowicz dev_info->capabilities = openssl_pmd_capabilities; 7198a9867a6SSlawomir Mrozowicz dev_info->max_nb_queue_pairs = internals->max_nb_qpairs; 720e1fc5b76SPablo de Lara /* No limit of number of sessions */ 721e1fc5b76SPablo de Lara dev_info->sym.max_nb_sessions = 0; 7228a9867a6SSlawomir Mrozowicz } 7238a9867a6SSlawomir Mrozowicz } 7248a9867a6SSlawomir Mrozowicz 7258a9867a6SSlawomir Mrozowicz /** Release queue pair */ 7268a9867a6SSlawomir Mrozowicz static int 7278a9867a6SSlawomir Mrozowicz openssl_pmd_qp_release(struct rte_cryptodev *dev, uint16_t qp_id) 7288a9867a6SSlawomir Mrozowicz { 7298a9867a6SSlawomir Mrozowicz if (dev->data->queue_pairs[qp_id] != NULL) { 730a4d69a51SFan Zhang struct openssl_qp *qp = dev->data->queue_pairs[qp_id]; 731a4d69a51SFan Zhang 732a4d69a51SFan Zhang rte_ring_free(qp->processed_ops); 733a4d69a51SFan Zhang 7348a9867a6SSlawomir Mrozowicz rte_free(dev->data->queue_pairs[qp_id]); 7358a9867a6SSlawomir Mrozowicz dev->data->queue_pairs[qp_id] = NULL; 7368a9867a6SSlawomir Mrozowicz } 7378a9867a6SSlawomir Mrozowicz return 0; 7388a9867a6SSlawomir Mrozowicz } 7398a9867a6SSlawomir Mrozowicz 7408a9867a6SSlawomir Mrozowicz /** set a unique name for the queue pair based on it's name, dev_id and qp_id */ 7418a9867a6SSlawomir Mrozowicz static int 7428a9867a6SSlawomir Mrozowicz openssl_pmd_qp_set_unique_name(struct rte_cryptodev *dev, 7438a9867a6SSlawomir Mrozowicz struct openssl_qp *qp) 7448a9867a6SSlawomir Mrozowicz { 7458a9867a6SSlawomir Mrozowicz unsigned int n = snprintf(qp->name, sizeof(qp->name), 7468a9867a6SSlawomir Mrozowicz "openssl_pmd_%u_qp_%u", 7478a9867a6SSlawomir Mrozowicz dev->data->dev_id, qp->id); 7488a9867a6SSlawomir Mrozowicz 7496ab25e63STomasz Duszynski if (n >= sizeof(qp->name)) 7508a9867a6SSlawomir Mrozowicz return -1; 7518a9867a6SSlawomir Mrozowicz 7528a9867a6SSlawomir Mrozowicz return 0; 7538a9867a6SSlawomir Mrozowicz } 7548a9867a6SSlawomir Mrozowicz 7558a9867a6SSlawomir Mrozowicz 7568a9867a6SSlawomir Mrozowicz /** Create a ring to place processed operations on */ 7578a9867a6SSlawomir Mrozowicz static struct rte_ring * 7588a9867a6SSlawomir Mrozowicz openssl_pmd_qp_create_processed_ops_ring(struct openssl_qp *qp, 7598a9867a6SSlawomir Mrozowicz unsigned int ring_size, int socket_id) 7608a9867a6SSlawomir Mrozowicz { 7618a9867a6SSlawomir Mrozowicz struct rte_ring *r; 7628a9867a6SSlawomir Mrozowicz 7638a9867a6SSlawomir Mrozowicz r = rte_ring_lookup(qp->name); 7648a9867a6SSlawomir Mrozowicz if (r) { 765636e7392SBruce Richardson if (rte_ring_get_size(r) >= ring_size) { 766094b2386SNaga Suresh Somarowthu OPENSSL_LOG(INFO, 7678a9867a6SSlawomir Mrozowicz "Reusing existing ring %s for processed ops", 7688a9867a6SSlawomir Mrozowicz qp->name); 7698a9867a6SSlawomir Mrozowicz return r; 7708a9867a6SSlawomir Mrozowicz } 7718a9867a6SSlawomir Mrozowicz 772094b2386SNaga Suresh Somarowthu OPENSSL_LOG(ERR, 7738a9867a6SSlawomir Mrozowicz "Unable to reuse existing ring %s for processed ops", 7748a9867a6SSlawomir Mrozowicz qp->name); 7758a9867a6SSlawomir Mrozowicz return NULL; 7768a9867a6SSlawomir Mrozowicz } 7778a9867a6SSlawomir Mrozowicz 7788a9867a6SSlawomir Mrozowicz return rte_ring_create(qp->name, ring_size, socket_id, 7798a9867a6SSlawomir Mrozowicz RING_F_SP_ENQ | RING_F_SC_DEQ); 7808a9867a6SSlawomir Mrozowicz } 7818a9867a6SSlawomir Mrozowicz 7828a9867a6SSlawomir Mrozowicz 7838a9867a6SSlawomir Mrozowicz /** Setup a queue pair */ 7848a9867a6SSlawomir Mrozowicz static int 7858a9867a6SSlawomir Mrozowicz openssl_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id, 7868a9867a6SSlawomir Mrozowicz const struct rte_cryptodev_qp_conf *qp_conf, 787725d2a7fSFan Zhang int socket_id) 7888a9867a6SSlawomir Mrozowicz { 7898a9867a6SSlawomir Mrozowicz struct openssl_qp *qp = NULL; 7908a9867a6SSlawomir Mrozowicz 7918a9867a6SSlawomir Mrozowicz /* Free memory prior to re-allocation if needed. */ 7928a9867a6SSlawomir Mrozowicz if (dev->data->queue_pairs[qp_id] != NULL) 7938a9867a6SSlawomir Mrozowicz openssl_pmd_qp_release(dev, qp_id); 7948a9867a6SSlawomir Mrozowicz 7958a9867a6SSlawomir Mrozowicz /* Allocate the queue pair data structure. */ 7968a9867a6SSlawomir Mrozowicz qp = rte_zmalloc_socket("OPENSSL PMD Queue Pair", sizeof(*qp), 7978a9867a6SSlawomir Mrozowicz RTE_CACHE_LINE_SIZE, socket_id); 7988a9867a6SSlawomir Mrozowicz if (qp == NULL) 7998a9867a6SSlawomir Mrozowicz return -ENOMEM; 8008a9867a6SSlawomir Mrozowicz 8018a9867a6SSlawomir Mrozowicz qp->id = qp_id; 8028a9867a6SSlawomir Mrozowicz dev->data->queue_pairs[qp_id] = qp; 8038a9867a6SSlawomir Mrozowicz 8048a9867a6SSlawomir Mrozowicz if (openssl_pmd_qp_set_unique_name(dev, qp)) 8058a9867a6SSlawomir Mrozowicz goto qp_setup_cleanup; 8068a9867a6SSlawomir Mrozowicz 8078a9867a6SSlawomir Mrozowicz qp->processed_ops = openssl_pmd_qp_create_processed_ops_ring(qp, 8088a9867a6SSlawomir Mrozowicz qp_conf->nb_descriptors, socket_id); 8098a9867a6SSlawomir Mrozowicz if (qp->processed_ops == NULL) 8108a9867a6SSlawomir Mrozowicz goto qp_setup_cleanup; 8118a9867a6SSlawomir Mrozowicz 812725d2a7fSFan Zhang qp->sess_mp = qp_conf->mp_session; 8138a9867a6SSlawomir Mrozowicz 8148a9867a6SSlawomir Mrozowicz memset(&qp->stats, 0, sizeof(qp->stats)); 8158a9867a6SSlawomir Mrozowicz 8168a9867a6SSlawomir Mrozowicz return 0; 8178a9867a6SSlawomir Mrozowicz 8188a9867a6SSlawomir Mrozowicz qp_setup_cleanup: 8198a9867a6SSlawomir Mrozowicz rte_free(qp); 8208a9867a6SSlawomir Mrozowicz 8218a9867a6SSlawomir Mrozowicz return -1; 8228a9867a6SSlawomir Mrozowicz } 8238a9867a6SSlawomir Mrozowicz 8243e9d6bd4SSunila Sahu /** Returns the size of the symmetric session structure */ 8258a9867a6SSlawomir Mrozowicz static unsigned 826b1d71126SJack Bond-Preston openssl_pmd_sym_session_get_size(struct rte_cryptodev *dev) 8278a9867a6SSlawomir Mrozowicz { 828b1d71126SJack Bond-Preston /* 829b1d71126SJack Bond-Preston * For 0 qps, return the max size of the session - this is necessary if 830b1d71126SJack Bond-Preston * the user calls into this function to create the session mempool, 831b1d71126SJack Bond-Preston * without first configuring the number of qps for the cryptodev. 832b1d71126SJack Bond-Preston */ 833b1d71126SJack Bond-Preston if (dev->data->nb_queue_pairs == 0) { 834b1d71126SJack Bond-Preston unsigned int max_nb_qps = ((struct openssl_private *) 835b1d71126SJack Bond-Preston dev->data->dev_private)->max_nb_qpairs; 836b1d71126SJack Bond-Preston return sizeof(struct openssl_session) + 83717d5bc61SJack Bond-Preston (sizeof(struct evp_ctx_pair) * max_nb_qps); 838b1d71126SJack Bond-Preston } 839b1d71126SJack Bond-Preston 840b1d71126SJack Bond-Preston /* 841b1d71126SJack Bond-Preston * With only one queue pair, the thread safety of multiple context 842b1d71126SJack Bond-Preston * copies is not necessary, so don't allocate extra memory for the 843b1d71126SJack Bond-Preston * array. 844b1d71126SJack Bond-Preston */ 845b1d71126SJack Bond-Preston if (dev->data->nb_queue_pairs == 1) 8468a9867a6SSlawomir Mrozowicz return sizeof(struct openssl_session); 847b1d71126SJack Bond-Preston 848b1d71126SJack Bond-Preston /* 849b1d71126SJack Bond-Preston * Otherwise, the size of the flexible array member should be enough to 85017d5bc61SJack Bond-Preston * fit pointers to per-qp contexts. This is twice the number of queue 85117d5bc61SJack Bond-Preston * pairs, to allow for auth and cipher contexts. 852b1d71126SJack Bond-Preston */ 853b1d71126SJack Bond-Preston return sizeof(struct openssl_session) + 85417d5bc61SJack Bond-Preston (sizeof(struct evp_ctx_pair) * dev->data->nb_queue_pairs); 8558a9867a6SSlawomir Mrozowicz } 8568a9867a6SSlawomir Mrozowicz 8573e9d6bd4SSunila Sahu /** Returns the size of the asymmetric session structure */ 8583e9d6bd4SSunila Sahu static unsigned 8593e9d6bd4SSunila Sahu openssl_pmd_asym_session_get_size(struct rte_cryptodev *dev __rte_unused) 8603e9d6bd4SSunila Sahu { 8613e9d6bd4SSunila Sahu return sizeof(struct openssl_asym_session); 8623e9d6bd4SSunila Sahu } 8633e9d6bd4SSunila Sahu 8648a9867a6SSlawomir Mrozowicz /** Configure the session from a crypto xform chain */ 865b3bbd9e5SSlawomir Mrozowicz static int 866b1d71126SJack Bond-Preston openssl_pmd_sym_session_configure(struct rte_cryptodev *dev, 867b3bbd9e5SSlawomir Mrozowicz struct rte_crypto_sym_xform *xform, 868bdce2564SAkhil Goyal struct rte_cryptodev_sym_session *sess) 8698a9867a6SSlawomir Mrozowicz { 8702a440d6aSAkhil Goyal void *sess_private_data = CRYPTODEV_GET_SYM_SESS_PRIV(sess); 87127391b53SPablo de Lara int ret; 872b3bbd9e5SSlawomir Mrozowicz 8738a9867a6SSlawomir Mrozowicz if (unlikely(sess == NULL)) { 874094b2386SNaga Suresh Somarowthu OPENSSL_LOG(ERR, "invalid session struct"); 87527391b53SPablo de Lara return -EINVAL; 876b3bbd9e5SSlawomir Mrozowicz } 877b3bbd9e5SSlawomir Mrozowicz 878b1d71126SJack Bond-Preston ret = openssl_set_session_parameters(sess_private_data, xform, 879b1d71126SJack Bond-Preston dev->data->nb_queue_pairs); 88027391b53SPablo de Lara if (ret != 0) { 881094b2386SNaga Suresh Somarowthu OPENSSL_LOG(ERR, "failed configure session parameters"); 882b3bbd9e5SSlawomir Mrozowicz 883b3bbd9e5SSlawomir Mrozowicz /* Return session to mempool */ 88427391b53SPablo de Lara return ret; 8858a9867a6SSlawomir Mrozowicz } 8868a9867a6SSlawomir Mrozowicz 887b3bbd9e5SSlawomir Mrozowicz return 0; 8888a9867a6SSlawomir Mrozowicz } 8898a9867a6SSlawomir Mrozowicz 8903e9d6bd4SSunila Sahu static int openssl_set_asym_session_parameters( 8913e9d6bd4SSunila Sahu struct openssl_asym_session *asym_session, 8923e9d6bd4SSunila Sahu struct rte_crypto_asym_xform *xform) 8933e9d6bd4SSunila Sahu { 8944c7ae22fSKai Ji int ret = -1; 8953e9d6bd4SSunila Sahu 896ac42813aSSunila Sahu if ((xform->xform_type != RTE_CRYPTO_ASYM_XFORM_DH) && 897ac42813aSSunila Sahu (xform->next != NULL)) { 8983e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, "chained xfrms are not supported on %s", 8997e1e1277SAkhil Goyal rte_cryptodev_asym_get_xform_string(xform->xform_type)); 9004c7ae22fSKai Ji return ret; 9013e9d6bd4SSunila Sahu } 9023e9d6bd4SSunila Sahu 9033e9d6bd4SSunila Sahu switch (xform->xform_type) { 9043e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_RSA: 9053e9d6bd4SSunila Sahu { 9063e9d6bd4SSunila Sahu BIGNUM *n = NULL; 9073e9d6bd4SSunila Sahu BIGNUM *e = NULL; 9083e9d6bd4SSunila Sahu BIGNUM *d = NULL; 9093e9d6bd4SSunila Sahu BIGNUM *p = NULL, *q = NULL, *dmp1 = NULL; 9103e9d6bd4SSunila Sahu BIGNUM *iqmp = NULL, *dmq1 = NULL; 9113e9d6bd4SSunila Sahu 9123e9d6bd4SSunila Sahu /* copy xfrm data into rsa struct */ 9133e9d6bd4SSunila Sahu n = BN_bin2bn((const unsigned char *)xform->rsa.n.data, 9143e9d6bd4SSunila Sahu xform->rsa.n.length, n); 9153e9d6bd4SSunila Sahu e = BN_bin2bn((const unsigned char *)xform->rsa.e.data, 9163e9d6bd4SSunila Sahu xform->rsa.e.length, e); 9173e9d6bd4SSunila Sahu 9183e9d6bd4SSunila Sahu if (!n || !e) 9193e9d6bd4SSunila Sahu goto err_rsa; 9203e9d6bd4SSunila Sahu 9218a97564bSGowrishankar Muthukrishnan asym_session->u.r.pad = xform->rsa.padding.type; 922d7bd42f6SKai Ji #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 923d7bd42f6SKai Ji OSSL_PARAM_BLD * param_bld = OSSL_PARAM_BLD_new(); 924d7bd42f6SKai Ji if (!param_bld) { 925f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to allocate resources"); 926d7bd42f6SKai Ji goto err_rsa; 927d7bd42f6SKai Ji } 928d7bd42f6SKai Ji 929d7bd42f6SKai Ji if (!OSSL_PARAM_BLD_push_BN(param_bld, OSSL_PKEY_PARAM_RSA_N, n) 930d7bd42f6SKai Ji || !OSSL_PARAM_BLD_push_BN(param_bld, 931d7bd42f6SKai Ji OSSL_PKEY_PARAM_RSA_E, e)) { 932d7bd42f6SKai Ji OSSL_PARAM_BLD_free(param_bld); 933f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to allocate resources"); 934d7bd42f6SKai Ji goto err_rsa; 935d7bd42f6SKai Ji } 936d7bd42f6SKai Ji 937d7bd42f6SKai Ji if (xform->rsa.key_type == RTE_RSA_KEY_TYPE_EXP) { 938d7bd42f6SKai Ji d = BN_bin2bn( 939d7bd42f6SKai Ji (const unsigned char *)xform->rsa.d.data, 940d7bd42f6SKai Ji xform->rsa.d.length, 941d7bd42f6SKai Ji d); 942d7bd42f6SKai Ji if (!d) { 943d7bd42f6SKai Ji OSSL_PARAM_BLD_free(param_bld); 944d7bd42f6SKai Ji goto err_rsa; 945d7bd42f6SKai Ji } 946d7bd42f6SKai Ji } else { 947d7bd42f6SKai Ji p = BN_bin2bn((const unsigned char *) 948d7bd42f6SKai Ji xform->rsa.qt.p.data, 949d7bd42f6SKai Ji xform->rsa.qt.p.length, 950d7bd42f6SKai Ji p); 951d7bd42f6SKai Ji q = BN_bin2bn((const unsigned char *) 952d7bd42f6SKai Ji xform->rsa.qt.q.data, 953d7bd42f6SKai Ji xform->rsa.qt.q.length, 954d7bd42f6SKai Ji q); 955d7bd42f6SKai Ji dmp1 = BN_bin2bn((const unsigned char *) 956d7bd42f6SKai Ji xform->rsa.qt.dP.data, 957d7bd42f6SKai Ji xform->rsa.qt.dP.length, 958d7bd42f6SKai Ji dmp1); 959d7bd42f6SKai Ji dmq1 = BN_bin2bn((const unsigned char *) 960d7bd42f6SKai Ji xform->rsa.qt.dQ.data, 961d7bd42f6SKai Ji xform->rsa.qt.dQ.length, 962d7bd42f6SKai Ji dmq1); 963d7bd42f6SKai Ji iqmp = BN_bin2bn((const unsigned char *) 964d7bd42f6SKai Ji xform->rsa.qt.qInv.data, 965d7bd42f6SKai Ji xform->rsa.qt.qInv.length, 966d7bd42f6SKai Ji iqmp); 967d7bd42f6SKai Ji 968d7bd42f6SKai Ji if (!p || !q || !dmp1 || !dmq1 || !iqmp) { 969d7bd42f6SKai Ji OSSL_PARAM_BLD_free(param_bld); 970d7bd42f6SKai Ji goto err_rsa; 971d7bd42f6SKai Ji } 972d7bd42f6SKai Ji 973d7bd42f6SKai Ji if (!OSSL_PARAM_BLD_push_BN(param_bld, 974d7bd42f6SKai Ji OSSL_PKEY_PARAM_RSA_FACTOR1, p) 975d7bd42f6SKai Ji || !OSSL_PARAM_BLD_push_BN(param_bld, 976d7bd42f6SKai Ji OSSL_PKEY_PARAM_RSA_FACTOR2, q) 977d7bd42f6SKai Ji || !OSSL_PARAM_BLD_push_BN(param_bld, 978d7bd42f6SKai Ji OSSL_PKEY_PARAM_RSA_EXPONENT1, dmp1) 979d7bd42f6SKai Ji || !OSSL_PARAM_BLD_push_BN(param_bld, 980d7bd42f6SKai Ji OSSL_PKEY_PARAM_RSA_EXPONENT2, dmq1) 981d7bd42f6SKai Ji || !OSSL_PARAM_BLD_push_BN(param_bld, 982d7bd42f6SKai Ji OSSL_PKEY_PARAM_RSA_COEFFICIENT1, iqmp)) { 983d7bd42f6SKai Ji OSSL_PARAM_BLD_free(param_bld); 984d7bd42f6SKai Ji goto err_rsa; 985d7bd42f6SKai Ji } 986d7bd42f6SKai Ji } 987d7bd42f6SKai Ji 988d7bd42f6SKai Ji if (!OSSL_PARAM_BLD_push_BN(param_bld, OSSL_PKEY_PARAM_RSA_N, n) 989d7bd42f6SKai Ji || !OSSL_PARAM_BLD_push_BN(param_bld, OSSL_PKEY_PARAM_RSA_E, e) 990d7bd42f6SKai Ji || !OSSL_PARAM_BLD_push_BN(param_bld, 991d7bd42f6SKai Ji OSSL_PKEY_PARAM_RSA_D, d)) { 992d7bd42f6SKai Ji OSSL_PARAM_BLD_free(param_bld); 993d7bd42f6SKai Ji goto err_rsa; 994d7bd42f6SKai Ji } 995d7bd42f6SKai Ji 996d7bd42f6SKai Ji EVP_PKEY_CTX *key_ctx = EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL); 997d7bd42f6SKai Ji EVP_PKEY *pkey = NULL; 998d7bd42f6SKai Ji EVP_PKEY_CTX *rsa_ctx = NULL; 999d7bd42f6SKai Ji OSSL_PARAM *params = NULL; 1000d7bd42f6SKai Ji 1001d7bd42f6SKai Ji params = OSSL_PARAM_BLD_to_param(param_bld); 1002d7bd42f6SKai Ji if (!params) { 1003d7bd42f6SKai Ji OSSL_PARAM_BLD_free(param_bld); 1004d7bd42f6SKai Ji goto err_rsa; 1005d7bd42f6SKai Ji } 1006d7bd42f6SKai Ji 1007d7bd42f6SKai Ji if (key_ctx == NULL 1008d7bd42f6SKai Ji || EVP_PKEY_fromdata_init(key_ctx) <= 0 1009d7bd42f6SKai Ji || EVP_PKEY_fromdata(key_ctx, &pkey, 1010d7bd42f6SKai Ji EVP_PKEY_KEYPAIR, params) <= 0) { 1011d7bd42f6SKai Ji OSSL_PARAM_free(params); 1012d7bd42f6SKai Ji goto err_rsa; 1013d7bd42f6SKai Ji } 1014d7bd42f6SKai Ji 1015d7bd42f6SKai Ji rsa_ctx = EVP_PKEY_CTX_new(pkey, NULL); 1016d7bd42f6SKai Ji asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_RSA; 1017d7bd42f6SKai Ji asym_session->u.r.ctx = rsa_ctx; 10189d91c304SGowrishankar Muthukrishnan EVP_PKEY_free(pkey); 1019d7bd42f6SKai Ji EVP_PKEY_CTX_free(key_ctx); 10209d91c304SGowrishankar Muthukrishnan OSSL_PARAM_BLD_free(param_bld); 1021d7bd42f6SKai Ji OSSL_PARAM_free(params); 10229d91c304SGowrishankar Muthukrishnan ret = 0; 1023d7bd42f6SKai Ji #else 10243e9d6bd4SSunila Sahu RSA *rsa = RSA_new(); 10253e9d6bd4SSunila Sahu if (rsa == NULL) 10263e9d6bd4SSunila Sahu goto err_rsa; 10273e9d6bd4SSunila Sahu 10283e9d6bd4SSunila Sahu if (xform->rsa.key_type == RTE_RSA_KEY_TYPE_EXP) { 10293e9d6bd4SSunila Sahu d = BN_bin2bn( 10303e9d6bd4SSunila Sahu (const unsigned char *)xform->rsa.d.data, 10313e9d6bd4SSunila Sahu xform->rsa.d.length, 10323e9d6bd4SSunila Sahu d); 10333e9d6bd4SSunila Sahu if (!d) { 10343e9d6bd4SSunila Sahu RSA_free(rsa); 10353e9d6bd4SSunila Sahu goto err_rsa; 10363e9d6bd4SSunila Sahu } 10373e9d6bd4SSunila Sahu } else { 10383e9d6bd4SSunila Sahu p = BN_bin2bn((const unsigned char *) 10393e9d6bd4SSunila Sahu xform->rsa.qt.p.data, 10403e9d6bd4SSunila Sahu xform->rsa.qt.p.length, 10413e9d6bd4SSunila Sahu p); 10423e9d6bd4SSunila Sahu q = BN_bin2bn((const unsigned char *) 10433e9d6bd4SSunila Sahu xform->rsa.qt.q.data, 10443e9d6bd4SSunila Sahu xform->rsa.qt.q.length, 10453e9d6bd4SSunila Sahu q); 10463e9d6bd4SSunila Sahu dmp1 = BN_bin2bn((const unsigned char *) 10473e9d6bd4SSunila Sahu xform->rsa.qt.dP.data, 10483e9d6bd4SSunila Sahu xform->rsa.qt.dP.length, 10493e9d6bd4SSunila Sahu dmp1); 10503e9d6bd4SSunila Sahu dmq1 = BN_bin2bn((const unsigned char *) 10513e9d6bd4SSunila Sahu xform->rsa.qt.dQ.data, 10523e9d6bd4SSunila Sahu xform->rsa.qt.dQ.length, 10533e9d6bd4SSunila Sahu dmq1); 10543e9d6bd4SSunila Sahu iqmp = BN_bin2bn((const unsigned char *) 10553e9d6bd4SSunila Sahu xform->rsa.qt.qInv.data, 10563e9d6bd4SSunila Sahu xform->rsa.qt.qInv.length, 10573e9d6bd4SSunila Sahu iqmp); 10583e9d6bd4SSunila Sahu 10593e9d6bd4SSunila Sahu if (!p || !q || !dmp1 || !dmq1 || !iqmp) { 10603e9d6bd4SSunila Sahu RSA_free(rsa); 10613e9d6bd4SSunila Sahu goto err_rsa; 10623e9d6bd4SSunila Sahu } 10630b5284adSAshish Gupta ret = set_rsa_params(rsa, p, q); 10643e9d6bd4SSunila Sahu if (ret) { 10653e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, 1066f665790aSDavid Marchand "failed to set rsa params"); 10673e9d6bd4SSunila Sahu RSA_free(rsa); 10683e9d6bd4SSunila Sahu goto err_rsa; 10693e9d6bd4SSunila Sahu } 10700b5284adSAshish Gupta ret = set_rsa_crt_params(rsa, dmp1, dmq1, iqmp); 10713e9d6bd4SSunila Sahu if (ret) { 10723e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, 1073f665790aSDavid Marchand "failed to set crt params"); 10743e9d6bd4SSunila Sahu RSA_free(rsa); 10753e9d6bd4SSunila Sahu /* 10763e9d6bd4SSunila Sahu * set already populated params to NULL 10773e9d6bd4SSunila Sahu * as its freed by call to RSA_free 10783e9d6bd4SSunila Sahu */ 10793e9d6bd4SSunila Sahu p = q = NULL; 10803e9d6bd4SSunila Sahu goto err_rsa; 10813e9d6bd4SSunila Sahu } 10823e9d6bd4SSunila Sahu } 10833e9d6bd4SSunila Sahu 10840b5284adSAshish Gupta ret = set_rsa_keys(rsa, n, e, d); 10853e9d6bd4SSunila Sahu if (ret) { 1086f665790aSDavid Marchand OPENSSL_LOG(ERR, "Failed to load rsa keys"); 10873e9d6bd4SSunila Sahu RSA_free(rsa); 10884c7ae22fSKai Ji return ret; 10893e9d6bd4SSunila Sahu } 10903e9d6bd4SSunila Sahu asym_session->u.r.rsa = rsa; 10913e9d6bd4SSunila Sahu asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_RSA; 109247a85ddaSCiara Power break; 1093d7bd42f6SKai Ji #endif 10943e9d6bd4SSunila Sahu err_rsa: 109577411bd6SArek Kusztal BN_clear_free(n); 109677411bd6SArek Kusztal BN_clear_free(e); 109777411bd6SArek Kusztal BN_clear_free(d); 109877411bd6SArek Kusztal BN_clear_free(p); 109977411bd6SArek Kusztal BN_clear_free(q); 110077411bd6SArek Kusztal BN_clear_free(dmp1); 110177411bd6SArek Kusztal BN_clear_free(dmq1); 110277411bd6SArek Kusztal BN_clear_free(iqmp); 11033e9d6bd4SSunila Sahu 11049d91c304SGowrishankar Muthukrishnan return ret; 11053e9d6bd4SSunila Sahu } 11063e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_MODEX: 11073e9d6bd4SSunila Sahu { 11083e9d6bd4SSunila Sahu struct rte_crypto_modex_xform *xfrm = &(xform->modex); 11093e9d6bd4SSunila Sahu 11103e9d6bd4SSunila Sahu BN_CTX *ctx = BN_CTX_new(); 11113e9d6bd4SSunila Sahu if (ctx == NULL) { 11123e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, 1113f665790aSDavid Marchand " failed to allocate resources"); 11144c7ae22fSKai Ji return ret; 11153e9d6bd4SSunila Sahu } 11163e9d6bd4SSunila Sahu BN_CTX_start(ctx); 11173e9d6bd4SSunila Sahu BIGNUM *mod = BN_CTX_get(ctx); 11183e9d6bd4SSunila Sahu BIGNUM *exp = BN_CTX_get(ctx); 11193e9d6bd4SSunila Sahu if (mod == NULL || exp == NULL) { 11203e9d6bd4SSunila Sahu BN_CTX_end(ctx); 11213e9d6bd4SSunila Sahu BN_CTX_free(ctx); 11224c7ae22fSKai Ji return ret; 11233e9d6bd4SSunila Sahu } 11243e9d6bd4SSunila Sahu 11253e9d6bd4SSunila Sahu mod = BN_bin2bn((const unsigned char *) 11263e9d6bd4SSunila Sahu xfrm->modulus.data, 11273e9d6bd4SSunila Sahu xfrm->modulus.length, mod); 11283e9d6bd4SSunila Sahu exp = BN_bin2bn((const unsigned char *) 11293e9d6bd4SSunila Sahu xfrm->exponent.data, 11303e9d6bd4SSunila Sahu xfrm->exponent.length, exp); 11313e9d6bd4SSunila Sahu asym_session->u.e.ctx = ctx; 11323e9d6bd4SSunila Sahu asym_session->u.e.mod = mod; 11333e9d6bd4SSunila Sahu asym_session->u.e.exp = exp; 11343e9d6bd4SSunila Sahu asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_MODEX; 11353e9d6bd4SSunila Sahu break; 11363e9d6bd4SSunila Sahu } 11373e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_MODINV: 11383e9d6bd4SSunila Sahu { 11393e9d6bd4SSunila Sahu struct rte_crypto_modinv_xform *xfrm = &(xform->modinv); 11403e9d6bd4SSunila Sahu 11413e9d6bd4SSunila Sahu BN_CTX *ctx = BN_CTX_new(); 11423e9d6bd4SSunila Sahu if (ctx == NULL) { 11433e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, 1144f665790aSDavid Marchand " failed to allocate resources"); 11454c7ae22fSKai Ji return ret; 11463e9d6bd4SSunila Sahu } 11473e9d6bd4SSunila Sahu BN_CTX_start(ctx); 11483e9d6bd4SSunila Sahu BIGNUM *mod = BN_CTX_get(ctx); 11493e9d6bd4SSunila Sahu if (mod == NULL) { 11503e9d6bd4SSunila Sahu BN_CTX_end(ctx); 11513e9d6bd4SSunila Sahu BN_CTX_free(ctx); 11524c7ae22fSKai Ji return ret; 11533e9d6bd4SSunila Sahu } 11543e9d6bd4SSunila Sahu 11553e9d6bd4SSunila Sahu mod = BN_bin2bn((const unsigned char *) 11563e9d6bd4SSunila Sahu xfrm->modulus.data, 11573e9d6bd4SSunila Sahu xfrm->modulus.length, 11583e9d6bd4SSunila Sahu mod); 11593e9d6bd4SSunila Sahu asym_session->u.m.ctx = ctx; 11603e9d6bd4SSunila Sahu asym_session->u.m.modulus = mod; 11613e9d6bd4SSunila Sahu asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_MODINV; 11623e9d6bd4SSunila Sahu break; 11633e9d6bd4SSunila Sahu } 1164ac42813aSSunila Sahu case RTE_CRYPTO_ASYM_XFORM_DH: 1165ac42813aSSunila Sahu { 1166c794b40cSKai Ji DH *dh = NULL; 1167c794b40cSKai Ji #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 116847a85ddaSCiara Power BIGNUM **p = &asym_session->u.dh.p; 116947a85ddaSCiara Power BIGNUM **g = &asym_session->u.dh.g; 117047a85ddaSCiara Power 117147a85ddaSCiara Power *p = BN_bin2bn((const unsigned char *) 117247a85ddaSCiara Power xform->dh.p.data, 117347a85ddaSCiara Power xform->dh.p.length, 117447a85ddaSCiara Power *p); 117547a85ddaSCiara Power *g = BN_bin2bn((const unsigned char *) 117647a85ddaSCiara Power xform->dh.g.data, 117747a85ddaSCiara Power xform->dh.g.length, 117847a85ddaSCiara Power *g); 117947a85ddaSCiara Power if (!*p || !*g) 118047a85ddaSCiara Power goto err_dh; 118147a85ddaSCiara Power 1182c794b40cSKai Ji OSSL_PARAM_BLD *param_bld = NULL; 1183c794b40cSKai Ji param_bld = OSSL_PARAM_BLD_new(); 1184c794b40cSKai Ji if (!param_bld) { 1185f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to allocate resources"); 1186c794b40cSKai Ji goto err_dh; 1187c794b40cSKai Ji } 1188c794b40cSKai Ji if ((!OSSL_PARAM_BLD_push_utf8_string(param_bld, 1189c794b40cSKai Ji "group", "ffdhe2048", 0)) 1190c794b40cSKai Ji || (!OSSL_PARAM_BLD_push_BN(param_bld, 119147a85ddaSCiara Power OSSL_PKEY_PARAM_FFC_P, *p)) 1192c794b40cSKai Ji || (!OSSL_PARAM_BLD_push_BN(param_bld, 119347a85ddaSCiara Power OSSL_PKEY_PARAM_FFC_G, *g))) { 1194c794b40cSKai Ji OSSL_PARAM_BLD_free(param_bld); 1195c794b40cSKai Ji goto err_dh; 1196c794b40cSKai Ji } 1197c794b40cSKai Ji 1198c794b40cSKai Ji OSSL_PARAM_BLD *param_bld_peer = NULL; 1199c794b40cSKai Ji param_bld_peer = OSSL_PARAM_BLD_new(); 1200c794b40cSKai Ji if (!param_bld_peer) { 1201f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to allocate resources"); 1202c794b40cSKai Ji OSSL_PARAM_BLD_free(param_bld); 1203c794b40cSKai Ji goto err_dh; 1204c794b40cSKai Ji } 1205c794b40cSKai Ji if ((!OSSL_PARAM_BLD_push_utf8_string(param_bld_peer, 1206c794b40cSKai Ji "group", "ffdhe2048", 0)) 1207c794b40cSKai Ji || (!OSSL_PARAM_BLD_push_BN(param_bld_peer, 120847a85ddaSCiara Power OSSL_PKEY_PARAM_FFC_P, *p)) 1209c794b40cSKai Ji || (!OSSL_PARAM_BLD_push_BN(param_bld_peer, 121047a85ddaSCiara Power OSSL_PKEY_PARAM_FFC_G, *g))) { 1211c794b40cSKai Ji OSSL_PARAM_BLD_free(param_bld); 1212c794b40cSKai Ji OSSL_PARAM_BLD_free(param_bld_peer); 1213c794b40cSKai Ji goto err_dh; 1214c794b40cSKai Ji } 1215c794b40cSKai Ji 1216c794b40cSKai Ji asym_session->u.dh.param_bld = param_bld; 1217c794b40cSKai Ji asym_session->u.dh.param_bld_peer = param_bld_peer; 1218c794b40cSKai Ji #else 121947a85ddaSCiara Power BIGNUM *p = NULL; 122047a85ddaSCiara Power BIGNUM *g = NULL; 122147a85ddaSCiara Power 122247a85ddaSCiara Power p = BN_bin2bn((const unsigned char *) 122347a85ddaSCiara Power xform->dh.p.data, 122447a85ddaSCiara Power xform->dh.p.length, 122547a85ddaSCiara Power p); 122647a85ddaSCiara Power g = BN_bin2bn((const unsigned char *) 122747a85ddaSCiara Power xform->dh.g.data, 122847a85ddaSCiara Power xform->dh.g.length, 122947a85ddaSCiara Power g); 123047a85ddaSCiara Power if (!p || !g) 123147a85ddaSCiara Power goto err_dh; 123247a85ddaSCiara Power 1233c794b40cSKai Ji dh = DH_new(); 1234ac42813aSSunila Sahu if (dh == NULL) { 1235ac42813aSSunila Sahu OPENSSL_LOG(ERR, 1236f665790aSDavid Marchand "failed to allocate resources"); 1237ac42813aSSunila Sahu goto err_dh; 1238ac42813aSSunila Sahu } 12390b5284adSAshish Gupta ret = set_dh_params(dh, p, g); 1240ac42813aSSunila Sahu if (ret) { 1241ac42813aSSunila Sahu DH_free(dh); 1242ac42813aSSunila Sahu goto err_dh; 1243ac42813aSSunila Sahu } 1244c794b40cSKai Ji #endif 1245ac42813aSSunila Sahu asym_session->u.dh.dh_key = dh; 1246ac42813aSSunila Sahu asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_DH; 1247ac42813aSSunila Sahu break; 1248ac42813aSSunila Sahu 1249ac42813aSSunila Sahu err_dh: 1250f665790aSDavid Marchand OPENSSL_LOG(ERR, " failed to set dh params"); 125147a85ddaSCiara Power #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 125247a85ddaSCiara Power BN_free(*p); 125347a85ddaSCiara Power BN_free(*g); 125447a85ddaSCiara Power #else 1255ac42813aSSunila Sahu BN_free(p); 1256ac42813aSSunila Sahu BN_free(g); 125747a85ddaSCiara Power #endif 1258ac42813aSSunila Sahu return -1; 1259ac42813aSSunila Sahu } 1260ac42813aSSunila Sahu case RTE_CRYPTO_ASYM_XFORM_DSA: 1261ac42813aSSunila Sahu { 12624c7ae22fSKai Ji #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 126347a85ddaSCiara Power BIGNUM **p = &asym_session->u.s.p; 126447a85ddaSCiara Power BIGNUM **g = &asym_session->u.s.g; 126547a85ddaSCiara Power BIGNUM **q = &asym_session->u.s.q; 126647a85ddaSCiara Power BIGNUM **priv_key = &asym_session->u.s.priv_key; 12679d91c304SGowrishankar Muthukrishnan BIGNUM *pub_key = NULL; 12684c7ae22fSKai Ji OSSL_PARAM_BLD *param_bld = NULL; 12694c7ae22fSKai Ji 127047a85ddaSCiara Power *p = BN_bin2bn((const unsigned char *) 12714c7ae22fSKai Ji xform->dsa.p.data, 12724c7ae22fSKai Ji xform->dsa.p.length, 127347a85ddaSCiara Power *p); 12744c7ae22fSKai Ji 127547a85ddaSCiara Power *g = BN_bin2bn((const unsigned char *) 12764c7ae22fSKai Ji xform->dsa.g.data, 12774c7ae22fSKai Ji xform->dsa.g.length, 127847a85ddaSCiara Power *g); 12794c7ae22fSKai Ji 128047a85ddaSCiara Power *q = BN_bin2bn((const unsigned char *) 12814c7ae22fSKai Ji xform->dsa.q.data, 12824c7ae22fSKai Ji xform->dsa.q.length, 128347a85ddaSCiara Power *q); 128447a85ddaSCiara Power if (!*p || !*q || !*g) 12854c7ae22fSKai Ji goto err_dsa; 12864c7ae22fSKai Ji 128747a85ddaSCiara Power *priv_key = BN_bin2bn((const unsigned char *) 12884c7ae22fSKai Ji xform->dsa.x.data, 12894c7ae22fSKai Ji xform->dsa.x.length, 129047a85ddaSCiara Power *priv_key); 129147a85ddaSCiara Power if (*priv_key == NULL) 12924c7ae22fSKai Ji goto err_dsa; 12934c7ae22fSKai Ji 12944c7ae22fSKai Ji param_bld = OSSL_PARAM_BLD_new(); 12954c7ae22fSKai Ji if (!param_bld) { 1296f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to allocate resources"); 12974c7ae22fSKai Ji goto err_dsa; 12984c7ae22fSKai Ji } 12994c7ae22fSKai Ji 130047a85ddaSCiara Power if (!OSSL_PARAM_BLD_push_BN(param_bld, OSSL_PKEY_PARAM_FFC_P, *p) 130147a85ddaSCiara Power || !OSSL_PARAM_BLD_push_BN(param_bld, OSSL_PKEY_PARAM_FFC_G, *g) 130247a85ddaSCiara Power || !OSSL_PARAM_BLD_push_BN(param_bld, OSSL_PKEY_PARAM_FFC_Q, *q) 130347a85ddaSCiara Power || !OSSL_PARAM_BLD_push_BN(param_bld, OSSL_PKEY_PARAM_PRIV_KEY, 130447a85ddaSCiara Power *priv_key)) { 13054c7ae22fSKai Ji OSSL_PARAM_BLD_free(param_bld); 1306f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to allocate resources"); 13074c7ae22fSKai Ji goto err_dsa; 13084c7ae22fSKai Ji } 13094c7ae22fSKai Ji asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_DSA; 13104c7ae22fSKai Ji asym_session->u.s.param_bld = param_bld; 13114c7ae22fSKai Ji 13124c7ae22fSKai Ji break; 13134c7ae22fSKai Ji #else 1314ac42813aSSunila Sahu BIGNUM *p = NULL, *g = NULL; 1315ac42813aSSunila Sahu BIGNUM *q = NULL, *priv_key = NULL; 1316ac42813aSSunila Sahu BIGNUM *pub_key = BN_new(); 1317ac42813aSSunila Sahu BN_zero(pub_key); 1318ac42813aSSunila Sahu 1319ac42813aSSunila Sahu p = BN_bin2bn((const unsigned char *) 1320ac42813aSSunila Sahu xform->dsa.p.data, 1321ac42813aSSunila Sahu xform->dsa.p.length, 1322ac42813aSSunila Sahu p); 1323ac42813aSSunila Sahu 1324ac42813aSSunila Sahu g = BN_bin2bn((const unsigned char *) 1325ac42813aSSunila Sahu xform->dsa.g.data, 1326ac42813aSSunila Sahu xform->dsa.g.length, 1327ac42813aSSunila Sahu g); 1328ac42813aSSunila Sahu 1329ac42813aSSunila Sahu q = BN_bin2bn((const unsigned char *) 1330ac42813aSSunila Sahu xform->dsa.q.data, 1331ac42813aSSunila Sahu xform->dsa.q.length, 1332ac42813aSSunila Sahu q); 1333ac42813aSSunila Sahu if (!p || !q || !g) 1334ac42813aSSunila Sahu goto err_dsa; 1335ac42813aSSunila Sahu 1336ac42813aSSunila Sahu priv_key = BN_bin2bn((const unsigned char *) 1337ac42813aSSunila Sahu xform->dsa.x.data, 1338ac42813aSSunila Sahu xform->dsa.x.length, 1339ac42813aSSunila Sahu priv_key); 1340ac42813aSSunila Sahu if (priv_key == NULL) 1341ac42813aSSunila Sahu goto err_dsa; 1342ac42813aSSunila Sahu 1343ac42813aSSunila Sahu DSA *dsa = DSA_new(); 1344ac42813aSSunila Sahu if (dsa == NULL) { 1345ac42813aSSunila Sahu OPENSSL_LOG(ERR, 1346f665790aSDavid Marchand " failed to allocate resources"); 1347ac42813aSSunila Sahu goto err_dsa; 1348ac42813aSSunila Sahu } 1349ac42813aSSunila Sahu 13500b5284adSAshish Gupta ret = set_dsa_params(dsa, p, q, g); 1351ac42813aSSunila Sahu if (ret) { 1352ac42813aSSunila Sahu DSA_free(dsa); 1353f665790aSDavid Marchand OPENSSL_LOG(ERR, "Failed to dsa params"); 1354ac42813aSSunila Sahu goto err_dsa; 1355ac42813aSSunila Sahu } 1356ac42813aSSunila Sahu 1357ac42813aSSunila Sahu /* 1358ac42813aSSunila Sahu * openssl 1.1.0 mandate that public key can't be 1359ac42813aSSunila Sahu * NULL in very first call. so set a dummy pub key. 1360ac42813aSSunila Sahu * to keep consistency, lets follow same approach for 1361ac42813aSSunila Sahu * both versions 1362ac42813aSSunila Sahu */ 1363ac42813aSSunila Sahu /* just set dummy public for very 1st call */ 13640b5284adSAshish Gupta ret = set_dsa_keys(dsa, pub_key, priv_key); 1365ac42813aSSunila Sahu if (ret) { 1366ac42813aSSunila Sahu DSA_free(dsa); 1367f665790aSDavid Marchand OPENSSL_LOG(ERR, "Failed to set keys"); 136847a85ddaSCiara Power goto err_dsa; 1369ac42813aSSunila Sahu } 1370ac42813aSSunila Sahu asym_session->u.s.dsa = dsa; 1371ac42813aSSunila Sahu asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_DSA; 1372ac42813aSSunila Sahu break; 13734c7ae22fSKai Ji #endif 1374ac42813aSSunila Sahu err_dsa: 137547a85ddaSCiara Power #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 137647a85ddaSCiara Power BN_free(*p); 137747a85ddaSCiara Power BN_free(*q); 137847a85ddaSCiara Power BN_free(*g); 137947a85ddaSCiara Power BN_free(*priv_key); 138047a85ddaSCiara Power #else 1381ac42813aSSunila Sahu BN_free(p); 1382ac42813aSSunila Sahu BN_free(q); 1383ac42813aSSunila Sahu BN_free(g); 1384ac42813aSSunila Sahu BN_free(priv_key); 138547a85ddaSCiara Power #endif 1386ac42813aSSunila Sahu BN_free(pub_key); 1387ac42813aSSunila Sahu return -1; 1388ac42813aSSunila Sahu } 13895a74d7fdSGowrishankar Muthukrishnan case RTE_CRYPTO_ASYM_XFORM_ECFPM: 13905a74d7fdSGowrishankar Muthukrishnan { 13915a74d7fdSGowrishankar Muthukrishnan #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 13925a74d7fdSGowrishankar Muthukrishnan EC_GROUP *ecgrp = NULL; 13935a74d7fdSGowrishankar Muthukrishnan 13945a74d7fdSGowrishankar Muthukrishnan asym_session->xfrm_type = xform->xform_type; 13955a74d7fdSGowrishankar Muthukrishnan 13965a74d7fdSGowrishankar Muthukrishnan switch (xform->ec.curve_id) { 13975a74d7fdSGowrishankar Muthukrishnan case RTE_CRYPTO_EC_GROUP_SECP192R1: 13985a74d7fdSGowrishankar Muthukrishnan ecgrp = EC_GROUP_new_by_curve_name(NID_secp192k1); 13995a74d7fdSGowrishankar Muthukrishnan break; 14005a74d7fdSGowrishankar Muthukrishnan case RTE_CRYPTO_EC_GROUP_SECP224R1: 14015a74d7fdSGowrishankar Muthukrishnan ecgrp = EC_GROUP_new_by_curve_name(NID_secp224r1); 14025a74d7fdSGowrishankar Muthukrishnan break; 14035a74d7fdSGowrishankar Muthukrishnan case RTE_CRYPTO_EC_GROUP_SECP256R1: 14045a74d7fdSGowrishankar Muthukrishnan ecgrp = EC_GROUP_new_by_curve_name(NID_secp256k1); 14055a74d7fdSGowrishankar Muthukrishnan break; 14065a74d7fdSGowrishankar Muthukrishnan case RTE_CRYPTO_EC_GROUP_SECP384R1: 14075a74d7fdSGowrishankar Muthukrishnan ecgrp = EC_GROUP_new_by_curve_name(NID_secp384r1); 14085a74d7fdSGowrishankar Muthukrishnan break; 14095a74d7fdSGowrishankar Muthukrishnan case RTE_CRYPTO_EC_GROUP_SECP521R1: 14105a74d7fdSGowrishankar Muthukrishnan ecgrp = EC_GROUP_new_by_curve_name(NID_secp521r1); 14115a74d7fdSGowrishankar Muthukrishnan break; 14125a74d7fdSGowrishankar Muthukrishnan case RTE_CRYPTO_EC_GROUP_ED25519: 14135a74d7fdSGowrishankar Muthukrishnan ecgrp = EC_GROUP_new_by_curve_name(NID_ED25519); 14145a74d7fdSGowrishankar Muthukrishnan break; 14155a74d7fdSGowrishankar Muthukrishnan case RTE_CRYPTO_EC_GROUP_ED448: 14165a74d7fdSGowrishankar Muthukrishnan ecgrp = EC_GROUP_new_by_curve_name(NID_ED448); 14175a74d7fdSGowrishankar Muthukrishnan break; 14185a74d7fdSGowrishankar Muthukrishnan default: 14195a74d7fdSGowrishankar Muthukrishnan break; 14205a74d7fdSGowrishankar Muthukrishnan } 14215a74d7fdSGowrishankar Muthukrishnan 14225a74d7fdSGowrishankar Muthukrishnan asym_session->u.ec.curve_id = xform->ec.curve_id; 14235a74d7fdSGowrishankar Muthukrishnan asym_session->u.ec.group = ecgrp; 14245a74d7fdSGowrishankar Muthukrishnan break; 14255a74d7fdSGowrishankar Muthukrishnan #else 14265a74d7fdSGowrishankar Muthukrishnan OPENSSL_LOG(WARNING, "ECFPM unsupported for OpenSSL Version < 3.0"); 14275a74d7fdSGowrishankar Muthukrishnan return -ENOTSUP; 14285a74d7fdSGowrishankar Muthukrishnan #endif 14295a74d7fdSGowrishankar Muthukrishnan } 14303b7d638fSGowrishankar Muthukrishnan case RTE_CRYPTO_ASYM_XFORM_SM2: 14313b7d638fSGowrishankar Muthukrishnan { 14323b7d638fSGowrishankar Muthukrishnan #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 143399218c39SGowrishankar Muthukrishnan #ifndef OPENSSL_NO_SM2 14343b7d638fSGowrishankar Muthukrishnan OSSL_PARAM_BLD *param_bld = NULL; 14353b7d638fSGowrishankar Muthukrishnan OSSL_PARAM *params = NULL; 1436badc0c6fSGowrishankar Muthukrishnan BIGNUM *pkey_bn = NULL; 143747a85ddaSCiara Power uint8_t pubkey[65]; 1438badc0c6fSGowrishankar Muthukrishnan size_t len = 0; 14393b7d638fSGowrishankar Muthukrishnan int ret = -1; 14403b7d638fSGowrishankar Muthukrishnan 14413b7d638fSGowrishankar Muthukrishnan param_bld = OSSL_PARAM_BLD_new(); 14423b7d638fSGowrishankar Muthukrishnan if (!param_bld) { 1443f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to allocate params"); 14443b7d638fSGowrishankar Muthukrishnan goto err_sm2; 14453b7d638fSGowrishankar Muthukrishnan } 14463b7d638fSGowrishankar Muthukrishnan 14473b7d638fSGowrishankar Muthukrishnan ret = OSSL_PARAM_BLD_push_utf8_string(param_bld, 14483b7d638fSGowrishankar Muthukrishnan OSSL_ASYM_CIPHER_PARAM_DIGEST, "SM3", 0); 14493b7d638fSGowrishankar Muthukrishnan if (!ret) { 1450f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to push params"); 14513b7d638fSGowrishankar Muthukrishnan goto err_sm2; 14523b7d638fSGowrishankar Muthukrishnan } 14533b7d638fSGowrishankar Muthukrishnan 1454badc0c6fSGowrishankar Muthukrishnan ret = OSSL_PARAM_BLD_push_utf8_string(param_bld, 1455badc0c6fSGowrishankar Muthukrishnan OSSL_PKEY_PARAM_GROUP_NAME, "SM2", 0); 1456badc0c6fSGowrishankar Muthukrishnan if (!ret) { 1457f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to push params"); 1458badc0c6fSGowrishankar Muthukrishnan goto err_sm2; 1459badc0c6fSGowrishankar Muthukrishnan } 1460badc0c6fSGowrishankar Muthukrishnan 1461badc0c6fSGowrishankar Muthukrishnan pkey_bn = BN_bin2bn((const unsigned char *)xform->ec.pkey.data, 1462badc0c6fSGowrishankar Muthukrishnan xform->ec.pkey.length, pkey_bn); 1463badc0c6fSGowrishankar Muthukrishnan 1464badc0c6fSGowrishankar Muthukrishnan ret = OSSL_PARAM_BLD_push_BN(param_bld, OSSL_PKEY_PARAM_PRIV_KEY, 1465badc0c6fSGowrishankar Muthukrishnan pkey_bn); 1466badc0c6fSGowrishankar Muthukrishnan if (!ret) { 1467f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to push params"); 1468badc0c6fSGowrishankar Muthukrishnan goto err_sm2; 1469badc0c6fSGowrishankar Muthukrishnan } 1470badc0c6fSGowrishankar Muthukrishnan 1471badc0c6fSGowrishankar Muthukrishnan memset(pubkey, 0, sizeof(pubkey)); 1472badc0c6fSGowrishankar Muthukrishnan pubkey[0] = 0x04; 1473badc0c6fSGowrishankar Muthukrishnan len += 1; 1474badc0c6fSGowrishankar Muthukrishnan memcpy(&pubkey[len], xform->ec.q.x.data, xform->ec.q.x.length); 1475badc0c6fSGowrishankar Muthukrishnan len += xform->ec.q.x.length; 1476badc0c6fSGowrishankar Muthukrishnan memcpy(&pubkey[len], xform->ec.q.y.data, xform->ec.q.y.length); 1477badc0c6fSGowrishankar Muthukrishnan len += xform->ec.q.y.length; 1478badc0c6fSGowrishankar Muthukrishnan 1479badc0c6fSGowrishankar Muthukrishnan ret = OSSL_PARAM_BLD_push_octet_string(param_bld, 1480badc0c6fSGowrishankar Muthukrishnan OSSL_PKEY_PARAM_PUB_KEY, pubkey, len); 1481badc0c6fSGowrishankar Muthukrishnan if (!ret) { 1482f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to push params"); 1483badc0c6fSGowrishankar Muthukrishnan goto err_sm2; 1484badc0c6fSGowrishankar Muthukrishnan } 1485badc0c6fSGowrishankar Muthukrishnan 14863b7d638fSGowrishankar Muthukrishnan params = OSSL_PARAM_BLD_to_param(param_bld); 14873b7d638fSGowrishankar Muthukrishnan if (!params) { 1488f665790aSDavid Marchand OPENSSL_LOG(ERR, "failed to push params"); 14893b7d638fSGowrishankar Muthukrishnan goto err_sm2; 14903b7d638fSGowrishankar Muthukrishnan } 14913b7d638fSGowrishankar Muthukrishnan 14923b7d638fSGowrishankar Muthukrishnan asym_session->u.sm2.params = params; 14933b7d638fSGowrishankar Muthukrishnan OSSL_PARAM_BLD_free(param_bld); 14949d91c304SGowrishankar Muthukrishnan BN_free(pkey_bn); 14953b7d638fSGowrishankar Muthukrishnan 14963b7d638fSGowrishankar Muthukrishnan asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_SM2; 14973b7d638fSGowrishankar Muthukrishnan break; 14983b7d638fSGowrishankar Muthukrishnan err_sm2: 14993b7d638fSGowrishankar Muthukrishnan if (param_bld) 15003b7d638fSGowrishankar Muthukrishnan OSSL_PARAM_BLD_free(param_bld); 15013b7d638fSGowrishankar Muthukrishnan 15023b7d638fSGowrishankar Muthukrishnan if (asym_session->u.sm2.params) 15033b7d638fSGowrishankar Muthukrishnan OSSL_PARAM_free(asym_session->u.sm2.params); 15043b7d638fSGowrishankar Muthukrishnan 15059d91c304SGowrishankar Muthukrishnan BN_free(pkey_bn); 15063b7d638fSGowrishankar Muthukrishnan return -1; 15076e892f5aSCiara Power #else 150899218c39SGowrishankar Muthukrishnan OPENSSL_LOG(WARNING, "SM2 unsupported in current OpenSSL Version"); 150999218c39SGowrishankar Muthukrishnan return -ENOTSUP; 151099218c39SGowrishankar Muthukrishnan #endif 151199218c39SGowrishankar Muthukrishnan #else 15126e892f5aSCiara Power OPENSSL_LOG(WARNING, "SM2 unsupported for OpenSSL Version < 3.0"); 15136e892f5aSCiara Power return -ENOTSUP; 15143b7d638fSGowrishankar Muthukrishnan #endif 15153b7d638fSGowrishankar Muthukrishnan } 15165a74d7fdSGowrishankar Muthukrishnan case RTE_CRYPTO_ASYM_XFORM_EDDSA: 15175a74d7fdSGowrishankar Muthukrishnan { 15185a74d7fdSGowrishankar Muthukrishnan #if (OPENSSL_VERSION_NUMBER >= 0x30300000L) 15195a74d7fdSGowrishankar Muthukrishnan OSSL_PARAM_BLD *param_bld = NULL; 15205a74d7fdSGowrishankar Muthukrishnan OSSL_PARAM *params = NULL; 15215a74d7fdSGowrishankar Muthukrishnan int ret = -1; 15225a74d7fdSGowrishankar Muthukrishnan 15235a74d7fdSGowrishankar Muthukrishnan asym_session->u.eddsa.curve_id = xform->ec.curve_id; 15245a74d7fdSGowrishankar Muthukrishnan 15255a74d7fdSGowrishankar Muthukrishnan param_bld = OSSL_PARAM_BLD_new(); 15265a74d7fdSGowrishankar Muthukrishnan if (!param_bld) { 15275a74d7fdSGowrishankar Muthukrishnan OPENSSL_LOG(ERR, "failed to allocate params"); 15285a74d7fdSGowrishankar Muthukrishnan goto err_eddsa; 15295a74d7fdSGowrishankar Muthukrishnan } 15305a74d7fdSGowrishankar Muthukrishnan 15315a74d7fdSGowrishankar Muthukrishnan ret = OSSL_PARAM_BLD_push_utf8_string(param_bld, 15325a74d7fdSGowrishankar Muthukrishnan OSSL_PKEY_PARAM_GROUP_NAME, "ED25519", sizeof("ED25519")); 15335a74d7fdSGowrishankar Muthukrishnan if (!ret) { 15345a74d7fdSGowrishankar Muthukrishnan OPENSSL_LOG(ERR, "failed to push params"); 15355a74d7fdSGowrishankar Muthukrishnan goto err_eddsa; 15365a74d7fdSGowrishankar Muthukrishnan } 15375a74d7fdSGowrishankar Muthukrishnan 15385a74d7fdSGowrishankar Muthukrishnan ret = OSSL_PARAM_BLD_push_octet_string(param_bld, OSSL_PKEY_PARAM_PRIV_KEY, 15395a74d7fdSGowrishankar Muthukrishnan xform->ec.pkey.data, xform->ec.pkey.length); 15405a74d7fdSGowrishankar Muthukrishnan if (!ret) { 15415a74d7fdSGowrishankar Muthukrishnan OPENSSL_LOG(ERR, "failed to push params"); 15425a74d7fdSGowrishankar Muthukrishnan goto err_eddsa; 15435a74d7fdSGowrishankar Muthukrishnan } 15445a74d7fdSGowrishankar Muthukrishnan 15455a74d7fdSGowrishankar Muthukrishnan ret = OSSL_PARAM_BLD_push_octet_string(param_bld, OSSL_PKEY_PARAM_PUB_KEY, 15465a74d7fdSGowrishankar Muthukrishnan xform->ec.q.x.data, xform->ec.q.x.length); 15475a74d7fdSGowrishankar Muthukrishnan if (!ret) { 15485a74d7fdSGowrishankar Muthukrishnan OPENSSL_LOG(ERR, "failed to push params"); 15495a74d7fdSGowrishankar Muthukrishnan goto err_eddsa; 15505a74d7fdSGowrishankar Muthukrishnan } 15515a74d7fdSGowrishankar Muthukrishnan 15525a74d7fdSGowrishankar Muthukrishnan params = OSSL_PARAM_BLD_to_param(param_bld); 15535a74d7fdSGowrishankar Muthukrishnan if (!params) { 15545a74d7fdSGowrishankar Muthukrishnan OPENSSL_LOG(ERR, "failed to push params"); 15555a74d7fdSGowrishankar Muthukrishnan goto err_eddsa; 15565a74d7fdSGowrishankar Muthukrishnan } 15575a74d7fdSGowrishankar Muthukrishnan 15585a74d7fdSGowrishankar Muthukrishnan asym_session->u.eddsa.params = params; 15595a74d7fdSGowrishankar Muthukrishnan OSSL_PARAM_BLD_free(param_bld); 15605a74d7fdSGowrishankar Muthukrishnan 15615a74d7fdSGowrishankar Muthukrishnan asym_session->xfrm_type = RTE_CRYPTO_ASYM_XFORM_EDDSA; 15625a74d7fdSGowrishankar Muthukrishnan break; 15635a74d7fdSGowrishankar Muthukrishnan err_eddsa: 15645a74d7fdSGowrishankar Muthukrishnan if (param_bld) 15655a74d7fdSGowrishankar Muthukrishnan OSSL_PARAM_BLD_free(param_bld); 15665a74d7fdSGowrishankar Muthukrishnan 15675a74d7fdSGowrishankar Muthukrishnan if (asym_session->u.eddsa.params) 15685a74d7fdSGowrishankar Muthukrishnan OSSL_PARAM_free(asym_session->u.eddsa.params); 15695a74d7fdSGowrishankar Muthukrishnan 15705a74d7fdSGowrishankar Muthukrishnan return -1; 15715a74d7fdSGowrishankar Muthukrishnan #else 15725a74d7fdSGowrishankar Muthukrishnan OPENSSL_LOG(WARNING, "EdDSA unsupported for OpenSSL Version < 3.3"); 15735a74d7fdSGowrishankar Muthukrishnan return -ENOTSUP; 15745a74d7fdSGowrishankar Muthukrishnan #endif 15755a74d7fdSGowrishankar Muthukrishnan } 15763e9d6bd4SSunila Sahu default: 15774c7ae22fSKai Ji return ret; 15783e9d6bd4SSunila Sahu } 15793e9d6bd4SSunila Sahu 15803e9d6bd4SSunila Sahu return 0; 15813e9d6bd4SSunila Sahu } 15823e9d6bd4SSunila Sahu 15833e9d6bd4SSunila Sahu /** Configure the session from a crypto xform chain */ 15843e9d6bd4SSunila Sahu static int 15853e9d6bd4SSunila Sahu openssl_pmd_asym_session_configure(struct rte_cryptodev *dev __rte_unused, 15863e9d6bd4SSunila Sahu struct rte_crypto_asym_xform *xform, 15871f1e4b7cSCiara Power struct rte_cryptodev_asym_session *sess) 15883e9d6bd4SSunila Sahu { 15893e9d6bd4SSunila Sahu void *asym_sess_private_data; 15903e9d6bd4SSunila Sahu int ret; 15913e9d6bd4SSunila Sahu 15923e9d6bd4SSunila Sahu if (unlikely(sess == NULL)) { 15933e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, "invalid asymmetric session struct"); 15943e9d6bd4SSunila Sahu return -EINVAL; 15953e9d6bd4SSunila Sahu } 15963e9d6bd4SSunila Sahu 15971f1e4b7cSCiara Power asym_sess_private_data = sess->sess_private_data; 15983e9d6bd4SSunila Sahu ret = openssl_set_asym_session_parameters(asym_sess_private_data, 15993e9d6bd4SSunila Sahu xform); 16003e9d6bd4SSunila Sahu if (ret != 0) { 16013e9d6bd4SSunila Sahu OPENSSL_LOG(ERR, "failed configure session parameters"); 16023e9d6bd4SSunila Sahu return ret; 16033e9d6bd4SSunila Sahu } 16043e9d6bd4SSunila Sahu 16053e9d6bd4SSunila Sahu return 0; 16063e9d6bd4SSunila Sahu } 16078a9867a6SSlawomir Mrozowicz 16088a9867a6SSlawomir Mrozowicz /** Clear the memory of session so it doesn't leave key material behind */ 16098a9867a6SSlawomir Mrozowicz static void 1610bdce2564SAkhil Goyal openssl_pmd_sym_session_clear(struct rte_cryptodev *dev __rte_unused, 1611b3bbd9e5SSlawomir Mrozowicz struct rte_cryptodev_sym_session *sess) 16128a9867a6SSlawomir Mrozowicz { 16132a440d6aSAkhil Goyal void *sess_priv = CRYPTODEV_GET_SYM_SESS_PRIV(sess); 1614b3bbd9e5SSlawomir Mrozowicz 1615b3bbd9e5SSlawomir Mrozowicz /* Zero out the whole structure */ 1616b3bbd9e5SSlawomir Mrozowicz openssl_reset_session(sess_priv); 16178a9867a6SSlawomir Mrozowicz } 16188a9867a6SSlawomir Mrozowicz 16193e9d6bd4SSunila Sahu static void openssl_reset_asym_session(struct openssl_asym_session *sess) 16203e9d6bd4SSunila Sahu { 16213e9d6bd4SSunila Sahu switch (sess->xfrm_type) { 16223e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_RSA: 1623d7bd42f6SKai Ji #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 1624d7bd42f6SKai Ji EVP_PKEY_CTX_free(sess->u.r.ctx); 1625d7bd42f6SKai Ji #else 16263e9d6bd4SSunila Sahu if (sess->u.r.rsa) 16273e9d6bd4SSunila Sahu RSA_free(sess->u.r.rsa); 1628d7bd42f6SKai Ji #endif 16293e9d6bd4SSunila Sahu break; 16303e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_MODEX: 16313e9d6bd4SSunila Sahu if (sess->u.e.ctx) { 16323e9d6bd4SSunila Sahu BN_CTX_end(sess->u.e.ctx); 16333e9d6bd4SSunila Sahu BN_CTX_free(sess->u.e.ctx); 16343e9d6bd4SSunila Sahu } 16353e9d6bd4SSunila Sahu break; 16363e9d6bd4SSunila Sahu case RTE_CRYPTO_ASYM_XFORM_MODINV: 16373e9d6bd4SSunila Sahu if (sess->u.m.ctx) { 16383e9d6bd4SSunila Sahu BN_CTX_end(sess->u.m.ctx); 16393e9d6bd4SSunila Sahu BN_CTX_free(sess->u.m.ctx); 16403e9d6bd4SSunila Sahu } 16413e9d6bd4SSunila Sahu break; 1642ac42813aSSunila Sahu case RTE_CRYPTO_ASYM_XFORM_DH: 1643c794b40cSKai Ji #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 16449d91c304SGowrishankar Muthukrishnan OSSL_PARAM_BLD_free(sess->u.dh.param_bld); 16459d91c304SGowrishankar Muthukrishnan OSSL_PARAM_BLD_free(sess->u.dh.param_bld_peer); 1646c794b40cSKai Ji sess->u.dh.param_bld = NULL; 1647c794b40cSKai Ji sess->u.dh.param_bld_peer = NULL; 1648c794b40cSKai Ji #else 1649ac42813aSSunila Sahu if (sess->u.dh.dh_key) 1650ac42813aSSunila Sahu DH_free(sess->u.dh.dh_key); 1651c794b40cSKai Ji #endif 165247a85ddaSCiara Power BN_clear_free(sess->u.dh.p); 165347a85ddaSCiara Power BN_clear_free(sess->u.dh.g); 1654ac42813aSSunila Sahu break; 1655ac42813aSSunila Sahu case RTE_CRYPTO_ASYM_XFORM_DSA: 16564c7ae22fSKai Ji #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 16579d91c304SGowrishankar Muthukrishnan OSSL_PARAM_BLD_free(sess->u.s.param_bld); 16584c7ae22fSKai Ji sess->u.s.param_bld = NULL; 165947a85ddaSCiara Power BN_clear_free(sess->u.s.p); 166047a85ddaSCiara Power BN_clear_free(sess->u.s.q); 166147a85ddaSCiara Power BN_clear_free(sess->u.s.g); 166247a85ddaSCiara Power BN_clear_free(sess->u.s.priv_key); 16634c7ae22fSKai Ji #else 1664ac42813aSSunila Sahu if (sess->u.s.dsa) 1665ac42813aSSunila Sahu DSA_free(sess->u.s.dsa); 16664c7ae22fSKai Ji #endif 1667ac42813aSSunila Sahu break; 16683b7d638fSGowrishankar Muthukrishnan case RTE_CRYPTO_ASYM_XFORM_SM2: 16693b7d638fSGowrishankar Muthukrishnan #if (OPENSSL_VERSION_NUMBER >= 0x30000000L) 16703b7d638fSGowrishankar Muthukrishnan OSSL_PARAM_free(sess->u.sm2.params); 16713b7d638fSGowrishankar Muthukrishnan #endif 16725a74d7fdSGowrishankar Muthukrishnan break; 16735a74d7fdSGowrishankar Muthukrishnan case RTE_CRYPTO_ASYM_XFORM_EDDSA: 16745a74d7fdSGowrishankar Muthukrishnan #if (OPENSSL_VERSION_NUMBER >= 0x30300000L) 16755a74d7fdSGowrishankar Muthukrishnan OSSL_PARAM_free(sess->u.eddsa.params); 16765a74d7fdSGowrishankar Muthukrishnan #endif 16775a74d7fdSGowrishankar Muthukrishnan break; 16783e9d6bd4SSunila Sahu default: 16793e9d6bd4SSunila Sahu break; 16803e9d6bd4SSunila Sahu } 16813e9d6bd4SSunila Sahu } 16823e9d6bd4SSunila Sahu 16833e9d6bd4SSunila Sahu /** Clear the memory of asymmetric session 16843e9d6bd4SSunila Sahu * so it doesn't leave key material behind 16853e9d6bd4SSunila Sahu */ 16863e9d6bd4SSunila Sahu static void 16871f1e4b7cSCiara Power openssl_pmd_asym_session_clear(struct rte_cryptodev *dev __rte_unused, 16883e9d6bd4SSunila Sahu struct rte_cryptodev_asym_session *sess) 16893e9d6bd4SSunila Sahu { 16901f1e4b7cSCiara Power void *sess_priv = sess->sess_private_data; 16913e9d6bd4SSunila Sahu 16923e9d6bd4SSunila Sahu /* Zero out the whole structure */ 16933e9d6bd4SSunila Sahu if (sess_priv) { 16943e9d6bd4SSunila Sahu openssl_reset_asym_session(sess_priv); 16953e9d6bd4SSunila Sahu memset(sess_priv, 0, sizeof(struct openssl_asym_session)); 16963e9d6bd4SSunila Sahu } 16973e9d6bd4SSunila Sahu } 16983e9d6bd4SSunila Sahu 16998a9867a6SSlawomir Mrozowicz struct rte_cryptodev_ops openssl_pmd_ops = { 17008a9867a6SSlawomir Mrozowicz .dev_configure = openssl_pmd_config, 17018a9867a6SSlawomir Mrozowicz .dev_start = openssl_pmd_start, 17028a9867a6SSlawomir Mrozowicz .dev_stop = openssl_pmd_stop, 17038a9867a6SSlawomir Mrozowicz .dev_close = openssl_pmd_close, 17048a9867a6SSlawomir Mrozowicz 17058a9867a6SSlawomir Mrozowicz .stats_get = openssl_pmd_stats_get, 17068a9867a6SSlawomir Mrozowicz .stats_reset = openssl_pmd_stats_reset, 17078a9867a6SSlawomir Mrozowicz 17088a9867a6SSlawomir Mrozowicz .dev_infos_get = openssl_pmd_info_get, 17098a9867a6SSlawomir Mrozowicz 17108a9867a6SSlawomir Mrozowicz .queue_pair_setup = openssl_pmd_qp_setup, 17118a9867a6SSlawomir Mrozowicz .queue_pair_release = openssl_pmd_qp_release, 17128a9867a6SSlawomir Mrozowicz 1713012c5076SPablo de Lara .sym_session_get_size = openssl_pmd_sym_session_get_size, 17143e9d6bd4SSunila Sahu .asym_session_get_size = openssl_pmd_asym_session_get_size, 1715012c5076SPablo de Lara .sym_session_configure = openssl_pmd_sym_session_configure, 17163e9d6bd4SSunila Sahu .asym_session_configure = openssl_pmd_asym_session_configure, 17173e9d6bd4SSunila Sahu .sym_session_clear = openssl_pmd_sym_session_clear, 17183e9d6bd4SSunila Sahu .asym_session_clear = openssl_pmd_asym_session_clear 17198a9867a6SSlawomir Mrozowicz }; 17208a9867a6SSlawomir Mrozowicz 17218a9867a6SSlawomir Mrozowicz struct rte_cryptodev_ops *rte_openssl_pmd_ops = &openssl_pmd_ops; 1722