From patchwork Tue Jul 3 15:24:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shally Verma X-Patchwork-Id: 42158 X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C7F8F1BF51; Tue, 3 Jul 2018 17:25:20 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0040.outbound.protection.outlook.com [104.47.36.40]) by dpdk.org (Postfix) with ESMTP id 254831BF4C for ; Tue, 3 Jul 2018 17:25:19 +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:X-MS-Exchange-SenderADCheck; bh=G1O6MRPBDcY1eCBuXiC7C0R8CBPI7AhaPFD5N8QCQYI=; b=eJevX0yrLv6/e84rq4q2rry4zNwRonjDGwyyfsFVzn3nh0AJftcuszePO8Bs4DlxGMqBaMi9891y11Xi9ro1IVGiS2mVgHp2H2H8FkSoJdLGrlvAKzG7VucWe7cS3XnBwDh2DaTsNL1wnEW5PsOB8oqsNQ+JvOBKDLofrA+oKAU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Shally.Verma@cavium.com; Received: from hyd1sverma-dt.caveonetworks.com (115.113.156.2) by DM5PR0701MB3640.namprd07.prod.outlook.com (2603:10b6:4:7e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.906.24; Tue, 3 Jul 2018 15:25:15 +0000 From: Shally Verma To: pablo.de.lara.guarch@intel.com Cc: dev@dpdk.org, pathreya@caviumnetworks.com, nmurthy@caviumnetworks.com, Sunila Sahu , Ashish Gupta , Umesh Kartha Date: Tue, 3 Jul 2018 20:54:23 +0530 Message-Id: <1530631466-26427-2-git-send-email-shally.verma@caviumnetworks.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1530631466-26427-1-git-send-email-shally.verma@caviumnetworks.com> References: <1530631466-26427-1-git-send-email-shally.verma@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [115.113.156.2] X-ClientProxiedBy: PN1PR0101CA0014.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c00:e::24) To DM5PR0701MB3640.namprd07.prod.outlook.com (2603:10b6:4:7e::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f33232fe-e36f-4265-1d95-08d5e0f92eb2 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(8990107)(5600053)(711020)(2017052603328)(7153060)(7193020); SRVR:DM5PR0701MB3640; X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3640; 3:EEv/2GFygDwBe9B2J1EySzwlm/mYOWrkYi84haLfYYUHmapTjGb3WbdPwT8OHPcBWZt6AtSfHyUjMsSovjCUnIiLJPF4H4u779kDuBqGPEfmFpBSxGBY8ztWmSv6r8tgwTKrEEM/2FuQS521qA8Nduik8SFv26P29njLQH0sTN9PlqZgmNHeS841l+CDtKOGjtXV8nGgrfC/I35qzfnKRPjMHWcbnP/tiVw6cVa2D+HsZYRrd/nCUpU9oSsoX7h/; 25:jWtQgq0BOiygSnXzaDNOjmXtlW+B7KbbVJLH8XyUKqCCsKF71I8Vr/Br5zVbm/KlfddThroUkNlp0XVGaHv7ik/lEABXIvqkNZSYy7uPJJGleHXX5ZYmP3jBBzR1Kg4BDN+n2a9E7mZWJMFYM4UVsrtofmOS0A85gu220wNihXHVXNGz5/9sT8PFzgb8w6nT59i9mU+BieRFoS+VBaxxcwca3XPN6yHgmZrH08WawG4uDVJMlSQdVirA49kFK2LADoCGOtK5oJIlZOSiKuReMe5s4NMWYTWF68NZF/iZpsFHOZya8s3e9FwqfnUe5LWeV/VSpWjHthXdTpd2acyurw==; 31:d6iFi+e+RiTYTjNaVQlzCjYDoswZf/EIHfuWgGddARTI2TYNUXeh8by32fZys+1Itmu+yguWmh5pZ+QHHGBSE9uRU5o+vXqCwcA+pD5CgR1GAGL1Bvyyqvt3SrDsSAntw8sFt+nS6DiJR3RT24wu/iSO8LRswwhDo+1OPsIQlyn1Amcyq+c1N4wwP6xdZtVjopgGG+7pz4W5QnxO03120Hd8RhPnum1PLvldrP7qXBc= X-MS-TrafficTypeDiagnostic: DM5PR0701MB3640: X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3640; 20:1sGNBLKtuTXtfZ9qU+5YekRW38xd9mX/m7y5zGMuqUGDJl12WerjjjbPsKv1btjhIp/yQJsFqFz4Cj8xZm40xddvHHz87JPnnzZJvaA6F5OJxVQ2DNhCSnDhtExoRbtjFCRdO7Kn67verQ0JV3eMV03Bh70QmH0/BULFiBEfSQ3QTgFsH+viYV9qcaEQ71IqJVJEupTDtRBvGWoIsYajAy5m+0lXgqEwEZ5huK5+nlAc6KgSS10FPLpPvRy8PV2uHP5VnW904AKxvLG0L9TYGeAL3g9jPp5YBERYhXjCwyD0YEPBr5/q9KIl69buGU9miJzshIf6cOXRlAx8LOGK3yuB+fc1NJWsaYOyOG3GNMMHOsMnDDGycJgRVqiNn2qFdSvpBV7X3IV1vpN/ahygl7RoKiL/F7bBOV93xN7kvXNxt/J+AOD7vj8oZ96B+urNm2KAFxkgESb6Js32rfKRRQqLBtM6pZcCDLSJ/1u2lEXlaEw6WomYcH0P5GW7kHYgGDSdWXVGG5rqdx6j/iYNz6jPWEeLLgdvDhEbsWqHJB0GJanx4cWiJPIgktj2zWqCHEJl5p0eYjn5Wbe7p0M7blIxeloypTgoYFn82amB6sA=; 4:xwYV2ER77eaF/9v4S+BzCqiHnUInZUlEDjl/wZhE27oli2rfFosD1XP8kxdNZbaimbzUQG8X0IkdtKjVfnbAMURibs8Hc0UHIrgOHJ8uKAip7ipyKyZMVQwPsLRdEavb6OGeBKV4WccJU1PNqnbuFojfcvQF2B9RTbxuvT1FHvkwaY32HSmQH9a2cj8w2HeWVE/2cVtp3PY5v6SvQw9v49ljdDS85i/otO8UjAj1eJHze2KLHRBifLvR4WtYepARYdtOQRjUYt+Z7+8BFNcrjQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(10201501046)(3231254)(944501410)(52105095)(3002001)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:DM5PR0701MB3640; BCL:0; PCL:0; RULEID:; SRVR:DM5PR0701MB3640; X-Forefront-PRVS: 0722981D2A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(136003)(346002)(376002)(39860400002)(396003)(366004)(199004)(189003)(50226002)(53936002)(55236004)(316002)(6506007)(107886003)(54906003)(42882007)(305945005)(386003)(68736007)(51416003)(7736002)(4326008)(72206003)(8676002)(6486002)(478600001)(25786009)(81156014)(81166006)(76176011)(2361001)(6512007)(97736004)(69596002)(6116002)(16526019)(3846002)(186003)(2351001)(44832011)(5660300001)(6666003)(6916009)(53416004)(8936002)(66066001)(47776003)(476003)(106356001)(16586007)(956004)(2616005)(11346002)(105586002)(2906002)(52116002)(446003)(50466002)(14444005)(26005)(48376002)(36756003)(486006)(473944003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR0701MB3640; 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; DM5PR0701MB3640; 23:41fqeIx47kx+r+3SfteOXgcjbzR0JMSfN5aAo1x?= iy6rYaocyhdTLHf060x5S6zKMylRUkqqn8uFf7HZhs0xf13EGkp9hv8h4S9lZM8P4+Mjx4A+Rnno4s8CPzgNaa60v0KunvoTFupQHDQKLRex1D6QTWjOj55qV6S+Dn4GCe9mm3T1tfHVtfEN73hdmkostQT5fhwyKA8wozbOAJ+eN46ZZsgOma1FANErl/XZvHWzTMozWCX2llG57s/mWftO+8cLzj0I5ZljI5rGkDEsDxKDb2k5RXVyuPcGI+C5iPs/19XoqAY3yNxeG2R2lyVQK042mROg5VbHq9DtjHMSCA1MM/T8+covecrdvFjztQadE71dNn7Byxn5oxwfwKXOEY417oGc2gDMFy4YloP/jDx8NVAeVeNnvP1h5eoqQops1yrsdCEqBHcK1hecLkF+juMi8SxW/o7DVB/YXsrdo8axxhVtFV4iDkdbGKGiA05G9fw7oSQwm/1+Z52kWiwLVIoHK7Zq+1Nl2yjmRzXrqtaPu6t+f6pCzf3EaFb3ZX2jP+FSGG4nqGTLMY8DrKgfilPETqySD7ie7O5iyozKYxlSQqS8EQowl7W6sjfVAPHYIm/IxdNuUP0T2v6tdKtg8rykAh0qzfzvmZG1KTg7Xpoh8jYs2D+ScL8Th9x3BvRbFuQGUsYE1lA+syJ+yonhOvJqu2OUm6KJF/kjHY22RFwxDnIMU5mcuqe5M8Aw8vJi2aCpSvIK2sQRiFDMsYpPRW4+QkilSw+tq1DHjzrAV+ZWNGH9phZyaS4oIdCraxSKI95WsgNdENKXbx5P+25v2Ihu7FCH1bdMBLR+7zJIqUlxUWVx+uqTVJ8YDpdi29lGfr8V3GKjLf4DckUQM7k+W3YYxw3LS3t56eaToXzZ981ed/sOALxwlxpmq3QUcSlituAfv+Jgzx4QX9/VE7bqGB8afW3hRUlvmhuVL08RWI4Nvt8bH5SRKnvX4g5yo7s/70VqkwI0s3RAShHZ3C2HJvC1cF6hNuEfmtL63jBFkhG+1VzHpvh/hDxrYvuUgdViYqAHFq1GBV9GR6OIP/b9UM378zWmYO931gmNaag5v1mJKWShyeSPeUdotjQxiSMI3rORH/R68aiwX4AIgZTkce9X2k9FtKhNwwLFikKOXh0/N1n7BTWMEaKEUGAfbjV9CNwZoHUQNaBP3eddzkCiL6aHmEV86AyaYpBPg1OtYWXh8e3dlJXuJBoAfVdNWTMyvGSbbLO350iU+V2G5zgHQ6K0WsTWGR9TJvG1iO6Oqx9jv2otf9Xy3qp0WHvB9b2MX9pTdp43njGbHkjK0pWHLO1fp4UiWdnyVhDp+EdeEkSxH36PqIkNpWVRTEzNyXwwOYO6p22Xb7tsJMT2aBmdE X-Microsoft-Antispam-Message-Info: cRdnxwf7UBiogmNJvmfiDXZ0LzHIcAKKK3YdniFOBgwKj4ICgbDeovoi+PVzVXw8VPZFLb7w0vMkNwzOXIqoAz+p6TD4I+vZy+FiyB6QPm7q0iowJ7hos65iE/t4uVxM3lusJ259Zb+TYJ69iytezlMJBR3GBnto+xYSXYz6iQMdVh2zVu3yYGJDibDDjONEDyAY2l0OYKn8XTRwFxabBCymKhifKQRxFHpxPAjhTQRtLRid5Hl8tIvo3xk2iWssXwUi3SVsuGj4/uRBqSHXcyE8arNke9Vhm2XJ7pfmEoT0gyzSKcg6Y4BM4RyoEl+xsnYEiTEZKWcR7V/CzogMSXv5VsZUllQCgxJ7DNrWais= X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3640; 6:ct54ntAP4Ju70S/sNUZZBLHOJBrOWX27KKJ/Di5OvSGqa/ZArmGulcJnX6ESOWQGA3p4/4vFHUZPQ0Guoy71QmUE0X5V0noZjAru0RwGKw/56rrhrzL5eKgZVlsIubzSZO4XwDGI7/9iU6TlljZ9tQL2r6H2L8/YwCAmJqFvftdQBl3CH67tOym88f46fMYv96ILWu4kbdu934+Skezc3Kq5OEIh37hyR/3W0IUQZhC6f+Wy29LQvzRJa9QffpVoyiwu3Qn5QwDxnClUrIbdBvx2GCkjWeKXO4VyMoFnek4JCd1lnJ8YA29+Mdi1SDOPddMuPyF7QdOzMrkRmJ35Q7YiPsLVukpR/oUTqLcAAFwES1DHIDv3h7qi38th5QNT+TuTZV6+DIWIAJcus93KutJGTNGxq5sNW9mzmERhpXu1CrOnX4YqvAaUtYqdd6eOQfv70ICXyFl14Mf/Z7knIA==; 5:dKPx+qCQYoFBjvrSFGZgeryr2A0OEsRaQyfem0KRBOSYH/KqorsSL27s+EbtlyyFo3ue+Hf1eWJ9zznTF9oRAkFFDZn0Hm7Z3Z9i0cP/LnFos0q2UUGYRZvTxuLl+pCtvsGAfmsTn1AXVSdzl3N/yNbDfU5/SMcZzgPWR5S25PE=; 24:1hLTnQIKljqRcZXUSyt7hJi0lctyKPmTXz3f190qnAvulhnKW2zIey1Mr/i+unLk5XUL6swT3E2nUo88V5omAr+FTL8vfshKy6B60i5WJrc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3640; 7:tOuXDeNLzKVeHr4QiYkZD32ImItnLh8r8/lhKSmnnXYZrXAwljUUl33ztBojZSwLwdBoUg1X3tkLeGJvl5HXkh5wLzX1vH81uIS1quq5narNu1Dn4LMO1WseTOtrCx+l/Q15riJavTEiL8+zhj+KOzrzTbSMqEts1Dn0TRN/G9wEzf/M900YMnhnZRflL6+irXWGJlAl1nfRY8R1tHsGyE2LoujjN8QjlQLRbbjyvQ+KQESYV29JSj3D8+BM42UW X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jul 2018 15:25:15.3449 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f33232fe-e36f-4265-1d95-08d5e0f92eb2 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0701MB3640 Subject: [dpdk-dev] [PATCH v4 1/4] lib/cryptodev: add asymmetric algos 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Add rte_crypto_asym.h with supported xfrms and associated op structures and APIs API currently supports: - RSA Encrypt, Decrypt, Sign and Verify - Modular Exponentiation and Inversion - DSA Sign and Verify - Deffie-hellman private key exchange - Deffie-hellman public key exchange - Deffie-hellman shared secret compute - Deffie-hellman public/private key pair generation using xform chain Signed-off-by: Shally Verma Signed-off-by: Sunila Sahu Signed-off-by: Ashish Gupta Signed-off-by: Umesh Kartha --- lib/librte_cryptodev/Makefile | 1 + lib/librte_cryptodev/meson.build | 3 +- lib/librte_cryptodev/rte_crypto_asym.h | 496 +++++++++++++++++++++++++++++++++ 3 files changed, 499 insertions(+), 1 deletion(-) diff --git a/lib/librte_cryptodev/Makefile b/lib/librte_cryptodev/Makefile index bba8dee..c114888 100644 --- a/lib/librte_cryptodev/Makefile +++ b/lib/librte_cryptodev/Makefile @@ -23,6 +23,7 @@ SYMLINK-y-include += rte_crypto.h SYMLINK-y-include += rte_crypto_sym.h SYMLINK-y-include += rte_cryptodev.h SYMLINK-y-include += rte_cryptodev_pmd.h +SYMLINK-y-include += rte_crypto_asym.h # versioning export map EXPORT_MAP := rte_cryptodev_version.map diff --git a/lib/librte_cryptodev/meson.build b/lib/librte_cryptodev/meson.build index bd5fed8..295f509 100644 --- a/lib/librte_cryptodev/meson.build +++ b/lib/librte_cryptodev/meson.build @@ -6,5 +6,6 @@ sources = files('rte_cryptodev.c', 'rte_cryptodev_pmd.c') headers = files('rte_cryptodev.h', 'rte_cryptodev_pmd.h', 'rte_crypto.h', - 'rte_crypto_sym.h') + 'rte_crypto_sym.h', + 'rte_crypto_asym.h') deps += ['kvargs', 'mbuf'] diff --git a/lib/librte_cryptodev/rte_crypto_asym.h b/lib/librte_cryptodev/rte_crypto_asym.h new file mode 100644 index 0000000..7f88b57 --- /dev/null +++ b/lib/librte_cryptodev/rte_crypto_asym.h @@ -0,0 +1,496 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2018 Cavium Networks + */ + +#ifndef _RTE_CRYPTO_ASYM_H_ +#define _RTE_CRYPTO_ASYM_H_ + +/** + * @file rte_crypto_asym.h + * + * RTE Definitions for Asymmetric Cryptography + * + * Defines asymmetric algorithms and modes, as well as supported + * asymmetric crypto operations. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#include +#include +#include + +typedef struct rte_crypto_param_t { + uint8_t *data; + /**< pointer to buffer holding data */ + rte_iova_t iova; + /**< IO address of data buffer */ + size_t length; + /**< length of data in bytes */ +} rte_crypto_param; + +/** asym xform type name strings */ +extern const char * +rte_crypto_asym_xform_strings[]; + +/** asym operations type name strings */ +extern const char * +rte_crypto_asym_op_strings[]; + +/** + * Asymmetric crypto transformation types. + * Each xform type maps to one asymmetric algorithm + * performing specific operation + * + */ +enum rte_crypto_asym_xform_type { + RTE_CRYPTO_ASYM_XFORM_UNSPECIFIED = 0, + /**< Invalid xform. */ + RTE_CRYPTO_ASYM_XFORM_NONE, + /**< Xform type None. + * May be supported by PMD to support + * passthrough op for debugging purpose. + * if xform_type none , op_type is disregarded. + */ + RTE_CRYPTO_ASYM_XFORM_RSA, + /**< RSA. Performs Encrypt, Decrypt, Sign and Verify. + * Refer to rte_crypto_asym_op_type + */ + RTE_CRYPTO_ASYM_XFORM_DH, + /**< Deffie-Hellman. + * Performs Key Generate and Shared Secret Compute. + * Refer to rte_crypto_asym_op_type + */ + RTE_CRYPTO_ASYM_XFORM_DSA, + /**< Digital Signature Algorithm + * Performs Signature Generation and Verification. + * Refer to rte_crypto_asym_op_type + */ + RTE_CRYPTO_ASYM_XFORM_MODINV, + /**< Modular Inverse + * Perform Modulus inverse b^(-1) mod n + */ + RTE_CRYPTO_ASYM_XFORM_MODEX, + /**< Modular Exponentiation + * Perform Modular Exponentiation b^e mod n + */ + RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END + /**< End of list */ +}; + +/** + * Asymmetric crypto operation type variants + */ +enum rte_crypto_asym_op_type { + RTE_CRYPTO_ASYM_OP_ENCRYPT, + /**< Asymmetric Encrypt operation */ + RTE_CRYPTO_ASYM_OP_DECRYPT, + /**< Asymmetric Decrypt operation */ + RTE_CRYPTO_ASYM_OP_SIGN, + /**< Signature Generation operation */ + RTE_CRYPTO_ASYM_OP_VERIFY, + /**< Signature Verification operation */ + RTE_CRYPTO_ASYM_OP_PRIVATE_KEY_GENERATE, + /**< DH Private Key generation operation */ + RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE, + /**< DH Public Key generation operation */ + RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE, + /**< DH Shared Secret compute operation */ + RTE_CRYPTO_ASYM_OP_LIST_END +}; + +/** + * Padding types for RSA signature. + */ +enum rte_crypto_rsa_padding_type { + RTE_CRYPTO_RSA_PADDING_NONE = 0, + /**< RSA no padding scheme */ + RTE_CRYPTO_RSA_PKCS1_V1_5_BT0, + /**< RSA PKCS#1 V1.5 Block Type 0 padding scheme + * as descibed in rfc2313 + */ + RTE_CRYPTO_RSA_PKCS1_V1_5_BT1, + /**< RSA PKCS#1 V1.5 Block Type 01 padding scheme + * as descibed in rfc2313 + */ + RTE_CRYPTO_RSA_PKCS1_V1_5_BT2, + /**< RSA PKCS#1 V1.5 Block Type 02 padding scheme + * as descibed in rfc2313 + */ + RTE_CRYPTO_RSA_PADDING_OAEP, + /**< RSA PKCS#1 OAEP padding scheme */ + RTE_CRYPTO_RSA_PADDING_PSS, + /**< RSA PKCS#1 PSS padding scheme */ + RTE_CRYPTO_RSA_PADDING_TYPE_LIST_END +}; + +/** + * RSA private key type enumeration + * + * enumerates private key format required to perform RSA crypto + * transform. + * + */ +enum rte_crypto_rsa_priv_key_type { + RTE_RSA_KEY_TYPE_EXP, + /**< RSA private key is an exponent */ + RTE_RSA_KET_TYPE_QT, + /**< RSA private key is in quintuple format + * See rte_crypto_rsa_priv_key_qt + */ +}; + +/** + * Structure describing RSA private key in quintuple format. + * See PKCS V1.5 RSA Cryptography Standard. + */ +struct rte_crypto_rsa_priv_key_qt { + rte_crypto_param p; + /**< p - Private key component P + * Private key component of RSA parameter required for CRT method + * of private key operations in Octet-string network byte order + * format. + */ + + rte_crypto_param q; + /**< q - Private key component Q + * Private key component of RSA parameter required for CRT method + * of private key operations in Octet-string network byte order + * format. + */ + + rte_crypto_param dP; + /**< dP - Private CRT component + * Private CRT component of RSA parameter required for CRT method + * RSA private key operations in Octet-string network byte order + * format. + * dP = d mod ( p - 1 ) + */ + + rte_crypto_param dQ; + /**< dQ - Private CRT component + * Private CRT component of RSA parameter required for CRT method + * RSA private key operations in Octet-string network byte order + * format. + * dQ = d mod ( q - 1 ) + */ + + rte_crypto_param qInv; + /**< qInv - Private CRT component + * Private CRT component of RSA parameter required for CRT method + * RSA private key operations in Octet-string network byte order + * format. + * qInv = inv q mod p + */ +}; + +/** + * Asymmetric RSA transform data + * + * Structure describing RSA xform params + * + */ +struct rte_crypto_rsa_xform { + rte_crypto_param n; + /**< n - Prime modulus + * Prime modulus data of RSA operation in Octet-string network + * byte order format. + */ + + rte_crypto_param e; + /**< e - Public key exponent + * Public key exponent used for RSA public key operations in Octet- + * string network byte order format. + */ + + enum rte_crypto_rsa_priv_key_type key_type; + + __extension__ + union { + rte_crypto_param d; + /**< d - Private key exponent + * Private key exponent used for RSA + * private key operations in + * Octet-string network byte order format. + */ + + struct rte_crypto_rsa_priv_key_qt qt; + /**< qt - Private key in quintuple format */ + }; +}; + +/** + * Asymmetric Modular exponentiation transform data + * + * Structure describing modular exponentation xform param + * + */ +struct rte_crypto_modex_xform { + rte_crypto_param modulus; + /**< modulus + * Prime modulus of the modexp transform operation in octet-string + * network byte order format. + */ + + rte_crypto_param exponent; + /**< exponent + * Private exponent of the modexp transform operation in + * octet-string network byte order format. + */ +}; + +/** + * Asymmetric modular inverse transform operation + * + * Structure describing modulus inverse xform params + * + */ +struct rte_crypto_modinv_xform { + rte_crypto_param modulus; + /**< + * Pointer to the prime modulus data for modular + * inverse operation in octet-string network byte + * order format. + */ +}; + +/** + * Asymmetric DH transform data + * + * Structure describing deffie-hellman xform params + * + */ +struct rte_crypto_dh_xform { + enum rte_crypto_asym_op_type type; + /**< Setup xform for key generate or shared secret compute */ + + rte_crypto_param p; + /**< p : Prime modulus data + * DH prime modulous data in octet-string network byte order format. + * + */ + + rte_crypto_param g; + /**< g : Generator + * DH group generator data in octet-string network byte order + * format. + * + */ +}; + +/** + * Asymmetric Digital Signature transform operation + * + * Structure describing DSA xform params + * + */ +struct rte_crypto_dsa_xform { + rte_crypto_param p; + /**< p - Prime modulus + * Prime modulus data for DSA operation in Octet-string network byte + * order format. + */ + rte_crypto_param q; + /**< q : Order of the subgroup. + * Order of the subgroup data in Octet-string network byte order + * format. + * (p-1) % q = 0 + */ + rte_crypto_param g; + /**< g: Generator of the subgroup + * Generator data in Octet-string network byte order format. + */ + rte_crypto_param x; + /**< x: Private key of the signer in octet-string network + * byte order format. + * Used when app has pre-defined private key. + * Valid only when xform chain is DSA ONLY. + * if xform chain is DH private key generate + DSA, then DSA sign + * compute will use internally generated key. + */ +}; + +/** + * Operations params for modular operations: + * exponentiation and invert + * + */ +struct rte_crypto_mod_op_param { + rte_crypto_param base; + /**< + * Pointer to base of modular exponentiation/inversion data in + * Octet-string network byte order format. + */ +}; + +/** + * Asymmetric crypto transform data + * + * Structure describing asym xforms. + */ +struct rte_crypto_asym_xform { + struct rte_crypto_asym_xform *next; + /**< Pointer to next xform to set up xform chain.*/ + enum rte_crypto_asym_xform_type xform_type; + /**< Asymmetric crypto transform */ + + __extension__ + union { + struct rte_crypto_rsa_xform rsa; + /**< RSA xform parameters */ + + struct rte_crypto_modex_xform modex; + /**< Modular Exponentiation xform parameters */ + + struct rte_crypto_modinv_xform modinv; + /**< Modulus Inverse xform parameters */ + + struct rte_crypto_dh_xform dh; + /**< DH xform parameters */ + + struct rte_crypto_dsa_xform dsa; + /**< DSA xform parameters */ + }; +}; + +struct rte_cryptodev_asym_session; + +/** + * RSA operation params + * + */ +struct rte_crypto_rsa_op_param { + enum rte_crypto_asym_op_type op_type; + /**< Type of RSA operation for transform */; + + rte_crypto_param message; + /**< + * Pointer to data + * - to be encrypted for RSA public encrypt. + * - to be decrypted for RSA private decrypt. + * - to be signed for RSA sign generation. + * - to be authenticated for RSA sign verification. + */ + + rte_crypto_param sign; + /**< + * Pointer to RSA signature data. If operation is RSA + * sign @ref RTE_CRYPTO_RSA_OP_SIGN, buffer will be + * over-written with generated signature. + * + * Length of the signature data will be equal to the + * RSA prime modulus length. + */ + + enum rte_crypto_rsa_padding_type pad; + /**< RSA padding scheme to be used for transform */ + + enum rte_crypto_auth_algorithm md; + /**< Hash algorithm to be used for data hash if padding + * scheme is either OAEP or PSS. Valid hash algorithms + * are: + * MD5, SHA1, SHA224, SHA256, SHA384, SHA512 + */ + + enum rte_crypto_auth_algorithm mgf1md; + /**< + * Hash algorithm to be used for mask generation if + * padding scheme is either OAEP or PSS. If padding + * scheme is unspecified data hash algorithm is used + * for mask generation. Valid hash algorithms are: + * MD5, SHA1, SHA224, SHA256, SHA384, SHA512 + */ +}; + +/** + * Deffie-Hellman Operations params. + * @note: + */ +struct rte_crypto_dh_op_param { + rte_crypto_param pub_key; + /**< + * Output generated public key when xform type is + * DH PUB_KEY_GENERATION. + * Input peer public key when xform type is DH + * SHARED_SECRET_COMPUTATION + * pub_key is in octet-string network byte order format. + * + */ + + rte_crypto_param priv_key; + /**< + * Output generated private key if xform type is + * DH PRIVATE_KEY_GENERATION + * Input when xform type is DH SHARED_SECRET_COMPUTATION. + * priv_key is in octet-string network byte order format. + * + */ + + rte_crypto_param shared_secret; + /**< + * Output with calculated shared secret + * when dh xform set up with op type = SHARED_SECRET_COMPUTATION. + * shared_secret is an octet-string network byte order format. + * + */ +}; + +/** + * DSA Operations params + * + */ +struct rte_crypto_dsa_op_param { + enum rte_crypto_asym_op_type op_type; + /**< Signature Generation or Verification */ + rte_crypto_param message; + /**< input message to be signed or verified */ + rte_crypto_param r; + /**< dsa sign component 'r' value + * + * output if op_type = sign generate, + * input if op_type = sign verify + */ + rte_crypto_param s; + /**< dsa sign component 's' value + * + * output if op_type = sign generate, + * input if op_type = sign verify + */ + rte_crypto_param y; + /**< y : Public key of the signer. + * Public key data of the signer in Octet-string network byte order + * format. + * y = g^x mod p + */ +}; + +/** + * Asymmetric Cryptographic Operation. + * + * Structure describing asymmetric crypto operation params. + * + */ +struct rte_crypto_asym_op { + struct rte_cryptodev_asym_session *session; + /**< Handle for the initialised session context */ + + __extension__ + union { + struct rte_crypto_rsa_op_param rsa; + struct rte_crypto_mod_op_param modex; + struct rte_crypto_mod_op_param modinv; + struct rte_crypto_dh_op_param dh; + struct rte_crypto_dsa_op_param dsa; + }; +} __rte_cache_aligned; + +#ifdef __cplusplus +} +#endif + +#endif /* _RTE_CRYPTO_ASYM_H_ */