From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AF084A0543; Thu, 26 May 2022 16:19:20 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8F08940151; Thu, 26 May 2022 16:19:20 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id 0158D40150 for ; Thu, 26 May 2022 16:19:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1653574758; x=1685110758; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=oDKEZNoUJMEizFTZ1EyLOj+dhAPVpE5CrecetpAf6Dc=; b=bzFfa7znqJaGiXiutcj2vmaAe8hgwaCwRpzyubmzPfv8Vj9537xZRLTE uRZr+Zm1IFPbrEmSbno1kvWrkBrZIOERr2XRpVR8pI7C6lHJvtBBdW4tL PT5kM8gPjBx6QF5ejoWzIO9KJob5e/IWI0dHfDMM8mDZVM91dlrIxsBrG lMFucaENcelwU2ipwXRLEs1rfw5gkfeHmHhlj6VXZYuWONBfb1e5PfNd6 DBkLRMT6FeoVWLmNyODPmtSDmuLMsjl9kZEhB+5eIFmooG06cJFamu0sE dEsf87DWzwaNqDNibQpSJ7jrp4yXIfAxsRUx8SieXpUaeyfH0IjP8hkz0 Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10359"; a="299505661" X-IronPort-AV: E=Sophos;i="5.91,252,1647327600"; d="scan'208";a="299505661" Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 May 2022 07:19:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,252,1647327600"; d="scan'208";a="527441538" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga003.jf.intel.com with ESMTP; 26 May 2022 07:19:16 -0700 Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Thu, 26 May 2022 07:19:16 -0700 Received: from fmsmsx610.amr.corp.intel.com (10.18.126.90) by fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Thu, 26 May 2022 07:19:15 -0700 Received: from fmsedg602.ED.cps.intel.com (10.1.192.136) by fmsmsx610.amr.corp.intel.com (10.18.126.90) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Thu, 26 May 2022 07:19:15 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.173) by edgegateway.intel.com (192.55.55.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Thu, 26 May 2022 07:19:15 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bqd+6U2WcYWdcIBqzZYTcN67h3dp+s1Wny4i+b+TT1JUTb2qotdxW8+l+21fjvYallGKsPNUQLGr2dcnKt1FkBYaMr+v6EDnZLBjNspgEkl/Tw3/qlLAR6pzY147G4+hKg7geYQKoIFL5BIE1yzP4NFaa5Hp6Wz5yeT1Ejitf6IHO3gZXw5EbIuiT+6pXL0RpBpB9wOxadZbSOH2T2ASLr6763dpDPQiGw2ajLOloIspD6xNQEqAb/dUMqgP33E1FASz9qwu10/Kiuu1wTNuyPUq/QPSBm2TDUCV39MMmcgw8gFyrYPBUofbdzC5l5QzGQ3CUg5fJv3csjAFZkpdbg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jU9BCGNv3czqQQqpKex1ws64n+5zYN0TLoD1AqgXm0Y=; b=Z6+TxjBENdDIW4jTxyA/ZD+BHX4bGLLWHsTg9YMEJ/kp189cLUFQeFMfffBKHGvZnzGd+/d6osxL265pUM7tFbsbGLVOG7y5aa6rTESzXXUbsWrDUSK3Ko3Qolk3aZMaY6mAjFMGsMO8GTNY8uW8y5LSex5IcW8Na77P/9HmP2MKHsg6WXz5kcAU3xt6b9A1AqXniuGwPMG1TSmD9WU9f4gbWBb58kTBMrAZAIl2CrdoTbAvs+c841MPy2C4E2rJwxaDcr236kx+sdduZnvWMBgLIkK0UJ+zbpjnS9hX9LVhUwxv4kIM8VTHDzUVEk+4PTWhprVxehIKdrMVaqo6Nw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from PH0PR11MB5013.namprd11.prod.outlook.com (2603:10b6:510:30::21) by DM6PR11MB4675.namprd11.prod.outlook.com (2603:10b6:5:2ac::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5293.13; Thu, 26 May 2022 14:19:07 +0000 Received: from PH0PR11MB5013.namprd11.prod.outlook.com ([fe80::c1de:722f:b4f3:91b5]) by PH0PR11MB5013.namprd11.prod.outlook.com ([fe80::c1de:722f:b4f3:91b5%3]) with mapi id 15.20.5293.013; Thu, 26 May 2022 14:19:07 +0000 From: "Kusztal, ArkadiuszX" To: Akhil Goyal , "dev@dpdk.org" CC: "Zhang, Roy Fan" Subject: RE: [EXT] [PATCH v2 14/14] cryptodev: add asym algorithms capabilities Thread-Topic: [EXT] [PATCH v2 14/14] cryptodev: add asym algorithms capabilities Thread-Index: AQHYcFkdgYaKCkxM/kCLdh98SNvglq0xHr4AgAARzCA= Date: Thu, 26 May 2022 14:19:07 +0000 Message-ID: References: <20220525155324.9288-1-arkadiuszx.kusztal@intel.com> <20220525155324.9288-15-arkadiuszx.kusztal@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.500.17 dlp-product: dlpe-windows authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: a49ea10d-bada-487b-47ed-08da3f22b244 x-ms-traffictypediagnostic: DM6PR11MB4675:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: sseszUaGTMmNTOE3B3dFOR9FUxWtK4ZqORQLCw5IPdLwneN9JtHhIv/Dt7hneSxP0fAJ4EeVRsMG6yWT9/9qDGNxShf9trvKo/wgrSLI9UTIhjXgGukI5bOGmi9hU//OA+zkhl8By5YZFtnE04ehp4mh1PQHx/r9hZ/lZDK0NNPV/0zODLd2P1E4tN7be+TwRQ+U9Nh4qthC8wH1EjiZTaYuk3VJzezi9RVDRkkMBYxM0/gFSGpw96h+zL0WqnV54DOIVtdKaSFBbu/Vc/77qaSpBqqxzIpA29bfdJqD/x0LgYg99/ClhA4vsR/dpP0gTF3rlD1Dstt5uBWShdPb4PU4cmBe4r2MPiXtx1g2efCoUom5LTJzXn8k7xSqTQIvhk8hjBVi9gvT3vHKVJuL9yphHtD2LEH7F4KQOohbf9gRVTwZkP0HBxiRl0PDVHDzZuoYFZr9I15kIycO1afO8Ztewiw6EU4H4yiqj0fs3P20S8fF67inNwpQFPBU579SejZ+ClwmtV33IW8q9KC7EV2v4GTTbNIm3n8tiiCTfZFxM1VQ+2fkFUjGAeZuIjFO7Is4M/v2A9quVY6WB4rHgbEPrWKIaTU2hkMfPZQsrOHcKBcEDrWeYDeVKJn7/A9S2NTpFWm9xcwgOn6fxpW7pvQT+t4/QXga98t1inJxWdF6UHW9pmpNhTXqSArMO8k90y3SX2r8OfnpnsGvUP4wQQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR11MB5013.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(7696005)(6506007)(55016003)(26005)(9686003)(66476007)(66946007)(64756008)(66556008)(30864003)(66446008)(4326008)(8676002)(76116006)(86362001)(82960400001)(5660300002)(33656002)(71200400001)(508600001)(52536014)(8936002)(2906002)(83380400001)(122000001)(316002)(38100700002)(107886003)(38070700005)(186003)(53546011)(110136005)(579004)(559001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?axcvds7URCrhvCbeAoOVlOKP1DWYxWQhe0Dl1pGBpc4HAxtRtT9Y399YldYu?= =?us-ascii?Q?WS2p7hQJ4ssPw7/C+DkEaVMrUiiZ6L/dn+LZKHipIIrMcflm7mElOxLfuZWF?= =?us-ascii?Q?OQ5FUcHGlzNqe8KgO4YZr6xsWWVKysKW8kxRLra9cUzqcUFyLHAIJoYm0z/S?= =?us-ascii?Q?QuqQKTu+e2noQmHMuoMwtlA/ED+yyOSt0H91jnjUM/ua+8qEzcwv0mG7cnwc?= =?us-ascii?Q?GdcDlcKDL2SVzi2VKr6HCT1orTbST7c5w1QwVVfD1i5QvXvPUQCqsej1qd3J?= =?us-ascii?Q?zo8OdCEs576Y4tZGZG2LAN0iX60Bs27SOGm4Cqjp9NxU+/lXY+Iu+tT4sxR1?= =?us-ascii?Q?Hm8JTfPsXoF0Gc5Lmst/FYs7uWroxMgZcD4L58a2G2c2SawRG2fdt/NTfg2Z?= =?us-ascii?Q?oDdpnt2CekqjUak98LG5+KvjrcV9V/zSEqgvCD1blUfC0IEVCJRhGhKoNUzN?= =?us-ascii?Q?5086G768EBWHBIIq0mCD2rWaZehLlxZtgXt7jM3FXPZBPCmuiVpIig2yt0EU?= =?us-ascii?Q?KiwHnVm+tHwHmvtSvffI2vCVyXgq104kHELMyAw0QNMOcYp48aVNFBi09hVK?= =?us-ascii?Q?PIW+U07cYzr103iFUr4MrbC7Xnni26OOj9SZ0rBIvgKI4+AjfX+mEgUmwmKw?= =?us-ascii?Q?XtOx0t39c6tOpPRAakx0YWiIdAyCwvS+OAk9H/4zqIvETnfuH+lopG3a9/Kt?= =?us-ascii?Q?tdzZFY/oFNMlclsZgxu0m15AvmkQ8EFbCGfAY3m5ZDC/QfYaVOAN+hpFclYD?= =?us-ascii?Q?0UuKEopOWkhULRiicDd+6wmWraCUa7MOrPT32/8LNeSyu5a5ogyJwogsDVP2?= =?us-ascii?Q?ZAdsEFDksqez4CJwfFljstcLu7sKUK++c33pA72f+5jaU0wBqegkjzAKTUF2?= =?us-ascii?Q?eeGH5qWObpqO42YON8u/Z01aeb4QWRM2sqtg4YjyK2DxVcBtM5nCW/9Fp11L?= =?us-ascii?Q?UtGCmg0tz/dAH+neUc5qAkZP/ua1b/PkP3f5chpJ5fEEuf9r9D7gtPc2nh5Y?= =?us-ascii?Q?KjCdkJPaVwrx656QL3t539emj0ssAK2EeqZlOtck4REyuc+ABy/zZq5p/mO/?= =?us-ascii?Q?sediYQG9yQokDMhuMIsgdN2J6VBsqV16tg7RU9mq+bbAujl7Sje564maPCoz?= =?us-ascii?Q?NW5IwxVj+8DKZq7+d4T3+mbSts5v8VlVOUWsw/VbZOH6ZSLGj08WycUsmgMF?= =?us-ascii?Q?MlIq/t2UruwLyigFFFfkjueNgqks3LaCHyJQA0aB28u+Z/0/8EKiSjyxmaFP?= =?us-ascii?Q?k27fJWhzWJuraNxbWb7ZjmitNwhX0LV6LM3G24vrN3/KDljqipRLl2v8muMF?= =?us-ascii?Q?q+gOrg++QlSEnj/rSO8Y4M4D/tH0+9cd9OzU2TnKmFwAZ944mHLUn7nUL/Mn?= =?us-ascii?Q?aY8DnVNDGMiLMBqt3/vHUDDUCDRDUhklbC8EQoENuTBELgWVjh1huQS2lFzq?= =?us-ascii?Q?ZleXhEiA+KnFKGRErfwJY3YCxa+r9JzYTIbUaYH8X0teSvr4dhKj57DtjxFf?= =?us-ascii?Q?14JJLzqpfVEUKLrKSPaxyflqccPbUAKINeQGLpGERmUOvliOp7AuAXc8nKFR?= =?us-ascii?Q?BG3iBOzzxMcm3YC7pYUulLYjrCydJHDr0dBeFoWoV5J9K95kMQPf7gQ/ZSAH?= =?us-ascii?Q?JCGRy9mqsE9iCW00Wei8592bohgzLDRFFRBy66QIe2JvCObE/Vco4p9e30p7?= =?us-ascii?Q?MtEFGbTetvdTsie+T3cxoexXkR1ZHNV+zhwI1cRhvyazgjGfKofm9mJnWpIF?= =?us-ascii?Q?UklHnX6mQ6YmTXBNuvafw2JVTfRFCWE=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5013.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a49ea10d-bada-487b-47ed-08da3f22b244 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 May 2022 14:19:07.8291 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: MLh8OSQFyWRzG1S6hvQ7rI0qGE2THQC3qe+IXKMOfH5EhPLuLfgX9iVOXXA5e3ChkBIGlYlnsuPxHb1/PTsapSK8Q9T1soHns9fsDZclo8w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4675 X-OriginatorOrg: intel.com 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 > -----Original Message----- > From: Akhil Goyal > Sent: Thursday, May 26, 2022 2:54 PM > To: Kusztal, ArkadiuszX ; dev@dpdk.org > Cc: Zhang, Roy Fan > Subject: RE: [EXT] [PATCH v2 14/14] cryptodev: add asym algorithms capabi= lities >=20 > > - Added asymmetric crypto algorithm specific capability struct. > > Included fields like random number capability, padding flags etc. > > > > Signed-off-by: Arek Kusztal > > --- > > app/test-crypto-perf/main.c | 12 +- > > app/test-eventdev/test_perf_common.c | 2 +- > > app/test/test_cryptodev_asym.c | 210 +++++++++++++++++++= ++------ > > app/test/test_event_crypto_adapter.c | 16 +- > > drivers/crypto/openssl/rte_openssl_pmd_ops.c | 128 +++++++--------- > > drivers/crypto/qat/dev/qat_asym_pmd_gen1.c | 68 +++++++-- > > lib/cryptodev/rte_crypto_asym.h | 48 ++++++ > > lib/cryptodev/rte_cryptodev.c | 80 +++++++++- > > lib/cryptodev/rte_cryptodev.h | 75 +++++++++- > > lib/cryptodev/version.map | 4 + > > 10 files changed, 495 insertions(+), 148 deletions(-) >=20 > This would also need a change in documentation. >=20 > > > > diff --git a/app/test-crypto-perf/main.c b/app/test-crypto-perf/main.c > > index 17e30a8e74..f8a4c9cdcf 100644 > > --- a/app/test-crypto-perf/main.c > > +++ b/app/test-crypto-perf/main.c > > @@ -364,8 +364,8 @@ cperf_verify_devices_capabilities(struct > > cperf_options *opts, > > struct rte_cryptodev_sym_capability_idx cap_idx; > > const struct rte_cryptodev_symmetric_capability *capability; > > struct rte_cryptodev_asym_capability_idx asym_cap_idx; > > - const struct rte_cryptodev_asymmetric_xform_capability > > *asym_capability; > > - > > + const struct rte_cryptodev_asymmetric_capability *asym_capability; > > + struct rte_crypto_mod_capability mod_capa =3D {0}; > > > > uint8_t i, cdev_id; > > int ret; > > @@ -381,11 +381,11 @@ cperf_verify_devices_capabilities(struct > > cperf_options *opts, > > if (asym_capability =3D=3D NULL) > > return -1; > > > > - ret =3D > > rte_cryptodev_asym_xform_capability_check_modlen( > > - asym_capability, opts->modex_data- > > >modulus.len); > > - if (ret !=3D 0) > > + mod_capa.max_mod_size =3D opts->modex_data- > > >modulus.len; > > + ret =3D rte_cryptodev_capa_check_mod(asym_capability, > > + mod_capa); > > + if (ret =3D=3D 0) > > return ret; > > - > > } > > > > if (opts->op_type =3D=3D CPERF_AUTH_ONLY || diff --git > > a/app/test-eventdev/test_perf_common.c b/app/test- > > eventdev/test_perf_common.c index b41785492e..ac8e6410ab 100644 > > --- a/app/test-eventdev/test_perf_common.c > > +++ b/app/test-eventdev/test_perf_common.c > > @@ -846,7 +846,7 @@ cryptodev_sym_sess_create(struct prod_data *p, > > struct test_perf *t) static void * cryptodev_asym_sess_create(struct > > prod_data *p, struct test_perf *t) { > > - const struct rte_cryptodev_asymmetric_xform_capability *capability; > > + const struct rte_cryptodev_asymmetric_capability *capability; > > struct rte_cryptodev_asym_capability_idx cap_idx; > > struct rte_crypto_asym_xform xform; > > void *sess; > > diff --git a/app/test/test_cryptodev_asym.c > > b/app/test/test_cryptodev_asym.c index 072dbb30f4..c531265642 100644 > > --- a/app/test/test_cryptodev_asym.c > > +++ b/app/test/test_cryptodev_asym.c > > @@ -311,10 +311,11 @@ test_cryptodev_asym_op(struct > > crypto_testsuite_params_asym *ts_params, > > struct rte_crypto_asym_xform xform_tc; > > void *sess =3D NULL; > > struct rte_cryptodev_asym_capability_idx cap_idx; > > - const struct rte_cryptodev_asymmetric_xform_capability *capability; > > + const struct rte_cryptodev_asymmetric_capability *capability; > > uint8_t dev_id =3D ts_params->valid_devs[0]; > > uint8_t input[TEST_DATA_SIZE] =3D {0}; > > uint8_t *result =3D NULL; > > + struct rte_crypto_mod_capability mod_capa =3D {0}; > > > > int ret, status =3D TEST_SUCCESS; > > > > @@ -358,8 +359,10 @@ test_cryptodev_asym_op(struct > > crypto_testsuite_params_asym *ts_params, > > asym_op->modex.base.length =3D data_tc->modex.base.len; > > asym_op->modex.result.data =3D result; > > asym_op->modex.result.length =3D data_tc->modex.result_len; > > - if > > (rte_cryptodev_asym_xform_capability_check_modlen(capability, > > - xform_tc.modex.modulus.length)) { > > + > > + mod_capa.max_mod_size =3D xform_tc.modex.modulus.length; > > + if (!rte_cryptodev_capa_check_mod(capability, > > + mod_capa)) { > > snprintf(test_msg, ASYM_TEST_MSG_LEN, > > "line %u " > > "FAILED: %s", __LINE__, > > @@ -378,8 +381,10 @@ test_cryptodev_asym_op(struct > > crypto_testsuite_params_asym *ts_params, > > asym_op->modinv.base.length =3D data_tc->modinv.base.len; > > asym_op->modinv.result.data =3D result; > > asym_op->modinv.result.length =3D data_tc->modinv.result_len; > > - if > > (rte_cryptodev_asym_xform_capability_check_modlen(capability, > > - xform_tc.modinv.modulus.length)) { > > + > > + mod_capa.max_mod_size =3D xform_tc.modinv.modulus.length; > > + if (!rte_cryptodev_capa_check_mod(capability, > > + mod_capa)) { > > snprintf(test_msg, ASYM_TEST_MSG_LEN, > > "line %u " > > "FAILED: %s", __LINE__, > > @@ -963,38 +968,100 @@ ut_teardown_asym(void) > > rte_cryptodev_stop(ts_params->valid_devs[0]); > > } > > > > -static inline void print_asym_capa( > > - const struct rte_cryptodev_asymmetric_xform_capability > > *capa) > > +static void > > +print_rsa_capability( > > + const struct rte_cryptodev_asymmetric_capability *capa) > > { > > int i =3D 0; > > > > + printf("\nSupported paddings:"); > > + for (; i < 32; i++) { > > + if (capa->rsa.padding & RTE_BIT32(i)) > > + printf("\n - %s", rte_crypto_asym_rsa_padding[i]); > > + } > > + printf("\nSupported hash functions:"); > > + for (i =3D 0; i < 32; i++) { > > + if (capa->rsa.hash & RTE_BIT32(i)) > > + printf("\n - %s", rte_crypto_auth_algorithm_strings[i]); > > + } > > + printf("\nMaximum key size: "); > > + if (capa->rsa.max_key_size =3D=3D 0) > > + printf("Unlimited"); > > + else > > + printf("%hu", capa->rsa.max_key_size); } > > + > > +static void > > +print_supported_curves(uint64_t curves) { > > + int i =3D 0; > > + > > + printf("\nSupported elliptic curves:"); > > + for (; i < 64; i++) { > > + if (curves & RTE_BIT64(i)) > > + printf("\n - %s", rte_crypto_curves_strings[i]); > > + } > > +} > > + > > +static inline void print_asym_capa( > > + const struct rte_cryptodev_asymmetric_capability *capa) { > > printf("\nxform type: %s\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D\n", > > rte_crypto_asym_xform_strings[capa->xform_type]); > > - printf("operation supported -"); > > > > - for (i =3D 0; i < RTE_CRYPTO_ASYM_OP_LIST_END; i++) { > > - /* check supported operations */ > > - if (rte_cryptodev_asym_xform_capability_check_optype(capa, > > i)) > > - printf(" %s", > > - rte_crypto_asym_op_strings[i]); > > - } > > - switch (capa->xform_type) { > > - case RTE_CRYPTO_ASYM_XFORM_RSA: > > - case RTE_CRYPTO_ASYM_XFORM_MODINV: > > - case RTE_CRYPTO_ASYM_XFORM_MODEX: > > - case RTE_CRYPTO_ASYM_XFORM_DH: > > - case RTE_CRYPTO_ASYM_XFORM_DSA: > > - printf(" modlen: min %d max %d increment %d", > > - capa->modlen.min, > > - capa->modlen.max, > > - capa->modlen.increment); > > + switch (capa->xform_type) { > > + case RTE_CRYPTO_ASYM_XFORM_MODEX: > > + case RTE_CRYPTO_ASYM_XFORM_MODINV: > > + printf("Maximum size of modulus: "); > > + if (capa->mod.max_mod_size =3D=3D 0) > > + printf("Unlimited"); > > + else > > + printf("%hu", capa->mod.max_mod_size); > > break; > > - case RTE_CRYPTO_ASYM_XFORM_ECDSA: > > - case RTE_CRYPTO_ASYM_XFORM_ECPM: > > - default: > > - break; > > - } > > - printf("\n"); > > + case RTE_CRYPTO_ASYM_XFORM_RSA: > > + print_rsa_capability(capa); > > + break; > > + case RTE_CRYPTO_ASYM_XFORM_DH: >=20 > ECDH?? I hope it will be added once it is tested in this app. >=20 > > + printf("Maximum group size: "); > > + if (capa->dh.max_group_size =3D=3D 0) > > + printf("Unlimited"); > > + else > > + printf("%hu", capa->dh.max_group_size); > > + printf("\nSupport for private key generation: "); > > + if (capa->dh.priv_key_gen) > > + printf("Yes"); > > + else > > + printf("No"); > > + break; > > + case RTE_CRYPTO_ASYM_XFORM_DSA: > > + printf("Maximum key size: "); > > + if (capa->dsa.max_key_size =3D=3D 0) > > + printf("Unlimited"); > > + else > > + printf("%hu", capa->dsa.max_key_size); > > + printf("\nSupport for random 'k' generation: "); > > + if (capa->dsa.random_k) > > + printf("Yes"); > > + else > > + printf("No"); > > + break; > > + > > + break; > > + case RTE_CRYPTO_ASYM_XFORM_ECDSA: > > + print_supported_curves(capa->ecdsa.curves); > > + printf("\nSupport for random 'k' generation: "); > > + if (capa->ecdsa.random_k) > > + printf("Yes"); > > + else > > + printf("No"); > > + break; > > + case RTE_CRYPTO_ASYM_XFORM_ECPM: > > + print_supported_curves(capa->ecpm.curves); > > + break; > > + default: > > + break; > > + } > > + printf("\n"); > > } > > > > static int > > @@ -1006,7 +1073,7 @@ test_capability(void) > > const struct rte_cryptodev_capabilities *dev_capa; > > int i =3D 0; > > struct rte_cryptodev_asym_capability_idx idx; > > - const struct rte_cryptodev_asymmetric_xform_capability *capa; > > + const struct rte_cryptodev_asymmetric_capability *capa; > > > > rte_cryptodev_info_get(dev_id, &dev_info); > > if (!(dev_info.feature_flags & > > @@ -1023,7 +1090,7 @@ test_capability(void) > > dev_capa =3D &(dev_info.capabilities[i]); > > if (dev_info.capabilities[i].op =3D=3D > > RTE_CRYPTO_OP_TYPE_ASYMMETRIC) { > > - idx.type =3D dev_capa->asym.xform_capa.xform_type; > > + idx.type =3D dev_capa->asym.xform_type; > > > > capa =3D rte_cryptodev_asym_capability_get(dev_id, > > (const struct > > @@ -1386,10 +1453,11 @@ test_mod_inv(void) > > void *sess =3D NULL; > > int status =3D TEST_SUCCESS; > > struct rte_cryptodev_asym_capability_idx cap_idx; > > - const struct rte_cryptodev_asymmetric_xform_capability *capability; > > + const struct rte_cryptodev_asymmetric_capability *capability; > > uint8_t input[TEST_DATA_SIZE] =3D {0}; > > int ret =3D 0; > > uint8_t result[sizeof(mod_p)] =3D { 0 }; > > + struct rte_crypto_mod_capability mod_capa =3D {0}; > > > > if (rte_cryptodev_asym_get_xform_enum( > > &modinv_xform.xform_type, "modinv") < 0) { @@ -1408,13 > +1476,11 @@ > > test_mod_inv(void) > > return TEST_SKIPPED; > > } > > > > - if (rte_cryptodev_asym_xform_capability_check_modlen( > > - capability, > > - modinv_xform.modinv.modulus.length)) { > > - RTE_LOG(ERR, USER1, > > - "Invalid MODULUS length specified\n"); > > - return TEST_SKIPPED; > > - } > > + mod_capa.max_mod_size =3D modinv_xform.modinv.modulus.length; > > + if (!rte_cryptodev_capa_check_mod(capability, mod_capa)) { > > + RTE_LOG(ERR, USER1, "Invalid MODULUS length specified\n"); > > + return TEST_SKIPPED; > > + } > > > > ret =3D rte_cryptodev_asym_session_create(dev_id, &modinv_xform, > > sess_mpool, &sess); > > if (ret < 0) { > > @@ -1499,7 +1565,8 @@ test_mod_exp(void) > > void *sess =3D NULL; > > int status =3D TEST_SUCCESS; > > struct rte_cryptodev_asym_capability_idx cap_idx; > > - const struct rte_cryptodev_asymmetric_xform_capability *capability; > > + const struct rte_cryptodev_asymmetric_capability *capability; > > + struct rte_crypto_mod_capability mod_capa =3D {0}; > > uint8_t input[TEST_DATA_SIZE] =3D {0}; > > int ret =3D 0; > > uint8_t result[sizeof(mod_p)] =3D { 0 }; @@ -1522,12 +1589,11 @@ > > test_mod_exp(void) > > return TEST_SKIPPED; > > } > > > > - if (rte_cryptodev_asym_xform_capability_check_modlen( > > - capability, modex_xform.modex.modulus.length)) { > > - RTE_LOG(ERR, USER1, > > - "Invalid MODULUS length specified\n"); > > - return TEST_SKIPPED; > > - } > > + mod_capa.max_mod_size =3D modex_xform.modex.modulus.length; > > + if (!rte_cryptodev_capa_check_mod(capability, mod_capa)) { > > + RTE_LOG(ERR, USER1, "Invalid MODULUS length specified\n"); > > + return TEST_SKIPPED; > > + } > > > > /* Create op, create session, and process packets. 8< */ > > op =3D rte_crypto_op_alloc(op_mpool, > > RTE_CRYPTO_OP_TYPE_ASYMMETRIC); > > @@ -1785,6 +1851,8 @@ test_ecdsa_sign_verify(enum curve curve_id) > > struct rte_crypto_asym_xform xform; > > struct rte_crypto_asym_op *asym_op; > > struct rte_cryptodev_info dev_info; > > + struct rte_cryptodev_asym_capability_idx idx; > > + const struct rte_cryptodev_asymmetric_capability *capabilities; > > struct rte_crypto_op *op =3D NULL; > > int ret, status =3D TEST_SUCCESS; > > > > @@ -1814,6 +1882,25 @@ test_ecdsa_sign_verify(enum curve curve_id) > > > > rte_cryptodev_info_get(dev_id, &dev_info); > > > > + struct rte_crypto_ecdsa_capability capa =3D { > > + .curves =3D RTE_BIT32(input_params.curve), > > + .random_k =3D 0 > > + }; > > + > > + idx.type =3D RTE_CRYPTO_ASYM_XFORM_ECDSA; > > + capabilities =3D rte_cryptodev_asym_capability_get(dev_id, > > + (const struct > > + rte_cryptodev_asym_capability_idx *) &idx); > > + > > + if (capabilities =3D=3D NULL) { > > + status =3D TEST_SKIPPED; > > + goto exit; > > + } > > + if (!rte_cryptodev_capa_check_ecdsa(capabilities, capa)) { > > + status =3D TEST_SKIPPED; > > + goto exit; > > + } > > + > > /* Setup crypto op data structure */ > > op =3D rte_crypto_op_alloc(op_mpool, > > RTE_CRYPTO_OP_TYPE_ASYMMETRIC); > > if (op =3D=3D NULL) { > > @@ -1962,6 +2049,8 @@ test_ecdsa_sign_verify_all_curve(void) > > status =3D test_ecdsa_sign_verify(curve_id); > > if (status =3D=3D TEST_SUCCESS) { > > msg =3D "succeeded"; > > + } else if (status =3D=3D TEST_SKIPPED) { > > + continue; > > } else { > > msg =3D "failed"; > > overall_status =3D status; > > @@ -1987,6 +2076,8 @@ test_ecpm(enum curve curve_id) > > struct rte_crypto_asym_xform xform; > > struct rte_crypto_asym_op *asym_op; > > struct rte_cryptodev_info dev_info; > > + struct rte_cryptodev_asym_capability_idx idx; > > + const struct rte_cryptodev_asymmetric_capability *capabilities; > > struct rte_crypto_op *op =3D NULL; > > int ret, status =3D TEST_SUCCESS; > > > > @@ -2016,6 +2107,24 @@ test_ecpm(enum curve curve_id) > > > > rte_cryptodev_info_get(dev_id, &dev_info); > > > > + struct rte_crypto_ecdsa_capability capa =3D { > > + .curves =3D RTE_BIT32(input_params.curve) > > + }; > > + > > + idx.type =3D RTE_CRYPTO_ASYM_XFORM_ECPM; > > + capabilities =3D rte_cryptodev_asym_capability_get(dev_id, > > + (const struct > > + rte_cryptodev_asym_capability_idx *) &idx); > > + > > + if (capabilities =3D=3D NULL) { > > + status =3D TEST_SKIPPED; > > + goto exit; > > + } > > + if (!rte_cryptodev_capa_check_ecdsa(capabilities, capa)) { > > + status =3D TEST_SKIPPED; > > + goto exit; > > + } > > + > > /* Setup crypto op data structure */ > > op =3D rte_crypto_op_alloc(op_mpool, > > RTE_CRYPTO_OP_TYPE_ASYMMETRIC); > > if (op =3D=3D NULL) { > > @@ -2124,6 +2233,8 @@ test_ecpm_all_curve(void) > > status =3D test_ecpm(curve_id); > > if (status =3D=3D TEST_SUCCESS) { > > msg =3D "succeeded"; > > + } else if (status =3D=3D TEST_SKIPPED) { > > + continue; > > } else { > > msg =3D "failed"; > > overall_status =3D status; > > @@ -2162,7 +2273,12 @@ static struct unit_test_suite > > cryptodev_qat_asym_testsuite =3D { > > .setup =3D testsuite_setup, > > .teardown =3D testsuite_teardown, > > .unit_test_cases =3D { > > + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, > > test_capability), > > TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, > test_one_by_one), > > + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, > > + test_ecdsa_sign_verify_all_curve), > > + TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, > > + test_ecpm_all_curve), > > TEST_CASES_END() /**< NULL terminate unit test array */ > > } > > }; >=20 > I think patch need to be split for adding test app changes. >=20 >=20 > > diff --git a/app/test/test_event_crypto_adapter.c > > b/app/test/test_event_crypto_adapter.c > > index 2ecc7e2cea..9a62241371 100644 > > --- a/app/test/test_event_crypto_adapter.c > > +++ b/app/test/test_event_crypto_adapter.c > > @@ -450,7 +450,7 @@ test_session_with_op_forward_mode(void) > > static int > > test_asym_op_forward_mode(uint8_t session_less) { > > - const struct rte_cryptodev_asymmetric_xform_capability *capability; > > + const struct rte_cryptodev_asymmetric_capability *capability; > > struct rte_cryptodev_asym_capability_idx cap_idx; > > struct rte_crypto_asym_xform xform_tc; > > union rte_event_crypto_metadata m_data; @@ -458,6 +458,7 @@ > > test_asym_op_forward_mode(uint8_t session_less) > > struct rte_crypto_asym_op *asym_op; > > struct rte_crypto_op *op; > > uint8_t input[4096] =3D {0}; > > + struct rte_crypto_mod_capability mod_capa =3D {0}; > > uint8_t *result =3D NULL; > > struct rte_event ev; > > void *sess =3D NULL; > > @@ -503,8 +504,9 @@ test_asym_op_forward_mode(uint8_t session_less) > > asym_op->modex.base.length =3D modex_test_case.base.len; > > asym_op->modex.result.data =3D result; > > asym_op->modex.result.length =3D modex_test_case.result_len; > > - if (rte_cryptodev_asym_xform_capability_check_modlen(capability, > > - xform_tc.modex.modulus.length)) { > > + > > + mod_capa.max_mod_size =3D xform_tc.modex.modulus.length; > > + if (!rte_cryptodev_capa_check_mod(capability, mod_capa)) { > > RTE_LOG(INFO, USER1, > > "line %u FAILED: %s", __LINE__, > > "Invalid MODULUS length specified"); @@ -784,7 > +786,7 @@ > > test_session_with_op_new_mode(void) > > static int > > test_asym_op_new_mode(uint8_t session_less) { > > - const struct rte_cryptodev_asymmetric_xform_capability *capability; > > + const struct rte_cryptodev_asymmetric_capability *capability; > > struct rte_cryptodev_asym_capability_idx cap_idx; > > struct rte_crypto_asym_xform xform_tc; > > union rte_event_crypto_metadata m_data; @@ -792,6 +794,7 @@ > > test_asym_op_new_mode(uint8_t session_less) > > struct rte_crypto_asym_op *asym_op; > > struct rte_crypto_op *op; > > uint8_t input[4096] =3D {0}; > > + struct rte_crypto_mod_capability mod_capa =3D {0}; >=20 > Can you move this above to maintain reverse Xmas tree? >=20 > > uint8_t *result =3D NULL; > > void *sess =3D NULL; > > uint32_t cap; > > @@ -835,8 +838,9 @@ test_asym_op_new_mode(uint8_t session_less) > > asym_op->modex.base.length =3D modex_test_case.base.len; > > asym_op->modex.result.data =3D result; > > asym_op->modex.result.length =3D modex_test_case.result_len; > > - if (rte_cryptodev_asym_xform_capability_check_modlen(capability, > > - xform_tc.modex.modulus.length)) { > > + > > + mod_capa.max_mod_size =3D xform_tc.modex.modulus.length; > > + if (!rte_cryptodev_capa_check_mod(capability, mod_capa)) { > > RTE_LOG(INFO, USER1, > > "line %u FAILED: %s", __LINE__, > > "Invalid MODULUS length specified"); diff --git > > a/drivers/crypto/openssl/rte_openssl_pmd_ops.c > > b/drivers/crypto/openssl/rte_openssl_pmd_ops.c > > index 16ec5e15eb..e734fc2a69 100644 > > --- a/drivers/crypto/openssl/rte_openssl_pmd_ops.c > > +++ b/drivers/crypto/openssl/rte_openssl_pmd_ops.c > > @@ -7,6 +7,7 @@ > > #include > > #include > > #include > > +#include > > > > #include "openssl_pmd_private.h" > > #include "compat.h" > > @@ -470,103 +471,82 @@ static const struct rte_cryptodev_capabilities > > openssl_pmd_capabilities[] =3D { > > }, } > > }, } > > }, > > - { /* RSA */ > > + { /* Modular exponentiation */ > > .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > {.asym =3D { > > - .xform_capa =3D { > > - .xform_type =3D > > RTE_CRYPTO_ASYM_XFORM_RSA, > > - .op_types =3D ((1 << > > RTE_CRYPTO_ASYM_OP_SIGN) | > > - (1 << RTE_CRYPTO_ASYM_OP_VERIFY) > > | > > - (1 << > > RTE_CRYPTO_ASYM_OP_ENCRYPT) | > > - (1 << > > RTE_CRYPTO_ASYM_OP_DECRYPT)), > > - { > > - .modlen =3D { > > - /* min length is based on openssl rsa keygen */ > > - .min =3D 30, > > - /* value 0 symbolizes no limit on max length */ > > - .max =3D 0, > > - .increment =3D 1 > > - }, } > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_MODEX, > > + .mod =3D { > > + .max_mod_size =3D 0 > > + } > > } > > - }, > > } > > }, > > - { /* modexp */ > > + { /* Modular multiplicative inverse */ > > .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > {.asym =3D { > > - .xform_capa =3D { > > - .xform_type =3D > > RTE_CRYPTO_ASYM_XFORM_MODEX, > > - .op_types =3D 0, > > - { > > - .modlen =3D { > > - /* value 0 symbolizes no limit on min length */ > > - .min =3D 0, > > - /* value 0 symbolizes no limit on max length */ > > - .max =3D 0, > > - .increment =3D 1 > > - }, } > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_MODINV, > > + .mod =3D { > > + .max_mod_size =3D 0 > > + } > > } > > - }, > > } > > }, > > - { /* modinv */ > > + { /* RSA */ > > .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > {.asym =3D { > > - .xform_capa =3D { > > - .xform_type =3D > > RTE_CRYPTO_ASYM_XFORM_MODINV, > > - .op_types =3D 0, > > - { > > - .modlen =3D { > > - /* value 0 symbolizes no limit on min length */ > > - .min =3D 0, > > - /* value 0 symbolizes no limit on max length */ > > - .max =3D 0, > > - .increment =3D 1 > > - }, } > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_RSA, > > + .rsa =3D { > > + .padding =3D > > + > > RTE_BIT32(RTE_CRYPTO_RSA_PADDING_NONE) | > > + > > RTE_BIT32(RTE_CRYPTO_RSA_PADDING_PKCS1_5), > > + .hash =3D > > + RTE_BIT32(RTE_CRYPTO_AUTH_MD5) > > | > > + RTE_BIT32(RTE_CRYPTO_AUTH_SHA1) > > | > > + > > RTE_BIT32(RTE_CRYPTO_AUTH_SHA224) | > > + > > RTE_BIT32(RTE_CRYPTO_AUTH_SHA256) | > > + > > RTE_BIT32(RTE_CRYPTO_AUTH_SHA384) | > > + > > RTE_BIT32(RTE_CRYPTO_AUTH_SHA512), > > + .max_key_size =3D 0 > > + } > > } > > - }, > > } > > }, > > - { /* dh */ > > + { /* Diffie-Hellman */ > > .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > {.asym =3D { > > - .xform_capa =3D { > > - .xform_type =3D > > RTE_CRYPTO_ASYM_XFORM_DH, > > - .op_types =3D > > - > > ((1< > - (1 << > > RTE_CRYPTO_ASYM_KE_PUBLIC_KEY_GENERATE | > > - (1 << > > - > > RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE))), > > - { > > - .modlen =3D { > > - /* value 0 symbolizes no limit on min length */ > > - .min =3D 0, > > - /* value 0 symbolizes no limit on max length */ > > - .max =3D 0, > > - .increment =3D 1 > > - }, } > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_DH, > > + .dh =3D { > > + .max_group_size =3D 0, > > + .priv_key_gen =3D 1 > > + } > > } > > - }, > > } > > }, > > - { /* dsa */ > > + { /* DSA */ > > .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > {.asym =3D { > > - .xform_capa =3D { > > - .xform_type =3D > > RTE_CRYPTO_ASYM_XFORM_DSA, > > - .op_types =3D > > - ((1< > - (1 << RTE_CRYPTO_ASYM_OP_VERIFY)), > > - { > > - .modlen =3D { > > - /* value 0 symbolizes no limit on min length */ > > - .min =3D 0, > > - /* value 0 symbolizes no limit on max length */ > > - .max =3D 0, > > - .increment =3D 1 > > - }, } > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_DSA, > > + .dsa =3D { > > + .max_key_size =3D 0, > > + .random_k =3D 1 > > + } > > + } > > + } > > + }, > > + { /* ECDSA */ > > + .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > + {.asym =3D { > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_ECDSA, > > + .ecdsa =3D { > > + .curves =3D > > + > > RTE_BIT64(RTE_CRYPTO_EC_GROUP_SECP192R1) | > > + > > RTE_BIT64(RTE_CRYPTO_EC_GROUP_SECP224R1) | > > + > > RTE_BIT64(RTE_CRYPTO_EC_GROUP_SECP256R1) | > > + > > RTE_BIT64(RTE_CRYPTO_EC_GROUP_SECP384R1) | > > + > > RTE_BIT64(RTE_CRYPTO_EC_GROUP_SECP521R1), > > + .random_k =3D 1 > > + } > > } > > - }, > > } > > }, > > >=20 > Do not combine PMD changes for capabilities in cryptodev patch for new AP= Is. >=20 >=20 > > diff --git a/drivers/crypto/qat/dev/qat_asym_pmd_gen1.c > > b/drivers/crypto/qat/dev/qat_asym_pmd_gen1.c > > index 4499fdaf2d..d5144bca84 100644 > > --- a/drivers/crypto/qat/dev/qat_asym_pmd_gen1.c > > +++ b/drivers/crypto/qat/dev/qat_asym_pmd_gen1.c > > @@ -28,16 +28,64 @@ struct rte_cryptodev_ops qat_asym_crypto_ops_gen1 > > =3D { }; > > > > static struct rte_cryptodev_capabilities qat_asym_crypto_caps_gen1[] = =3D { > > - QAT_ASYM_CAP(MODEX, > > - 0, 1, 512, 1), > > - QAT_ASYM_CAP(MODINV, > > - 0, 1, 512, 1), > > - QAT_ASYM_CAP(RSA, > > - ((1 << RTE_CRYPTO_ASYM_OP_SIGN) | > > - (1 << RTE_CRYPTO_ASYM_OP_VERIFY) | > > - (1 << RTE_CRYPTO_ASYM_OP_ENCRYPT) | > > - (1 << RTE_CRYPTO_ASYM_OP_DECRYPT)), > > - 64, 512, 64), > > + { /* Modular exponentiation */ > > + .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > + {.asym =3D { > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_MODEX, > > + .mod =3D { > > + .max_mod_size =3D 4096 > > + } > > + } > > + } > > + }, > > + { /* Modular multiplicative inverse */ > > + .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > + {.asym =3D { > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_MODINV, > > + .mod =3D { > > + .max_mod_size =3D 4096 > > + } > > + } > > + } > > + }, > > + { /* RSA */ > > + .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > + {.asym =3D { > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_RSA, > > + .rsa =3D { > > + .padding =3D > > + > > RTE_BIT32(RTE_CRYPTO_RSA_PADDING_NONE), > > + .hash =3D 0, > > + .max_key_size =3D 4096 > > + } > > + } > > + } > > + }, > > + { /* ECDSA */ > > + .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > + {.asym =3D { > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_ECDSA, > > + .ecdsa =3D { > > + .curves =3D > > + > > RTE_BIT64(RTE_CRYPTO_EC_GROUP_SECP256R1) | > > + > > RTE_BIT64(RTE_CRYPTO_EC_GROUP_SECP521R1), > > + .random_k =3D 0 > > + } > > + } > > + } > > + }, > > + { /* ECPM */ > > + .op =3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC, > > + {.asym =3D { > > + .xform_type =3D RTE_CRYPTO_ASYM_XFORM_ECPM, > > + .ecdsa =3D { > > + .curves =3D > > + > > RTE_BIT64(RTE_CRYPTO_EC_GROUP_SECP256R1) | > > + > > RTE_BIT64(RTE_CRYPTO_EC_GROUP_SECP521R1) > > + } > > + } > > + } > > + }, > > RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() > > }; > > > > diff --git a/lib/cryptodev/rte_crypto_asym.h > > b/lib/cryptodev/rte_crypto_asym.h index d90a7a1957..41b22450d3 100644 > > --- a/lib/cryptodev/rte_crypto_asym.h > > +++ b/lib/cryptodev/rte_crypto_asym.h > > @@ -41,6 +41,14 @@ rte_crypto_asym_ke_strings[]; extern const char * > > rte_crypto_asym_op_strings[]; > > > > +/** RSA padding type name strings */ > > +extern const char * > > +rte_crypto_asym_rsa_padding[]; >=20 > rte_crypto_asym_rsa_padding_strings >=20 > > + > > +/** Elliptic curves name strings */ > > +extern const char * > > +rte_crypto_curves_strings[]; > > + > > /** > > * Buffer to hold crypto params required for asym operations. > > * > > @@ -265,6 +273,46 @@ struct rte_crypto_rsa_padding { > > */ > > }; > > > > +struct rte_crypto_mod_capability { > > + uint16_t max_mod_size; > > + /**< Maximum supported modulus size in bytes, 0 means no limit */ }; > > + > > +struct rte_crypto_rsa_capability { > > + uint32_t padding; > > + /**< List of supported paddings */ > How is this list supposed to work? > I believe this should be enum to specify a single value. > Driver can maintain a static array to list all supported ones. > And application can query if a particular capability which it intend to u= se Is > supported by the PMD. >=20 > > + uint32_t hash; > > + /**< List of supported hash functions */ > Same comment here as well >=20 > > + uint32_t max_key_size; > > + /**< Maximum supported key size in bytes, 0 means no limit */ }; > > + > > +struct rte_crypto_dh_capability { > > + uint16_t max_group_size; > > + /**< Maximum group in bytes, 0 means no limit */ > Maximum group size in bytes ... >=20 > > + uint8_t priv_key_gen; > > + /**< Does PMD supports private key generation generation */ > Is it a flag? Please comment it properly. >=20 > > +}; > > + > > +struct rte_crypto_dsa_capability { > > + uint16_t max_key_size; > > + /**< Maximum supported key size in bytes, 0 means no limit */ > > + uint8_t random_k; > > + /**< Does PMD supports random 'k' generation */ >=20 > Comments should not ask questions. >=20 > > +}; > > + > > +struct rte_crypto_ecdsa_capability { > > + uint64_t curves; > > + /**< Supported elliptic curve ids */ > Shouldn't this also be enum? >=20 > > + uint8_t random_k; > > + /**< Does PMD supports random 'k' generation */ >=20 > Same comment as above. > > +}; > > + > > +struct rte_crypto_ecpm_capability { > > + uint64_t curves; > > + /**< Supported elliptic curve ids */ >=20 > Enum?? >=20 > > +}; > > + > > /** > > * Asymmetric RSA transform data > > * > > diff --git a/lib/cryptodev/rte_cryptodev.c > > b/lib/cryptodev/rte_cryptodev.c index 57ee6b3f07..b1ad1112fe 100644 > > --- a/lib/cryptodev/rte_cryptodev.c > > +++ b/lib/cryptodev/rte_cryptodev.c > > @@ -190,6 +190,27 @@ const char *rte_crypto_asym_ke_strings[] =3D { }; > > > > /** > > + * RSA padding string identifiers > > + */ > > +const char *rte_crypto_asym_rsa_padding[] =3D { > > + [RTE_CRYPTO_RSA_PADDING_NONE] =3D > > "RTE_CRYPTO_RSA_PADDING_NONE", > > + [RTE_CRYPTO_RSA_PADDING_PKCS1_5] =3D > > "RTE_CRYPTO_RSA_PADDING_PKCS1_5", > > + [RTE_CRYPTO_RSA_PADDING_OAEP] =3D > > "RTE_CRYPTO_RSA_PADDING_OAEP", > > + [RTE_CRYPTO_RSA_PADDING_PSS] =3D > > "RTE_CRYPTO_RSA_PADDING_PSS" > > +}; > > + > > +/** > > + * Elliptic curves string identifiers */ const char > > +*rte_crypto_curves_strings[] =3D { > > + [RTE_CRYPTO_EC_GROUP_SECP192R1] =3D > > "RTE_CRYPTO_EC_GROUP_SECP192R1", > > + [RTE_CRYPTO_EC_GROUP_SECP224R1] =3D > > "RTE_CRYPTO_EC_GROUP_SECP224R1", > > + [RTE_CRYPTO_EC_GROUP_SECP256R1] =3D > > "RTE_CRYPTO_EC_GROUP_SECP256R1", > > + [RTE_CRYPTO_EC_GROUP_SECP384R1] =3D > > "RTE_CRYPTO_EC_GROUP_SECP384R1", > > + [RTE_CRYPTO_EC_GROUP_SECP521R1] =3D > > "RTE_CRYPTO_EC_GROUP_SECP521R1", > > +}; > > + > > +/** > > * The private data structure stored in the sym session mempool privat= e data. > > */ > > struct rte_cryptodev_sym_session_pool_private_data { @@ -347,7 +368,7 > > @@ param_range_check(uint16_t size, const struct > > rte_crypto_param_range *range) > > return -1; > > } > > > > -const struct rte_cryptodev_asymmetric_xform_capability * > > +const struct rte_cryptodev_asymmetric_capability * > > rte_cryptodev_asym_capability_get(uint8_t dev_id, > > const struct rte_cryptodev_asym_capability_idx *idx) { @@ - > 363,8 > > +384,8 @@ rte_cryptodev_asym_capability_get(uint8_t dev_id, > > if (capability->op !=3D RTE_CRYPTO_OP_TYPE_ASYMMETRIC) > > continue; > > > > - if (capability->asym.xform_capa.xform_type =3D=3D idx->type) > > - return &capability->asym.xform_capa; > > + if (capability->asym.xform_type =3D=3D idx->type) > > + return &capability->asym; > > } > > return NULL; > > }; > > @@ -456,6 +477,59 @@ > rte_cryptodev_asym_xform_capability_check_modlen( > > return 0; > > } > > > > +int > > +rte_cryptodev_capa_check_mod( >=20 > API name should be rte_cryptodev_mod_capa_check Verb should come in the > end. > Fix other APIs also. >=20 > > + const struct rte_cryptodev_asymmetric_capability *capa, > > + struct rte_crypto_mod_capability mod) { > > + if (capa->mod.max_mod_size =3D=3D 0) > > + return 1; > > + > > + if (mod.max_mod_size <=3D capa->mod.max_mod_size) > > + return 1; > > + else > > + return 0; > > +} > > + > > +int > > +rte_cryptodev_capa_check_rsa( > > + const struct rte_cryptodev_asymmetric_capability *capa, > > + struct rte_crypto_rsa_capability rsa) { > > + if (rsa.padding !=3D (capa->rsa.padding & rsa.padding)) > > + return 0; > > + if (rsa.hash !=3D (capa->rsa.hash & rsa.hash)) > > + return 0; > > + if (capa->rsa.max_key_size =3D=3D 0) > > + return 1; > > + if (rsa.max_key_size <=3D capa->rsa.max_key_size) > > + return 1; > > + else > > + return 0; > > +} >=20 > Can we have something similar to symmetric crypto/rte_security capabiliti= es? In what way similar? There are mostly range checks in symmetric. >=20 > > + > > +int > > +rte_cryptodev_capa_check_ecdsa( > > + const struct rte_cryptodev_asymmetric_capability *capa, > > + struct rte_crypto_ecdsa_capability ecdsa) { > > + if (ecdsa.curves !=3D (capa->ecdsa.curves & ecdsa.curves)) > > + return 0; > > + if (ecdsa.random_k =3D=3D 1 && capa->ecdsa.random_k =3D=3D 0) > > + return 0; > > + return 1; > > +} > > + > > +int > > +rte_cryptodev_capa_check_ecpm( > > + const struct rte_cryptodev_asymmetric_capability *capa, > > + struct rte_crypto_ecpm_capability ecpm) { > > + if (ecpm.curves !=3D (capa->ecpm.curves & ecpm.curves)) > > + return 0; > > + return 1; > > +} > > + > > /* spinlock for crypto device enq callbacks */ static rte_spinlock_t > > rte_cryptodev_callback_lock =3D RTE_SPINLOCK_INITIALIZER; > > > > diff --git a/lib/cryptodev/rte_cryptodev.h > > b/lib/cryptodev/rte_cryptodev.h index 2c2c2edeb7..6c5bd819b2 100644 > > --- a/lib/cryptodev/rte_cryptodev.h > > +++ b/lib/cryptodev/rte_cryptodev.h > > @@ -184,6 +184,19 @@ struct rte_cryptodev_asymmetric_xform_capability { > > * > > */ > > struct rte_cryptodev_asymmetric_capability { > > + enum rte_crypto_asym_xform_type xform_type; > > + /**< Asymmetric transform type */ > > + uint32_t op_types; > > + /**< bitmask for supported rte_crypto_asym_op_type */ > > + union { > > + struct rte_crypto_mod_capability mod; > > + struct rte_crypto_rsa_capability rsa; > > + struct rte_crypto_dh_capability dh; > > + struct rte_crypto_dsa_capability dsa; > > + struct rte_crypto_ecdsa_capability ecdsa; > > + struct rte_crypto_ecpm_capability ecpm; > > + }; > > + > > struct rte_cryptodev_asymmetric_xform_capability xform_capa; }; > > > > @@ -247,7 +260,7 @@ rte_cryptodev_sym_capability_get(uint8_t dev_id, > > * - Return NULL if the capability not exist. > > */ > > __rte_experimental > > -const struct rte_cryptodev_asymmetric_xform_capability * > > +const struct rte_cryptodev_asymmetric_capability * > > rte_cryptodev_asym_capability_get(uint8_t dev_id, > > const struct rte_cryptodev_asym_capability_idx *idx); > > > > @@ -339,6 +352,66 @@ > rte_cryptodev_asym_xform_capability_check_modlen( > > uint16_t modlen); > > > > /** > > + * Check if requested Modexp features are supported > > + * > > + * @param capability Description of the asymmetric crypto > > capability. > > + * @param mod Modexp requested capability. > > + * > > + * @return > > + * - Return 1 if the parameters are in range of the capability. > > + * - Return 0 if the parameters are out of range of the capability. > > + */ > > +__rte_experimental > > +int > > +rte_cryptodev_capa_check_mod( > > + const struct rte_cryptodev_asymmetric_capability *capa, > > + struct rte_crypto_mod_capability mod); > > +/** > > + * Check if requested RSA features are supported > > + * > > + * @param capability Description of the asymmetric crypto > > capability. > > + * @param rsa RSA requested capability. > > + * > > + * @return > > + * - Return 1 if the parameters are in range of the capability. > > + * - Return 0 if the parameters are out of range of the capability. > > + */ > > +__rte_experimental > > +int > > +rte_cryptodev_capa_check_rsa( > > + const struct rte_cryptodev_asymmetric_capability *capa, > > + struct rte_crypto_rsa_capability rsa); > > +/** > > + * Check if requested ECDSA features are supported > > + * > > + * @param capability Description of the asymmetric crypto > > capability. > > + * @param ecdsa ECDSA requested capability. > > + * > > + * @return > > + * - Return 1 if the parameters are in range of the capability. > > + * - Return 0 if the parameters are out of range of the capability. > > + */ > > +__rte_experimental > > +int > > +rte_cryptodev_capa_check_ecdsa( > > + const struct rte_cryptodev_asymmetric_capability *capa, > > + struct rte_crypto_ecdsa_capability ecdsa); > > +/** > > + * Check if requested ECPM features are supported > > + * > > + * @param capability Description of the asymmetric crypto > > capability. > > + * @param ecpm ECPM requested capability. > > + * > > + * @return > > + * - Return 1 if the parameters are in range of the capability. > > + * - Return 0 if the parameters are out of range of the capability. > > + */ > > +__rte_experimental > > +int > > +rte_cryptodev_capa_check_ecpm( > > + const struct rte_cryptodev_asymmetric_capability *capa, > > + struct rte_crypto_ecpm_capability ecpm); > > +/** > > * Provide the cipher algorithm enum, given an algorithm string > > * > > * @param algo_enum A pointer to the cipher algorithm > > diff --git a/lib/cryptodev/version.map b/lib/cryptodev/version.map > > index f0abfaa47d..4d93b9a947 100644 > > --- a/lib/cryptodev/version.map > > +++ b/lib/cryptodev/version.map > > @@ -108,6 +108,10 @@ EXPERIMENTAL { > > > > #added in 22.07 > > rte_cryptodev_session_event_mdata_set; > > + rte_cryptodev_capa_check_mod; > > + rte_cryptodev_capa_check_rsa; > > + rte_cryptodev_capa_check_ecdsa; > > + rte_cryptodev_capa_check_ecpm; > > }; > > > > INTERNAL { > > -- > > 2.13.6