From patchwork Tue Jul 10 15:33:18 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shally Verma X-Patchwork-Id: 42721 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 281C41B488; Tue, 10 Jul 2018 17:34:03 +0200 (CEST) Received: from NAM03-BY2-obe.outbound.protection.outlook.com (mail-by2nam03on0083.outbound.protection.outlook.com [104.47.42.83]) by dpdk.org (Postfix) with ESMTP id 02C511B475 for ; Tue, 10 Jul 2018 17:34:00 +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=gGlud7NFHSBLznShHawUpso8gelf7peXfSiPnUyzVFo=; b=g6gIp9opeT0bhfi1cXPQaN8JcTyE18lw2tkfg1UNbv+vRglFOBoeB6dJHFB+2bDAm70d5qOhPH+x4J7rDIzghCVVpsQWa9HW1AAt6Z2vcrwTmLkZsySqhPxsjUjuMwnfxfZIp4bZhVSNMjL3S1JZuvZwFmgIbUuxuqWH6ATLLzk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Shally.Verma@cavium.com; Received: from hyd1sverma-dt.caveonetworks.com (115.113.156.2) by DM5PR0701MB3639.namprd07.prod.outlook.com (2603:10b6:4:7e::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.930.20; Tue, 10 Jul 2018 15:33:57 +0000 From: Shally Verma To: pablo.de.lara.guarch@intel.com Cc: dev@dpdk.org, pathreya@caviumnetworks.com, nmurthy@caviumnetworks.com, Umesh Kartha , Sunila Sahu , Ashish Gupta Date: Tue, 10 Jul 2018 21:03:18 +0530 Message-Id: <1531236801-5931-2-git-send-email-shally.verma@caviumnetworks.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1531236801-5931-1-git-send-email-shally.verma@caviumnetworks.com> References: <1531236801-5931-1-git-send-email-shally.verma@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [115.113.156.2] X-ClientProxiedBy: BM1PR0101CA0007.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:18::17) To DM5PR0701MB3639.namprd07.prod.outlook.com (2603:10b6:4:7e::11) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8a6d72ba-c5b4-441d-c379-08d5e67a8e94 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989117)(5600053)(711020)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(8990107)(2017052603328)(7153060)(7193020); SRVR:DM5PR0701MB3639; X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3639; 3:4tUsH1WjDr2k39wrjukmRtiCbJ1acWfpN/wV6qZmdsrT+rPJ2oiBKZ/cPn0XWUJ3QL5Oi/8R5BddEIMBQ/qQuSfvyQjye9/1PASE2cygnkEE7b16aC1m+n4R4wm2YClYtHoukyN2Uet2t04Y/Qyj+V5N+ludf72YZz5IUPZhXesSCz2LeCVdyKiGjslAvJ3WkAd+//qeOia+y4mibdTKopQ+cx0mo8qQm1kzSIbnxzfwT1Zvid/t09jKz+fCRK25; 25:kATQ9SyMaPVgAd4x4UUErhJ47R3U3GBo8+Tsyr42/ATaMdOA5iebiwm62pueh8Q+Y/c3T838ApVaKyUAKAboaQoLY9b1rfxb1Cw10A6xUSrC1iwL70+FfoOno8oJ6sNko3r6WQMaIkwwhHfO8UiXG16iRC/09G8gzZUjfK2saOXNQ0myKG0UCKxGacW8b1IATCQPPDHHCAegOjDW5wX+iTrOjke1sssqWOiMkI4GW3GovoZPegEW+bj6bmsr/SuYcHf0K/E2pzqBn7T93xr2j7pXR0H5ekOQQN/l/yAFt05+IIjCVmY6dMLNAMLpI3d8FoIrLse15cEruyPV1P90qQ==; 31:lc6s9HZKHqdfu4msrolWrmJRJy48b6fqgb2T87ZoP2S8F+5cBTXZWWf+8tk/rHQIa2qEMXhJGv7m/a0ccqCWm0SXCrq5L/LFEzAvuRDSMDicl3gcP2CvT3UsGIkBqLxmfM6oAgGfyF0TxyeX3h2w47fFoC7Ce3qucMfaI5sBt6GyzD8nhj2Hh45A39KsROcSt6Y4q+dNdnTAR8NZsjhTrlM32eHkGCLyCCYq8bVhOXU= X-MS-TrafficTypeDiagnostic: DM5PR0701MB3639: X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3639; 20:tnFTri9FXiZ4w4C2nbBaswyJzRJFIKIw85FJkAAV1VFHprhIz3f22ThSeV3U0RIfXu2iZZJAY/xhWKC6SQryYU5IihM35llemRCZ2y1QX6Y+/IEWCEEH4QhOr1R0CCXEWMhnLKz7keE3vVALD/l73F7oWXwNoNjUuUOUwKrd5Go0OW7OgOcao2CXk4gutFJYJdENiZbs7DmPkzlfbHGNLuNyQVOniSKgI0AGTVhqyvs3+dY7K+xOq5dhKwoSFKZVhPGr1ZzC/+IUqXfjyCgiJm+PnO8XAQhygNZvbDGEqZf05VPtkXbfaMvX7VwztpsWDFP22Jw67F0JJYMOKCYIr/BmNuyF/BnFHLgcbGLknlVFks7VBHHs1iX+W/5XSOE9DoNlVVt61K8PQqFCsiVgH3GzKLx+Gw4sJQyyWEXZqL8jNuXmLxO256ybKVZ4LYnRa5CnZx3z99EZ+jORpSoZszvg4ic/Udi9wxBnUuiT8jx3+rGEY7fs3Nwykl/q8Rxss0jkHSt3CNg+5DIFUXvhxxc4cy43atypN/Ht7AWfVMEV7bVHGc774qQKQncNjB5rC0kCgF5szoEaze1FDwPXwU4OlfDdLCKRGd8hb4GB8P8=; 4:rSE3Un05H6zKvCmHBLEV2XA6p9vSNVXLQL89CFWuRfZUg+kRd5lwcRLGUtiGVUsZFTbgxeC1axzJW4FhQfoE4dF7vP4pYIRoZBr7g6ELVHhIwRHcPIHgvtiibU9X7Dgbu+38pQSIesjyEtIKmVWp5M+fGSDNAi2IpUZE43mtVJGTZEd/snKYM6q0z/G9pEXC/LDrZkn9Uq4hCTEd3U+CZvz2XdqxFFxRZno9AUGtFPJS37jhj1ETIkBqxG6BYSp9W9oO/hw9NCToUH53/1gHkg== 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)(8121501046)(5005006)(10201501046)(93006095)(3002001)(3231311)(944501410)(52105095)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123562045)(20161123564045)(20161123558120)(6072148)(201708071742011)(7699016); SRVR:DM5PR0701MB3639; BCL:0; PCL:0; RULEID:; SRVR:DM5PR0701MB3639; X-Forefront-PRVS: 0729050452 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(396003)(346002)(376002)(366004)(39860400002)(136003)(199004)(189003)(47776003)(2361001)(68736007)(53416004)(76176011)(66066001)(6486002)(6666003)(186003)(105586002)(16586007)(316002)(6916009)(51416003)(50466002)(97736004)(48376002)(72206003)(54906003)(8676002)(14444005)(4326008)(478600001)(5660300001)(16526019)(50226002)(6512007)(2906002)(386003)(3846002)(6506007)(44832011)(106356001)(107886003)(2616005)(26005)(55236004)(69596002)(6116002)(956004)(81166006)(2351001)(305945005)(25786009)(81156014)(53936002)(36756003)(8936002)(11346002)(52116002)(476003)(7736002)(486006)(42882007)(446003)(473944003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR0701MB3639; 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; DM5PR0701MB3639; 23:SOvNNSvAD6NdtZ8v9w+wAtowGUrv5Vq1N356+Ix?= Z4q8OZMvbKlCoVsd3KAyeiz86crp2owd+l/ABBB+2SkKZqtcuP8Ns6pWuQzA3ZjI+C+YdXxu9zslLvbZPdEBg4yZP9Xx9sSA/HRnvnR5/tNrlyYZjrK6GNNwHuKIRM34W8RTsCkLBUgYx5eSRe4nwKv14qthrF1MWZd9mFF4LIFdXCaxoRODVgedQNtrF+sE2UIYJ2QTULV05qn7PluWBuqdIIRU3+Mh86EiIoe5Ljsjr/jWpJgfp6eMhpOLV+XMbiDCta0A5TwzhloJnC6zb24QnHwj3KR3MCMhMBM8YmU8LLTr7jKYIbtdAQDeZeHhbCKr8daQVtIa9zzryz8Q7O6UtAAsG5ZCT4Izl8nkmkFcDTNhOXl9za8uRDfwtOMtay7Tr6+j8fg9ZVFzbv3ksNCj9ODKM7d/330gzJPw7asSET+n+Z99NrKthNn567zcGaMKQwxVuwV0v4aFjTDXmLCSbLbVRFJ1DDpY+b2e+jSPUyPWWyttKgB9L5nDEg+6wKA5vC074Zqsl5TOYdMcZ27WSv+4hQx2ZHIb8UKI7q6LzvNHugry9T2OgTkCk6MUPZ+QbYwYHtPVF4OREnQZY7l/h+Lqk+O3dvPVHEqYrDFG1/RzlPdukD4RSthAtCiaL656K+im2CSfvkoWqHlTAyZRX96PrTX4bVT/+Jf1HQt88z7zkt06Y6DWm6fbFt3WiwgKZd3hn26fWQInH8sggWVRZaATG/qSKPYgIyKqM9aSAM7i11HXI4uQo1lrOd6MQfmXgT46U3k7x7wMrj/zqp2p+qTajrb1qhphMT9l5RcMi2wp+PlpqN24DXgJP++/0bAqYLgZer2tAMFmGUf4E3HzXjwBTbKsOa2LKsPdPT7XIc4RFQIxc98DUs1ammdAqqC9WAH2DthywGLqDYTCw6w8JoVXvaxngOTZHGnl1fRNzERgGN7ijVuKW8iG9/SvgxTB1/2kmS8Y8OyCQVeahTtFmhaC8srT37uweIcq546RRZ/QTQ+ts0EncwJYGh0hBe+uqM7xyR0IOglkbydq+HSqQVpX1kLn9OmloDOwZZJhoosvTHJOvYpjoVSAlnOkVbLpMW1x8x1FAtsIIqA1v/jd4bD+jRJDCVVvmXP7KfqPqnkkql9dQk/8KeXxyhO3xj67LgHQftLmH1wf10GrXyiw/EkNxzxQHzNjuTyf+5JZerWEAf7eZKgJew9PStAULjv0zN0OmgBHGlBkNZsJLa5xXhyv5+LySJn2QUYfXYWOIKFwaUBneoC4xdyatwioU1PDcHoQfk+wT+3ZHLEtKVraacOLHLFqpCYoNGzuE3EuLYyzQUGDT71g8zfTG82SJGpxrTDnUG1eic4eJInCj9VEw X-Microsoft-Antispam-Message-Info: q1GdMoDpzthb0BAGS6NwhbR0XmTy+U8DlRDrqDkwORH+LySoJOZdT1JXdm+Ne8KfDCex/rTRJ1rIYbluoZUqfiOSs2TvI2VaYuEq7HIm7YLgDUKbsKkW/5TbHSmcA89lJZHC8h5UWSytpshCTE0ZfM474twgS/I12TkWFPuq3F1T0e4oXLSmSC0RbIXhjvqeGNcDC/5AWn+J7GMnQdYwCKzkytfJ/3Y3qEeA0GD/fuclky0CI+Am7IWsB4ryTWgnvf/Ooj1MY7RbdgspArYU/LwWAz5nIf4+L/HBnrMiu3+kxgF7K+aGAhVGU2NpXk5FuxeVKHfr3uX7syHEMdoQ/qNx5YBgNYj2voFandTVMpE= X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3639; 6:BkZXi2idF2nDkhTXP3mRO74EC7K3zXkXdLUa6OrMMdF3/FlX6MabvXeKL+OpRziMxKzDYR/TGxTUDjC0BJC+zxNbNR19YOePWGiyjFkM0Hwf1mdYY4tcxKKaBgWEPwz/03oy1L8pw4VUVdHIq8NEf3LHbow0zPBfwnut2bw5UosKMbm9wExHGvWqsa0Tkl0FLbEdzkbwThHND4Q/1Z5/m4UWNBnyFpWKfdRDvHryiBFVGih1mkV6iRN1MHkuUD2AMDMmAKhsmxoDsD46qsOivnyikP4UxJumkyjivw18tHP4Qgws6nA0LzIqoRgOoZvaHql7qTx9qEsOzG85AOdW+Q3ffeHdsanGIuhw/BOLJeFBRAIX4+1UBfMLJwAZXuZfKCU3sN2vuyRNpQjxROFxM9Y3qujLUImqAULb4ZeWX0S5AfINn2Ap0t1Ll1IfIO9V+QLVED3itVKpTcx6ZztNdg==; 5:tQ57I2BIiRzEXC+0HUqG13OGYLu7Vkx2nSiij457NhSQ85oR2SBeMBjTIzgn5mn8ic6PInldcezlG9zFo/Z6yfiS3rRpHlKPtnqUi698sxmuR11wBHw3fYUTl9yw9kQxIGJXnJgHOr8ev02Gto6fI9f9GPT4GeNvFTbCI/htQ+I=; 24:Z6VZm/GvrqT0ZQ8hLLuR7Y+JvdeVeezz2jjz4XpiQC1v5E3KDMQtVGUOYcEFD7kpFJhZsqhSc39Id7bn4jn0LhWzwC8KkBrHn6tzqXXrLZA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3639; 7:9PD6RIEU4zRzmGj75f4tws7yhVdzwc3SzTT4mzG6g006kAz0Y0gJhWPU/muaQZYq0cQhh2y2g7vsMWm/+uTXNCLc4WWsTpjcyTprhiYJZT+RRa0hAHMQziduNDrsEmu+lPnyCNySZNVg3nnJdpv9SiYwntKiRnhJHZp2kbkfPnqeUE4idCR3nbtpGvhhjuFHGDjnr7I0hS4zxNRSSCv9J+pHlao/vkdFlHBiTpzbhsPXkji4ZDI79aH6BIRO7ABT X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jul 2018 15:33:57.1178 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 8a6d72ba-c5b4-441d-c379-08d5e67a8e94 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0701MB3639 Subject: [dpdk-dev] [PATCH v5 1/4] cryptodev: add asymmetric xform and op definitions 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: Umesh Kartha Add rte_crypto_asym.h with supported xforms and associated op structures and APIs API currently supports: - RSA Encrypt, Decrypt, Sign and Verify - Modular Exponentiation and Inversion - DSA Sign and Verify - Diffie-hellman private key exchange - Diffie-hellman public key exchange - Diffie-hellman shared secret compute - Diffie-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..8915143 --- /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_ASYM_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_ */