From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0053.outbound.protection.outlook.com [104.47.36.53]) by dpdk.org (Postfix) with ESMTP id D02171CB03 for ; Thu, 5 Apr 2018 13:26:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=27DULu3yuGcRDTARqfoxqkTnJuaYMHJe+8rszfxpOgw=; b=TTWH+iNEylVxbm4mJzAMLk3bI2E2Cwsv8mwcj87gS45jZoMOOX75ykKc1CeF8l7ln5vQwXaLkvWQY5/twepjHm8/ozYJc1/siNrPX6DaV/KAiEkuuMZwDXQlt3BSZX7U2nSRBIZGpq85+HyB/8QIrCGyiZmfF3bW5i2IaScWKxY= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Shally.Verma@cavium.com; Received: from hyd1sverma-dt.caveonetworks.com (115.113.156.2) by CY4PR0701MB3634.namprd07.prod.outlook.com (2603:10b6:910:92::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.653.12; Thu, 5 Apr 2018 11:26:07 +0000 From: Shally Verma To: pablo.de.lara.guarch@intel.com Cc: declan.doherty@intel.com, fiona.trahe@intel.com, pathreya@caviumnetworks.com, ssahu@caviumnetworks.com, agupta@caviumnetworks.com, dev@dpdk.org, Sunila Sahu , Ashish Gupta Date: Thu, 5 Apr 2018 16:54:46 +0530 Message-Id: <1522927489-23668-4-git-send-email-shally.verma@caviumnetworks.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1522927489-23668-1-git-send-email-shally.verma@caviumnetworks.com> References: <1522927489-23668-1-git-send-email-shally.verma@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [115.113.156.2] X-ClientProxiedBy: BM1PR0101CA0013.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:18::23) To CY4PR0701MB3634.namprd07.prod.outlook.com (2603:10b6:910:92::36) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a62e647e-e6dc-40a5-d45c-08d59ae80818 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:CY4PR0701MB3634; X-Microsoft-Exchange-Diagnostics: 1; CY4PR0701MB3634; 3:Jaxdk9wsII0oFmUI2uMYImL4cB682bbnEWozSwCoJtM3aDnx+cGUscCs5QLtzyoWXCBkOBde6sRswzriHswkShNm6tjDaE8TcZisSWuG0BJ5Gl5MZkv6n4M2SMr6qNw3PAM2WM+OBPA/WuP4vSj7G4LAzZfQh+3AvxgSSR/FQCRcSfriTUXY8MYz18oy1GGtIPfeE7ZFPtbzJyEJcB7hl+pd11/dir76wCkZmIZj/XC9OABfTbYaq4FleIx15deC; 25:fvEgfy1ah4YvxXebtI2Mpi6UO1BnbzwHsqOIEbTBm7N12ZQbUd/H4MsMCSANX9PjmvNk13rYq8Lg1EVE6+oURgGHyKlrIZAtCUAX+flqbrIhss6w5OTo+4qjFtu3/RMzUEiN/ysQHK8Wtkn/kzFe5W+eBOrtqKg0a+gcR0oOQJ93DlzYQi7ImmEpns5dpjcbui8b/OUybZFlYQy/rIYLxoVYXzPBJkQAOYGv8/noJBz/1alJMpgBY1e6fryl241S56rJ2JUuoSWVdjvKbOwNZ2hDNCoQE93HoMJxY4x7gP6vVI2bDgAwPdek0Lx1RPRy0QyGaMSzrnCd+RjLfJrq7A==; 31:iAVxSBiUWunu5NrmvvSb7Y6JFGHmCvNY92gtX57Eb2FFl8xjFx1Vf+aEkloQb7O/dChNNMTa3tR5xAFGoR3TvagQrw8Suam36108SzX9UjTfhJKpDkpQfdNwVxUsK3fkOmHvm27TB49k9WccOF+9luFNMHB4xGHJjPSvpFQnXjZXBnbVEbrNgpXX1UOBniL8dzp8eNjoOSNA2xpmLfFscae13Dtp5zAo56xtFYpaud4= X-MS-TrafficTypeDiagnostic: CY4PR0701MB3634: X-Microsoft-Exchange-Diagnostics: 1; CY4PR0701MB3634; 20:VqRmNrhRZCCKVHGOsqQDQv/3lOhR85l27eZDH1Ro8STn3+2D8oCT6InsVBWIC+5zDI5sp491L0LkwcBCx/teWzoRzij6jS5XIJ/GvFwsVtmbXmjxM+zjy3j2/b8EL+gZ6p2mMRqYQIXVBEjBo6/YOEaFNj7L9GvB8PmgdOBXKB5hgDwrILNFHMdYBmzi4O/MQafCA1zH7l0uA9Qqxbqd88UvSILIm70Mf2dmAT7K2jhaqykXmBTxQDIB0zQfgkrvRsrr3QVFfuRsB8sg4nlAzW6JvCbt6CItE0ZTA484AF7uUfM4L+F4Zjl9qwpf/IYTD6rBjxTRCYJHsxAk2wFXst6x8AgUVdv2DA9FZ8HYGkzCxDr86DQt19XNXm16wwCsXypz1XrruQdHQWPfRKhQvewvhA6Vc9LAMHgis9IE044/8I6SYJQaoyElMYi10Ue6Lef+4ev5C3FXQOo+ubGh7f2u0EYMkhTPjd5naM+M/Tn9HuGFQxw0akVkLPYYBZVJDd8Hni1GQ8Vx1ddzSMXNvMIuy98XztsAPYpfKu8RztsPY56R9u3S7587VRk/oL2vScJBIcd9hxRI4DCtsInDtwJgznRAVD87FWD9X/FaYgQ=; 4:GeAMiOmoZh+YfEgJ5YnGxp3XUM2d3e0I/Iw2JnkQTnbw2qm45qXFTDq7CUdegCLbcl4zya9Htg+vhA6jl1F1GxH96retc9HhhtKkVZdhHXXnyYWrjVbC7tsHdN9wAGvEhjQhVCw6N7XL+1SjfxnKVS+rtw0A3WyitK5e3lRumK1rlxeaiarHpeakOObVaOpsyxxlymBHvNgLnpsRhvu0N3NZVBLQ2VCG6oSKLGPT1q/tEbnXERARK3Q3XXMDmdyQGpcBY4wovxKwdp+lvCJddA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(3231221)(944501327)(52105095)(93006095)(10201501046)(6041310)(20161123564045)(20161123558120)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:CY4PR0701MB3634; BCL:0; PCL:0; RULEID:; SRVR:CY4PR0701MB3634; X-Forefront-PRVS: 06339BAE63 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(366004)(376002)(396003)(39860400002)(199004)(189003)(72206003)(478600001)(59450400001)(106356001)(6116002)(47776003)(7736002)(6486002)(55236004)(386003)(3846002)(4326008)(42882007)(66066001)(105586002)(486006)(2361001)(76176011)(6506007)(305945005)(25786009)(51416003)(16526019)(69596002)(5660300001)(186003)(2351001)(26005)(6916009)(36756003)(53416004)(6666003)(54906003)(48376002)(8936002)(52116002)(81156014)(476003)(8676002)(2616005)(956004)(11346002)(97736004)(446003)(68736007)(53936002)(6512007)(2906002)(316002)(107886003)(16586007)(50226002)(81166006)(50466002); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR0701MB3634; H:hyd1sverma-dt.caveonetworks.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY4PR0701MB3634; 23:TxU/MpFRsvNuvDDAyNSU3iBKLJPc0rR1FqMADYe?= =?us-ascii?Q?Y86x7cPO32FzB8T+g/KIAW4t7c6gQudF57DYwdL5uFcIuBRur4EyxsJY1y/7?= =?us-ascii?Q?72zyL6RoGCRbc1Mi+vG+CEnutiLNbuohDxCF8HSiA5mjs6ip4ygL53ANe9ey?= =?us-ascii?Q?6y/ZeHmdAVS+fI/fyoK8iBXDtoM4CSw0TO+cv9DZmfVWdTQeTX18tDj303Zn?= =?us-ascii?Q?K6nRCt31papDHVU5HLMoAQu0R3A6jbGjc3IVLqaEOAeUkSak7l+o5GOD1nJp?= =?us-ascii?Q?niBqAczLISVAjMXNTzAFMlkBhryiuOFNtRSpp/JGffujWcG0msBzoaDIO3n+?= =?us-ascii?Q?iNidb3+esw3urnBSatCLJUN9P4iUm7AppQIyzTfEMWgGzWWnM7sw/LlaUPrk?= =?us-ascii?Q?n5gz8EHGfMxCZv9mlmuUu4gEncN5qOe4bLR2UT4l0zfcR2dySTP7td44HDvz?= =?us-ascii?Q?yeYpSw9qWNz1mmrrXe12yF4vaP/5CEiZTu6WFRtrZwClu3NtvmUgBcuiiJMY?= =?us-ascii?Q?YKAjZ3dkLo8rz4oMoE0ppgRDwBw7QOBfkeNAFoqQ2rTfAYxiEw0iZBjj1E3B?= =?us-ascii?Q?nOXNIl1zU7oIBCEoSNUJXYEsijYXaIXIta5V5Z/UZ5HUq/68nwH+hTDpPGj2?= =?us-ascii?Q?QIibcl3nf/rLL2DGGc88IYkSii/XsqlDsJ1UZKhpnOYMNZ/KS0q8R68A/NC9?= =?us-ascii?Q?bH9YUYnPtdt0ww6u7VsQmGW2KZYRFM1zGWZ6j9UA+xak/7JkstFzsU87obiU?= =?us-ascii?Q?4PDsyqFiqcJPhKZBeV/99G9LgFu1ziK9gMqk0tFzwmvJuyMnNi62204QD46m?= =?us-ascii?Q?fqyRg116Cgmzvy49Qt6bYKAHaYKaLM+4OW/TEO4PpOctJWdU/TqGRc4rs0zb?= =?us-ascii?Q?LaN8q9/OuGdIMO6TjkNk3oblJ1XAIQjNs223rTdmR+4ngBa+hskfY9sSowT7?= =?us-ascii?Q?tsr/b0yA8HOxUOcEMAKfidYoK4d2mfn60fagqIK9+n3Dek6gGufqbHaBNybc?= =?us-ascii?Q?XonFEOoXQJ8noUXHuFXARyjaIquhlObVD98bxQp/kXDieT9HL1Nr/PlDQduq?= =?us-ascii?Q?kt5fFcGvBzJZDGEA/j0vYPI2gCNRfyfvN9OEw9PY1MRxuKabbcm2ZFYk9UtJ?= =?us-ascii?Q?Xmpf6XIjR2gYEVlN4+2lMFBxIN765Oj226YCKG8VLk/L9DSgWO+PUc4uXTPF?= =?us-ascii?Q?EbSjMs9xQa98wJKNuUYOIKrhhK/9btEP/KyskCFwvrlE9lG2eNa/J5Mrrmg0?= =?us-ascii?Q?3PTxLFsawna9z10me/ktr/tINwzpXseKShyOhw3BzgcsfbHaZ6LYyu5iYLzd?= =?us-ascii?Q?vz8l244QHE4GUhwKHXIWboa/4FblI0VHdYUyVLlMfZEwAP91xFc80HU4JDA7?= =?us-ascii?Q?SH0KhcSbMgLTk5xXabQGoEWx0tYk=3D?= X-Microsoft-Antispam-Message-Info: Ge2FHEVDe25xjMXRNgl5vMj0nU7mt9gQzBXlwgtFPoYsgmJFvh2URJiq+dX1uMmuQBsKiViCPk8RTTsyWK+NCuRGF9Pl2yOUDlCpco1xn5s/Da43PSCAyBNyLL5HNMDRKF4EnRxz4+5Px4QhH9SbiEhuRzsNP9IuNrsSqRK9TZNQBV2MuEcJhI0nfIU1GB21 X-Microsoft-Exchange-Diagnostics: 1; CY4PR0701MB3634; 6:AcoOLzgP6OLs3lMqsCOmKgzIsMxxZS3ok8KQQJdP6FJpkqfIbTNKKY9/frFGFMScD8TLWK2C1TCQaZlZ7KftA5LlXTcMEXvgyqqyJP2CIqOp+QetpoHLtdsNgMA1+313cNnqRY2jjIn/CABqrMgd81kzFkbF1Xz87MhGKtQfShg3LXI+ae5BBlP5CtwsYSf+baKU0U+qRqvF6awmJ4pGssXA/0J3VQYtroQmaG2zhkreS2/A/7eDKgjoGn0cE6OXdOXqPame42I0MxWjwybIHeTy/8IYyKl/wSCOPKUlfcrxKf023kIQjhEqxLlvww4wPG8kSmMKNa7qTVFuldBuTdOJDummg1OgsffqSmAdQb7cBU6/khrvsbB1cpMWwdGe5DtxhWoWjN+sX0KJT/ksfsUt6FIB3+3No9HrUf1rK5/uF7JKdzX8Czx9aOqTAnJAPgUGPP6IQXVea6YX+Hp3Ow==; 5:cWhz7dtN7W51kx7BuLm7KHfLxcUz4zf1Cv9eFVWkCx8AcAy1StYY9TTuiKfxGXg4W+a2xhv8ou2bthEEpPYuUIo0jZeZGoRAPbU4axX0O+vBJZtZusnLOluGNDV/u/niOcQVznGuG5McCmj0YF/D6ByKCknkwCXJh106dPL9kyA=; 24:MEZ26RzvutXZX6CwULb3HL+3mxTSQnFeUr3BT+0Grrh02mF/btoNRK6ZSEjaatBzvf0U039cbmcB6n5yYbNaSN3WIFvArOkrRwvRi/jUEOE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY4PR0701MB3634; 7:7VHA5qA81ORxGXI5mohtWXdB323AfYIpY2/K/WyxprB+9g2i4/7bXgTsHVw6zUe48SiY8jKUwcSjOb76L98m2A0aIwEg51PkoGUTWEB4rsy4Wek/XNS+lMEVAc2s9xj1ZjpWwfSQMZu8/aQWWGA+PaMc0P/d+RJDie/Xu296nK06fXJL35ucfcqcOktepZR00J28G0gS5bqAOBCh19LT7gQOP+qCA9okXBGcK92JMawLVYdT7jKovoku7L3zvzJf X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Apr 2018 11:26:07.3048 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a62e647e-e6dc-40a5-d45c-08d59ae80818 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR0701MB3634 Subject: [dpdk-dev] [PATCH v2 3/6] lib/cryptodev: add asymmetric crypto capability in cryptodev X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Apr 2018 11:26:12 -0000 Extend cryptodev with asymmetric capability APIs and definitions. Signed-off-by: Shally Verma Signed-off-by: Sunila Sahu Signed-off-by: Ashish Gupta --- User must apply patch "lib/cryptodev: add asymmetric algos in cryptodev" before compilation --- lib/librte_cryptodev/rte_cryptodev.c | 96 ++++++++++++++++++++++ lib/librte_cryptodev/rte_cryptodev.h | 105 ++++++++++++++++++++++++- lib/librte_cryptodev/rte_cryptodev_version.map | 4 + 3 files changed, 204 insertions(+), 1 deletion(-) diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c index cca8d4c..f1e9f7d 100644 --- a/lib/librte_cryptodev/rte_cryptodev.c +++ b/lib/librte_cryptodev/rte_cryptodev.c @@ -166,6 +166,31 @@ struct rte_cryptodev_callback { [RTE_CRYPTO_AEAD_OP_DECRYPT] = "decrypt" }; +/** + * Asymmetric crypto transform operation strings identifiers. + */ +const char *rte_crypto_asym_xform_strings[] = { + [RTE_CRYPTO_ASYM_XFORM_NONE] = "none", + [RTE_CRYPTO_ASYM_XFORM_RSA] = "rsa", + [RTE_CRYPTO_ASYM_XFORM_MODEX] = "modexp", + [RTE_CRYPTO_ASYM_XFORM_MODINV] = "modinv", + [RTE_CRYPTO_ASYM_XFORM_DH] = "dh", + [RTE_CRYPTO_ASYM_XFORM_DSA] = "dsa", +}; + +/** + * Asymmetric crypto operation strings identifiers. + */ +const char *rte_crypto_asym_op_strings[] = { + [RTE_CRYPTO_ASYM_OP_ENCRYPT] = "encrypt", + [RTE_CRYPTO_ASYM_OP_DECRYPT] = "decrypt", + [RTE_CRYPTO_ASYM_OP_SIGN] = "sign", + [RTE_CRYPTO_ASYM_OP_VERIFY] = "verify", + [RTE_CRYPTO_ASYM_OP_PRIVATE_KEY_GENERATE] = "priv_key_generate", + [RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE] = "pub_key_generate", + [RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE] = "sharedsecret_compute", +}; + int rte_cryptodev_get_cipher_algo_enum(enum rte_crypto_cipher_algorithm *algo_enum, const char *algo_string) @@ -217,6 +242,24 @@ struct rte_cryptodev_callback { return -1; } +int __rte_experimental +rte_cryptodev_get_asym_xform_enum(enum rte_crypto_asym_xform_type *xform_enum, + const char *xform_string) +{ + unsigned int i; + + for (i = 1; i < RTE_DIM(rte_crypto_asym_xform_strings); i++) { + if (strcmp(xform_string, + rte_crypto_asym_xform_strings[i]) == 0) { + *xform_enum = (enum rte_crypto_asym_xform_type) i; + return 0; + } + } + + /* Invalid string */ + return -1; +} + /** * The crypto auth operation strings identifiers. * It could be used in application command line. @@ -262,6 +305,28 @@ struct rte_cryptodev_callback { } +const struct rte_cryptodev_asymmetric_xfrm_capability * __rte_experimental +rte_cryptodev_asym_capability_get(uint8_t dev_id, + const struct rte_cryptodev_asym_capability_idx *idx) +{ + const struct rte_cryptodev_capabilities *capability; + struct rte_cryptodev_info dev_info; + unsigned int i = 0; + + memset(&dev_info, 0, sizeof(struct rte_cryptodev_info)); + rte_cryptodev_info_get(dev_id, &dev_info); + + while ((capability = &dev_info.capabilities[i++])->op != + RTE_CRYPTO_OP_TYPE_UNDEFINED) { + if (capability->op != RTE_CRYPTO_OP_TYPE_ASYMMETRIC) + continue; + + if (capability->asym.xform_type == idx->type) + return &capability->asym.xfrm_capa; + } + return NULL; +}; + #define param_range_check(x, y) \ (((x < y.min) || (x > y.max)) || \ (y.increment != 0 && (x % y.increment) != 0)) @@ -317,6 +382,37 @@ struct rte_cryptodev_callback { return 0; } +int __rte_experimental +rte_cryptodev_asym_xfrm_capability_check_optype( + const struct rte_cryptodev_asymmetric_xfrm_capability *capability, + enum rte_crypto_asym_op_type op_type) +{ + if (capability->op_types & (1 << op_type)) + return 1; + + return 0; +} + +int __rte_experimental +rte_cryptodev_asym_xfrm_capability_check_modlen( + const struct rte_cryptodev_asymmetric_xfrm_capability *capability, + uint16_t modlen) +{ + /* handle special case of 0 which mean PMD define no limit defined */ + if ((capability->modlen.min != 0) && + ((modlen < capability->modlen.min) || + (capability->modlen.increment != 0 && + (modlen % (capability->modlen.increment))))) + return -1; + if ((capability->modlen.max != 0) && + ((modlen > capability->modlen.max) || + (capability->modlen.increment != 0 && + (modlen % (capability->modlen.increment))))) + return -1; + + return 0; +} + const char * rte_cryptodev_get_feature_name(uint64_t flag) diff --git a/lib/librte_cryptodev/rte_cryptodev.h b/lib/librte_cryptodev/rte_cryptodev.h index 68d1ae1..deae3d6 100644 --- a/lib/librte_cryptodev/rte_cryptodev.h +++ b/lib/librte_cryptodev/rte_cryptodev.h @@ -178,6 +178,37 @@ struct rte_cryptodev_symmetric_capability { }; }; +/** + * Asymmetric Xform Crypto Capability + * + */ +struct rte_cryptodev_asymmetric_xfrm_capability { + enum rte_crypto_asym_xform_type xform_type; + /**< Transform type: RSA/MODEXP/DH/DSA/MODINV */ + + uint32_t op_types; + /**< bitmask for supported rte_crypto_asym_op_type */ + + __extension__ + union { + struct rte_crypto_param_range modlen; + /**< Range of modulus length supported by modulus based xform. + * Value 0 mean implementation default + */ + }; +}; + +/** + * Asymmetric Crypto Capability + * + */ +struct rte_cryptodev_asymmetric_capability { + enum rte_crypto_asym_xform_type xform_type; + /**< Transform type: RSA/MODEXP/DH/DSA/MODINV */ + struct rte_cryptodev_asymmetric_xfrm_capability xfrm_capa; +}; + + /** Structure used to capture a capability of a crypto device */ struct rte_cryptodev_capabilities { enum rte_crypto_op_type op; @@ -187,6 +218,8 @@ struct rte_cryptodev_capabilities { union { struct rte_cryptodev_symmetric_capability sym; /**< Symmetric operation capability parameters */ + struct rte_cryptodev_asymmetric_capability asym; + /**< Asymmetric operation capability parameters */ }; }; @@ -201,7 +234,17 @@ struct rte_cryptodev_sym_capability_idx { }; /** - * Provide capabilities available for defined device and algorithm + * Structure used to describe asymmetric crypto xforms + * Each xform maps to one asym algorithm. + * + */ +struct rte_cryptodev_asym_capability_idx { + enum rte_crypto_asym_xform_type type; + /**< Asymmetric xform (algo) type */ +}; + +/** + * Provide capabilities available for defined device and algorithm * * @param dev_id The identifier of the device. * @param idx Description of crypto algorithms. @@ -215,6 +258,20 @@ struct rte_cryptodev_sym_capability_idx { const struct rte_cryptodev_sym_capability_idx *idx); /** + * Provide capabilities available for defined device and algorithm + * + * @param dev_id The identifier of the device. + * @param algo Description of crypto algorithms. + * + * @return + * - Return description of the asymmetric crypto capability if exist. + * - Return NULL if the capability not exist. + */ +const struct rte_cryptodev_asymmetric_xfrm_capability * __rte_experimental +rte_cryptodev_asym_capability_get(uint8_t dev_id, + const struct rte_cryptodev_asym_capability_idx *idx); + +/** * Check if key size and initial vector are supported * in crypto cipher capability * @@ -270,6 +327,36 @@ struct rte_cryptodev_sym_capability_idx { uint16_t iv_size); /** + * Check if op type is supported + * + * @param capability Description of the asymmetric crypto capability. + * @param op_type op type + * + * @return + * - Return 1 if the op type is supported + * - Return 0 if unsupported + */ +int __rte_experimental +rte_cryptodev_asym_xfrm_capability_check_optype( + const struct rte_cryptodev_asymmetric_xfrm_capability *capability, + enum rte_crypto_asym_op_type op_type); + +/** + * Check if modulus length is in supported range + * + * @param capability Description of the asymmetric crypto capability. + * @param modlen modulus length. + * + * @return + * - Return 0 if the parameters are in range of the capability. + * - Return -1 if the parameters are out of range of the capability. + */ +int __rte_experimental +rte_cryptodev_asym_xfrm_capability_check_modlen( + const struct rte_cryptodev_asymmetric_xfrm_capability *capability, + uint16_t modlen); + +/** * Provide the cipher algorithm enum, given an algorithm string * * @param algo_enum A pointer to the cipher algorithm @@ -314,6 +401,22 @@ struct rte_cryptodev_sym_capability_idx { rte_cryptodev_get_aead_algo_enum(enum rte_crypto_aead_algorithm *algo_enum, const char *algo_string); +/** + * Provide the Asymmetric xform enum, given an xform string + * + * @param xform_enum A pointer to the xform type + * enum to be filled + * @param xform_string xform string + * + * @return + * - Return -1 if string is not valid + * - Return 0 if the string is valid + */ +int __rte_experimental +rte_cryptodev_get_asym_xform_enum(enum rte_crypto_asym_xform_type *xform_enum, + const char *xform_string); + + /** Macro used at end of crypto PMD list */ #define RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() \ { RTE_CRYPTO_OP_TYPE_UNDEFINED } diff --git a/lib/librte_cryptodev/rte_cryptodev_version.map b/lib/librte_cryptodev/rte_cryptodev_version.map index 41c6798..3730f59 100644 --- a/lib/librte_cryptodev/rte_cryptodev_version.map +++ b/lib/librte_cryptodev/rte_cryptodev_version.map @@ -89,11 +89,15 @@ DPDK_17.11 { EXPERIMENTAL { global: + rte_cryptodev_asym_capability_get; rte_cryptodev_asym_session_clear; rte_cryptodev_asym_session_create; rte_cryptodev_asym_session_free; rte_cryptodev_asym_session_init; + rte_cryptodev_asym_xfrm_capability_check_modlen; + rte_cryptodev_asym_xfrm_capability_check_optype; rte_cryptodev_get_asym_session_private_size; + rte_cryptodev_get_asym_xform_enum; local: *; }; -- 1.9.1