From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 59DDDA0514; Wed, 15 Jan 2020 13:44:35 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 38B301C039; Wed, 15 Jan 2020 13:44:35 +0100 (CET) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id EF2311C031 for ; Wed, 15 Jan 2020 13:44:32 +0100 (CET) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 00FCgofH018047; Wed, 15 Jan 2020 04:44:32 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0818; bh=q5wotnvnOBAU+4eJ95CO2/Sbj1JmJsCvmKUwYnZbso8=; b=qjAnoH7ksriBakQ69jsyKW810JCqz6EfEytzzB/Jpjpi9n+Tmj0Ufx7VkRoGuxfAV4XR xsg0WOgjYyWwBUId5jefzt9HdEfv1b0RUVamH4VcwszuT7ETGXnaIM0CXMzVxjGMFFyk y2tkY2FOzqgEH/gDMmZ7YRmC3GVQGz5ksrIHfPTmyIr/VvnO+F3sNWOFAK41TYjsZfc8 ANu/mBmM7n36CgVsxZkFngfl+FaRLwBB2y+MUHXtf4rP6hkQ1SGJWvVaMuJR6KTyXdNE Il+9p1gFF7xC2AMUUmy3jbC57YPXAj0gfNB384cz5huJrMqKoJfdZ7NwLJNNv5hwlX9p Og== Received: from sc-exch02.marvell.com ([199.233.58.182]) by mx0a-0016f401.pphosted.com with ESMTP id 2xhc6smyfw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Wed, 15 Jan 2020 04:44:32 -0800 Received: from SC-EXCH01.marvell.com (10.93.176.81) by SC-EXCH02.marvell.com (10.93.176.82) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Wed, 15 Jan 2020 04:44:30 -0800 Received: from maili.marvell.com (10.93.176.43) by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Wed, 15 Jan 2020 04:44:30 -0800 Received: from ajoseph83.caveonetworks.com (unknown [10.29.45.60]) by maili.marvell.com (Postfix) with ESMTP id EAC513F703F; Wed, 15 Jan 2020 04:44:26 -0800 (PST) From: Anoob Joseph To: Akhil Goyal , Declan Doherty , Pablo de Lara CC: Ayuj Verma , Fiona Trahe , Arek Kusztal , Jerin Jacob , Narayana Prasad , Shally Verma , Ankur Dwivedi , Sunila Sahu , , Anoob Joseph Date: Wed, 15 Jan 2020 18:13:36 +0530 Message-ID: <1579092219-15696-2-git-send-email-anoobj@marvell.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1579092219-15696-1-git-send-email-anoobj@marvell.com> References: <1575546206-2478-1-git-send-email-anoobj@marvell.com> <1579092219-15696-1-git-send-email-anoobj@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572 definitions=2020-01-15_02:2020-01-15, 2020-01-14 signatures=0 Subject: [dpdk-dev] [PATCH v2 1/4] cryptodev: support ECDSA 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Ayuj Verma Asymmetric crypto library is extended to add ECDSA. Elliptic curve xform and ECDSA op params are introduced. Signed-off-by: Anoob Joseph Signed-off-by: Ayuj Verma Signed-off-by: Sunila Sahu --- doc/guides/cryptodevs/features/default.ini | 11 ++-- doc/guides/rel_notes/release_20_02.rst | 4 ++ lib/librte_cryptodev/rte_crypto_asym.h | 84 ++++++++++++++++++++++++++++++ lib/librte_cryptodev/rte_cryptodev.c | 1 + 4 files changed, 95 insertions(+), 5 deletions(-) diff --git a/doc/guides/cryptodevs/features/default.ini b/doc/guides/cryptodevs/features/default.ini index b7f9a0a..2f6c785 100644 --- a/doc/guides/cryptodevs/features/default.ini +++ b/doc/guides/cryptodevs/features/default.ini @@ -103,8 +103,9 @@ AES CCM (256) = ; Supported Asymmetric algorithms of a default crypto driver. ; [Asymmetric] -RSA = -DSA = -Modular Exponentiation = -Modular Inversion = -Diffie-hellman = \ No newline at end of file +RSA = +DSA = +Modular Exponentiation = +Modular Inversion = +Diffie-hellman = +ECDSA = diff --git a/doc/guides/rel_notes/release_20_02.rst b/doc/guides/rel_notes/release_20_02.rst index 0eaa45a..2e97c60 100644 --- a/doc/guides/rel_notes/release_20_02.rst +++ b/doc/guides/rel_notes/release_20_02.rst @@ -56,6 +56,10 @@ New Features Also, make sure to start the actual text at the margin. ========================================================= +* **Added support for ECDSA.** + + Added ECDSA(Elliptic Curve Digital Signature Algorithm) support to asymmetric + crypto library specifications. Removed Items ------------- diff --git a/lib/librte_cryptodev/rte_crypto_asym.h b/lib/librte_cryptodev/rte_crypto_asym.h index 0d34ce8..e17614e 100644 --- a/lib/librte_cryptodev/rte_crypto_asym.h +++ b/lib/librte_cryptodev/rte_crypto_asym.h @@ -27,6 +27,13 @@ extern "C" { #include "rte_crypto_sym.h" +/** + * Buffer to hold crypto params required for asym operations. + * + * These buffers can be used for both input to PMD and output from PMD. When + * used for output from PMD, application has to ensure the buffer is large + * enough to hold the target data. + */ typedef struct rte_crypto_param_t { uint8_t *data; /**< pointer to buffer holding data */ @@ -81,6 +88,10 @@ enum rte_crypto_asym_xform_type { /**< Modular Exponentiation * Perform Modular Exponentiation b^e mod n */ + RTE_CRYPTO_ASYM_XFORM_ECDSA, + /**< Elliptic Curve Digital Signature Algorithm + * Perform Signature Generation and Verification. + */ RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END /**< End of list */ }; @@ -319,6 +330,40 @@ struct rte_crypto_dsa_xform { }; /** + * TLS named curves + * https://tools.ietf.org/html/rfc8422 + */ +enum rte_crypto_ec_group { + RTE_CRYPTO_EC_GROUP_UNKNOWN = 0, + RTE_CRYPTO_EC_GROUP_SECP192R1 = 19, + RTE_CRYPTO_EC_GROUP_SECP224R1 = 21, + RTE_CRYPTO_EC_GROUP_SECP256R1 = 23, + RTE_CRYPTO_EC_GROUP_SECP384R1 = 24, + RTE_CRYPTO_EC_GROUP_SECP521R1 = 25, +}; + +/** + * Structure for elliptic curve point + */ +struct rte_crypto_ec_point { + rte_crypto_param x; + /**< X coordinate */ + rte_crypto_param y; + /**< Y coordinate */ +}; + +/** + * Asymmetric elliptic curve transform data + * + * Structure describing all EC based xform params + * + */ +struct rte_crypto_ec_xform { + enum rte_crypto_ec_group curve_id; + /**< Pre-defined ec groups */ +}; + +/** * Operations params for modular operations: * exponentiation and multiplicative inverse * @@ -372,6 +417,11 @@ struct rte_crypto_asym_xform { struct rte_crypto_dsa_xform dsa; /**< DSA xform parameters */ + + struct rte_crypto_ec_xform ec; + /**< EC xform parameters, used by elliptic curve based + * operations. + */ }; }; @@ -516,6 +566,39 @@ struct rte_crypto_dsa_op_param { }; /** + * ECDSA operation params + */ +struct rte_crypto_ecdsa_op_param { + enum rte_crypto_asym_op_type op_type; + /**< Signature generation or verification */ + + rte_crypto_param pkey; + /**< Private key of the signer for signature generation */ + + struct rte_crypto_ec_point q; + /**< Public key of the signer for verification */ + + rte_crypto_param message; + /**< Input message digest to be signed or verified */ + + rte_crypto_param k; + /**< The ECDSA per-message secret number, which is an integer + * in the interval (1, n-1) + */ + + rte_crypto_param r; + /**< r component of elliptic curve signature + * output : for signature generation + * input : for signature verification + */ + rte_crypto_param s; + /**< s component of elliptic curve signature + * output : for signature generation + * input : for signature verification + */ +}; + +/** * Asymmetric Cryptographic Operation. * * Structure describing asymmetric crypto operation params. @@ -537,6 +620,7 @@ struct rte_crypto_asym_op { struct rte_crypto_mod_op_param modinv; struct rte_crypto_dh_op_param dh; struct rte_crypto_dsa_op_param dsa; + struct rte_crypto_ecdsa_op_param ecdsa; }; }; diff --git a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptodev.c index 89aa2ed..0d6babb 100644 --- a/lib/librte_cryptodev/rte_cryptodev.c +++ b/lib/librte_cryptodev/rte_cryptodev.c @@ -173,6 +173,7 @@ const char *rte_crypto_asym_xform_strings[] = { [RTE_CRYPTO_ASYM_XFORM_MODINV] = "modinv", [RTE_CRYPTO_ASYM_XFORM_DH] = "dh", [RTE_CRYPTO_ASYM_XFORM_DSA] = "dsa", + [RTE_CRYPTO_ASYM_XFORM_ECDSA] = "ecdsa", }; /** -- 2.7.4