From patchwork Wed Apr 27 09:55:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arkadiusz Kusztal X-Patchwork-Id: 110327 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7837AA0507; Wed, 27 Apr 2022 11:55:36 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5B27140E78; Wed, 27 Apr 2022 11:55:36 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mails.dpdk.org (Postfix) with ESMTP id 6FE0E40691 for ; Wed, 27 Apr 2022 11:55:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651053334; x=1682589334; h=from:to:cc:subject:date:message-id; bh=dEDyiII3tkFOHQjQtVecqnjvn/jj0nII5zurNYnxFWc=; b=XPvwkzfYtUdwlQfBI1yjyKAsjZEyxpWmB+zGBecrFa/ZcJroXpRkNbbc MIPt6HJ0VjESMj96qEytcIMsHsdWmDEbuDYAqGP9QWtfb/Brl/SDoU+Bt ATeSKY1Y7NmlX9S4tRphRWwXQyWuFwegBmWhEMPkrTY6EbwKIubphXawP I345ri9Muuy5nUFdWscXy5FvnksmuGqADyTjJRg5rARWeDwXBX7+VaxSo HA66FyDbcK/A5iFFbcf94sno1SGT+CA/8JIRyAiQcYGS/13Tu3XyL1qWi m+768rMgBw51iusEI+URpftDNk2HHY5BSC4pmWfq1nTQ2xhRfWXfllN67 A==; X-IronPort-AV: E=McAfee;i="6400,9594,10329"; a="265404623" X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="265404623" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Apr 2022 02:55:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,292,1643702400"; d="scan'208";a="596208820" Received: from silpixa00400308.ir.intel.com ([10.237.214.95]) by orsmga001.jf.intel.com with ESMTP; 27 Apr 2022 02:55:32 -0700 From: Arek Kusztal To: dev@dpdk.org Cc: gakhil@marvell.com, roy.fan.zhang@intel.com, Arek Kusztal Subject: [PATCH v2] cryptodev: add elliptic curve diffie hellman Date: Wed, 27 Apr 2022 10:55:24 +0100 Message-Id: <20220427095524.2547-1-arkadiuszx.kusztal@intel.com> X-Mailer: git-send-email 2.17.1 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org This commit adds Elliptic Curve Diffie-Hellman option to Cryptodev. This could be achieved with EC point multiplication but: 1) Phase 1 of DH is used with EC generator, multiplication expect setting generator manually. 2) It will unify usage of DH. 3) Can be extended easily to support X25519 and X448. Signed-off-by: Arek Kusztal Acked-by: Fan Zhang --- v2: - added ecdh comments to operation types Depends-on: series-22684 ("cryptodev: move dh type from xform to dh op") lib/cryptodev/rte_crypto_asym.h | 46 +++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/lib/cryptodev/rte_crypto_asym.h b/lib/cryptodev/rte_crypto_asym.h index 4697a7bc59..64d97ae054 100644 --- a/lib/cryptodev/rte_crypto_asym.h +++ b/lib/cryptodev/rte_crypto_asym.h @@ -91,6 +91,8 @@ enum rte_crypto_asym_xform_type { /**< Elliptic Curve Digital Signature Algorithm * Perform Signature Generation and Verification. */ + RTE_CRYPTO_ASYM_XFORM_ECDH, + /**< Elliptic Curve Diffie Hellman */ RTE_CRYPTO_ASYM_XFORM_ECPM, /**< Elliptic Curve Point Multiplication */ RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END @@ -112,9 +114,9 @@ enum rte_crypto_asym_op_type { RTE_CRYPTO_ASYM_OP_PRIVATE_KEY_GENERATE, /**< DH Private Key generation operation */ RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE, - /**< DH Public Key generation operation */ + /**< DH/ECDH Public Key generation operation */ RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE, - /**< DH Shared Secret compute operation */ + /**< DH/ECDH Shared Secret compute operation */ RTE_CRYPTO_ASYM_OP_LIST_END }; @@ -385,34 +387,38 @@ struct rte_crypto_rsa_op_param { }; /** - * Diffie-Hellman Operations params. + * Diffie-Hellman/Elliptic Curve Diffie-Hellman operation. * @note: */ struct rte_crypto_dh_op_param { enum rte_crypto_asym_op_type op_type; /**< Diffie-Hellman operation type */ - rte_crypto_uint pub_key; + rte_crypto_param priv_key; /**< - * Output generated public key when op_type is - * DH PUB_KEY_GENERATION. - * Input peer public key when op_type is DH - * SHARED_SECRET_COMPUTATION - * + * Diffie-Hellman private part + * For DH and ECDH it is big-endian integer. + * Input for both phases of Diffie-Hellman */ - - rte_crypto_uint priv_key; + union { + rte_crypto_uint pub_key; + struct rte_crypto_ec_point pub_point; + }; /**< - * Output generated private key if op_type is - * DH PRIVATE_KEY_GENERATION - * Input when op_type is DH SHARED_SECRET_COMPUTATION. - * + * Diffie-Hellman public part + * For DH it is big-endian unsigned integer. + * For ECDH it is a point on the curve. + * Output for RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE + * Input for RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE */ - - rte_crypto_uint shared_secret; + union { + rte_crypto_uint shared_secret; + struct rte_crypto_ec_point shared_point; + }; /**< - * Output with calculated shared secret - * when dh op_type = SHARED_SECRET_COMPUTATION. - * + * Diffie-Hellman shared secret + * For DH it is big-endian unsigned integer. + * For ECDH it is a point on the curve. + * Output for RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE */ };