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 D3ADEA00C2; Tue, 27 Sep 2022 13:42:59 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6F06D41133; Tue, 27 Sep 2022 13:42:59 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id 67CF040694 for ; Tue, 27 Sep 2022 13:42:58 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 28R9Yix9005982; Tue, 27 Sep 2022 04:42:57 -0700 Received: from nam12-mw2-obe.outbound.protection.outlook.com (mail-mw2nam12lp2041.outbound.protection.outlook.com [104.47.66.41]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3jt1dp9n9a-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 27 Sep 2022 04:42:57 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UOJtHsMxG32OaZIhjQST7Kl1gQyohFWxzvfeR0xX4QpR6jSbucGB745lX3erQsh0ZcCHt3NIB80HF9+11nakBbG5hOTNhNxBvohBfqBP0kmCSqWdvEi+VLpt7nhQRhDp7fEzz/ObrA03LG0t9yhFnXzZuy/7vmG3CKMzwGUMLRSeYqoz2+6m26FS5u8hIk6P34SHl2ELtDgavDM9MpxdUc8iGmRjDXw49KBWLkoHC+s3h4Sp74Rqv7STVO43jdpm/VXM14iyE/tcjpem19hxFuqlPPvYyYN5HTmRWzmE1O18kOHOF9yYDQScyFPvIYVnKx5X10K4CZ7z41VXOcCR0A== 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=gwhELeY4SMsOIMQn9W9FeX2/Np+DRw265TovyO2xcSw=; b=Ogf0xOGF7ER+IdhA50mA0TTJR931WPK0yjrG6RC96pA2Bsu8JsmdHsUvwdW7S2Wzhc99mTEOVdjrhgSTpWuG2ooTHt1sL3yEu/deUXiGlhArN7lcq4xJLuRC1kYQNWLnHL5uM3kKnjC1P4Mvcjxqk0nHyFqDs7XpXSLPLYCb/VBqmaEcvrhFgBznJsWMzzjpF+nvqT27ncuYjSs08ZqH5JWLou+lxGqbjGo7mDUtlzDmSmQADt3qpc5NIYl7e915qADgnA10efYWSLaWYPRAlQjDKKGNnnSmzzJOmrFvvfPgi8x3QjevAqnnlv/q3r5zRzys6Y38hnfMaFQ2Csc8rA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gwhELeY4SMsOIMQn9W9FeX2/Np+DRw265TovyO2xcSw=; b=dySBF4JZBZMuwOaQReiLfYMLWPuY/nxWdU90ly/3SHH5cdr+P6YegZ8Py3VEi7FH1zzp35E0HGlC05kix4l/X8Qkm7nHwhj5PUcvkE4ps5y0YO/BrHAJVJ21EFkB/KPeOtCLd49KVzhRBLF0DzH3TTEyGiPFnDEnf68R2WBdovM= Received: from CO1PR18MB4714.namprd18.prod.outlook.com (2603:10b6:303:e9::18) by PH0PR18MB5019.namprd18.prod.outlook.com (2603:10b6:510:11e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.15; Tue, 27 Sep 2022 11:42:53 +0000 Received: from CO1PR18MB4714.namprd18.prod.outlook.com ([fe80::910f:ba52:707b:7b0f]) by CO1PR18MB4714.namprd18.prod.outlook.com ([fe80::910f:ba52:707b:7b0f%9]) with mapi id 15.20.5676.015; Tue, 27 Sep 2022 11:42:53 +0000 From: Gowrishankar Muthukrishnan To: Przemyslaw Zegan , "dev@dpdk.org" CC: Akhil Goyal , "roy.fan.zhang@intel.com" Subject: RE: [EXT] [dpdk-dev v2] app/test: random test vectors for Asymc RSA Thread-Topic: [EXT] [dpdk-dev v2] app/test: random test vectors for Asymc RSA Thread-Index: AQHYskO+vqDPQcGnC0KlcHhNboDPb63zSbcw Date: Tue, 27 Sep 2022 11:42:53 +0000 Message-ID: References: <20220817105751.17656-1-przemyslawx.zegan@intel.com> <20220817141444.18437-1-przemyslawx.zegan@intel.com> In-Reply-To: <20220817141444.18437-1-przemyslawx.zegan@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: CO1PR18MB4714:EE_|PH0PR18MB5019:EE_ x-ms-office365-filtering-correlation-id: 19806e9a-f078-4df9-6d28-08daa07d6a06 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hOwDyancmgNGNhAFKanSZH6CQneUG95NwgFYuA5+PNOGdlS9aZMyzr9DZp/U9iEsrxAUqHecQeF+t9m5f+/qoNQgyQzpQs/3AHEGuiUic5czeByKrqZrtcyvaP3g5vvhc9BYUdCsdfhpIMZEeRflkBVDa2StqxQ6Z9jySL8T1HG9gxp2NqzcnzvMbisQdwwHCHAlr5JhJV+9sLQY2vuYNkQJPSFjeolCFJYFUdJaMh7Bh/H4MmQkBjw5Ciq4ERcmMbHiVSyXQ0TmEQWrpxEWiN8RBMHuV2mg5M8SNw0xwzdQbXmA9oul8OkkgD7CDzovgHnO8MK139+etAtF7vUAeleCmKz6PtiNT/vOzTq7l228Fco6q7aqCX0FZwXGrmXAE08LMo64RdRHPZ1Rw8cQ3FbbzSNwqe8syVZgzMQMip/7i/WWmFFaqt0nMYsDeJV6QcUFCz38ApdN0VYaIlfZ3esit60gS68uRdTliNvifYXo2zJ99kWlQRQJUNNq8uk4t//KlZ2WQ7hM88q1ELBoWhYM1jFJxcux/8viHg6Zhvl9hQoeFF1Yqe6GhRRHhpCf0dLhPevgkNFVRDs/08qhVFujsWDJ8EPKA/0pKRHexPt0cyz6+sqN6TAmWL1n9Zcz/hV41hp/3NaYg7zDGqusUZBnyddwbE0wqO/KORy7k/xuRvvfnn+KBOXtpdp/IR4YmY1SzUu5wB0A9FNODRjE/n2gVR2kyiewYrAz5jn3R4wfF0L/QMCXvwe4xj5Yzi4nfbydOn9vy9JYM6ghcLlQCP1doIce6wUkt34pIif4bTE= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO1PR18MB4714.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(346002)(366004)(376002)(39860400002)(396003)(136003)(451199015)(52536014)(8936002)(478600001)(966005)(110136005)(54906003)(2906002)(5660300002)(55016003)(316002)(38100700002)(41300700001)(186003)(86362001)(33656002)(71200400001)(122000001)(8676002)(64756008)(66556008)(4326008)(66946007)(26005)(6506007)(66476007)(30864003)(9686003)(53546011)(7696005)(83380400001)(76116006)(38070700005)(66446008)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?z3pixAiqkvu+kea4Uuj0jQ4/nUUt8XID4/B7EwXV/Ij3XVKI0QvhGN53JQgw?= =?us-ascii?Q?2ndTVyl4ktMqajDYdqsWhe6FsOz8dfwTF5EZYHqXnocXg31jYb0nhsHMaW1X?= =?us-ascii?Q?RpVXedBNfpVBPE+c+n1qQCie8R+5GLl/QPLwmK32PuRrwGWoK9IJFtEKWcNx?= =?us-ascii?Q?6XY5fEuFwG5cZlXFCBIGQ/KATSi6dGXhB1snFjfbZO6WD6lQqDBO0IyyZgUk?= =?us-ascii?Q?g0mO2OOUkYZXHpN01JPplW5nws4tLRuPWc3Roc4/ovMpcVh36sFw7GrSm9jN?= =?us-ascii?Q?SFQ6KCU54oNXyoLMNubDHiIpxqXVOf9MvwVxm/bOxF3cTvfgZ+ArsjrWqtpY?= =?us-ascii?Q?j3aoq09YbS2VaisoT9Dgcn8No4/JzDm7fX7Ka9HOZXKQ0GGDKbgeScVsxrv3?= =?us-ascii?Q?j2jt/zrCcRgaH13FbjjXWg9ZbmbiwGNisH7qyQOSAoF81sp5tGVjR/cqdIVc?= =?us-ascii?Q?Kmz2RaO9xGFuaoOsjZ452r8CPqBl5umiBmbhfdJOOyVGANWPu2J8YhY/mq0c?= =?us-ascii?Q?WzNRGqQt8aXbtwJ04Ry2ECT1mRhy3Ue454OLuL2G2VtbVwuVPQcHDbDALwwJ?= =?us-ascii?Q?zKhG7zuARupcAq1lybGTagy4YM/uGhACH7v2lixjoxysSALDq8SNMh/LN6us?= =?us-ascii?Q?20Ty2zmYof498XFfXGW4oOnYvd1MX4EmlEe7MYXRVd/S41kmtfSyXlqDrhs8?= =?us-ascii?Q?hX5KizYiwK/wKEA+VLrmSQe/PvCZOHtFjwx8h9OWELaAkNIzS+QGjmYOMKiq?= =?us-ascii?Q?cnoCApcPBlx/z8RSCbt8k6sy1mmlwP3f5JfPaKttTwfKeV4uEudaEvGSQmpQ?= =?us-ascii?Q?y5ky0LsRq1koIZg2Z2Hb++DqdE50B3jqcSXfE+tPUStU4QbxZGwm5mKhVHXb?= =?us-ascii?Q?S3cWoRHjQbbqiC90hRIVsuyUIiN5sh+N3EpnGGEdg0wI5nQflSRsjXmNAQ2j?= =?us-ascii?Q?pKbNNXRX8HM2zZrDqhJSJWwXf+E+znf4ZdXnIND7lAPOyIAsv8k3645RMJHX?= =?us-ascii?Q?zIPBvpYfpH/CHyIEUqm4mGF8mWg599EeCqjuxZ9YrWcMjAzndOwlGJ3SFKw/?= =?us-ascii?Q?opErt5JGI282cEvPD7kqqVuSljELDpinnaa4xmV2yfZcZ+vA88U6OYdaJSNx?= =?us-ascii?Q?AsQ7aV0dwBsgRqCLMqZ8v/H6P0QsrK5PyDkVX+TXM4qZAB5TPqMsp4L/aj6B?= =?us-ascii?Q?CSifxthq0OOV2L+r6qkqNj2GGOSXRpfs01kuAUDM8J4Bot+pkMd3PTYKS6Oq?= =?us-ascii?Q?gyRbpf0TQ4RJJPIHIewXyD3LJ0UKnhmfGPQpeVS8XEU1vOlt0JjdRW2PSplN?= =?us-ascii?Q?LqlQ7Hdde+WtDoI0eagYj+TF8Pr8Kic/kwg4bJn6P6d8wyc5uSCueEf4HZUR?= =?us-ascii?Q?f07Zaa0nG0l6IeGl/QBfJt7yQDl6dblutr+wcF5J0PiI3vWtMEVMEmPB4fgP?= =?us-ascii?Q?xV7bou0AanJtz2peuiw7LVMlfJzGjx9vONdmvNtF1twb90oJbcbCH0lxCoB0?= =?us-ascii?Q?LIT9NB1Wve/4o0arbuNipPFfEzqN2verjXoezDhEnn3tx7xdxAwNVhU0I/6Y?= =?us-ascii?Q?iY/S8X5eyMgaQi3muwZgcOjYqNO3DtJAIKkcrbQ5?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: marvell.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CO1PR18MB4714.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 19806e9a-f078-4df9-6d28-08daa07d6a06 X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Sep 2022 11:42:53.6196 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: jF6ZpfQa2IvyDA4J6x4gHQvPLBD2/Dws7KS9dXXVDRX4NbbzKp0lcTyESgSUtwWI9/IgyaXpi64lKoEk8AmhU1reZXOj/2KimABGMU4pVt8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR18MB5019 X-Proofpoint-ORIG-GUID: oJBL8OEsL4ZvXyguzlvCPTALz4wfPJ-r X-Proofpoint-GUID: oJBL8OEsL4ZvXyguzlvCPTALz4wfPJ-r X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-09-27_03,2022-09-27_01,2022-06-22_01 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: Przemyslaw Zegan > Sent: Wednesday, August 17, 2022 7:45 PM > To: dev@dpdk.org > Cc: Akhil Goyal ; roy.fan.zhang@intel.com; > Przemyslaw Zegan > Subject: [EXT] [dpdk-dev v2] app/test: random test vectors for Asymc RSA >=20 > External Email >=20 > ---------------------------------------------------------------------- > This patch add random test vectors generator for asymc RSA algorithm, bas= e > on OpenSSL 1.1.x lib. >=20 > Added functions for create RSA test vectors base on defined rules. > The randome generated test vector include plaintext, RSA key in exponent > and quintuple format, digest and expected cipher and sign. >=20 > Replace crypto_testsuite_params_asym struct from test_cryptodev_asym.c > to test_cryptodev_asym_types.h, as it's used in other test suit. >=20 > Description of new files: > test_cryptodev_asym_creator.c: generator for random plaintext > test_cryptodev_asym_rsa_creator.c: RSA vector generator > test_cryptodev_asym_rsa_creator.c RSA test suite > test_cryptodev_asym_vectors.c: memory allocator for vectors >=20 > Signed-off-by: Przemyslaw Zegan > --- > v2: fixed coding style issues > --- > app/test/meson.build | 5 + > app/test/test_cryptodev_asym.c | 63 ++-- > app/test/test_cryptodev_asym_common.c | 117 +++++++ > app/test/test_cryptodev_asym_common.h | 49 +++ > app/test/test_cryptodev_asym_creator.c | 42 +++ > app/test/test_cryptodev_asym_creator.h | 13 + > app/test/test_cryptodev_asym_rsa.c | 309 +++++++++++++++++++ > app/test/test_cryptodev_asym_rsa.h | 17 + > app/test/test_cryptodev_asym_rsa_creator.c | 145 +++++++++ > app/test/test_cryptodev_asym_rsa_creator.h | 16 + > app/test/test_cryptodev_asym_types.h | 20 ++ > app/test/test_cryptodev_asym_vectors.c | 31 ++ > app/test/test_cryptodev_asym_vectors.h | 18 ++ > app/test/test_cryptodev_asym_vectors_def.h | 132 ++++++++ > app/test/test_cryptodev_asym_vectors_rules.h | 42 +++ > lib/cryptodev/rte_crypto_asym.h | 1 + > 16 files changed, 986 insertions(+), 34 deletions(-) create mode 100644 > app/test/test_cryptodev_asym_common.c > create mode 100644 app/test/test_cryptodev_asym_common.h > create mode 100644 app/test/test_cryptodev_asym_creator.c > create mode 100644 app/test/test_cryptodev_asym_creator.h > create mode 100644 app/test/test_cryptodev_asym_rsa.c > create mode 100644 app/test/test_cryptodev_asym_rsa.h > create mode 100644 app/test/test_cryptodev_asym_rsa_creator.c > create mode 100644 app/test/test_cryptodev_asym_rsa_creator.h > create mode 100644 app/test/test_cryptodev_asym_types.h > create mode 100644 app/test/test_cryptodev_asym_vectors.c > create mode 100644 app/test/test_cryptodev_asym_vectors.h > create mode 100644 app/test/test_cryptodev_asym_vectors_def.h > create mode 100644 app/test/test_cryptodev_asym_vectors_rules.h >=20 > diff --git a/app/test/meson.build b/app/test/meson.build index > 431c5bd318..8dc5a3e516 100644 > --- a/app/test/meson.build > +++ b/app/test/meson.build > @@ -146,6 +146,11 @@ test_sources =3D files( > 'test_trace_perf.c', > 'test_version.c', > 'virtual_pmd.c', > + 'test_cryptodev_asym_common.c', > + 'test_cryptodev_asym_vectors.c', > + 'test_cryptodev_asym_rsa.c', > + 'test_cryptodev_asym_rsa_creator.c', > + 'test_cryptodev_asym_creator.c' > ) >=20 > test_deps =3D enabled_libs > diff --git a/app/test/test_cryptodev_asym.c > b/app/test/test_cryptodev_asym.c index fc1a727472..b692af3760 100644 > --- a/app/test/test_cryptodev_asym.c > +++ b/app/test/test_cryptodev_asym.c > @@ -23,6 +23,8 @@ > #include "test_cryptodev_rsa_test_vectors.h" > #include "test_cryptodev_asym_util.h" > #include "test.h" > +#include "test_cryptodev_asym_types.h" > +#include "test_cryptodev_asym_rsa.h" >=20 > #define TEST_NUM_BUFS 10 > #define TEST_NUM_SESSIONS 4 > @@ -34,14 +36,6 @@ > #define TEST_VECTOR_SIZE 256 >=20 > static int gbl_driver_id; > -struct crypto_testsuite_params_asym { > - struct rte_mempool *op_mpool; > - struct rte_mempool *session_mpool; > - struct rte_cryptodev_config conf; > - struct rte_cryptodev_qp_conf qp_conf; > - uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS]; > - uint8_t valid_dev_count; > -}; >=20 > struct crypto_unittest_params { > void *sess; > @@ -62,12 +56,12 @@ static struct test_cases_array test_vector =3D {0, { = NULL > } }; >=20 > static uint32_t test_index; >=20 > -static struct crypto_testsuite_params_asym testsuite_params =3D { NULL }= ; > +struct crypto_testsuite_params_asym testsuite_params_asym =3D { NULL }; Coul this variable rename be avoided here, as we have many patch hunks belo= w because of it. >=20 > static int > queue_ops_rsa_sign_verify(void *sess) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; > struct rte_crypto_op *op, *result_op; > @@ -158,7 +152,7 @@ queue_ops_rsa_sign_verify(void *sess) static int > queue_ops_rsa_enc_dec(void *sess) { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; > struct rte_crypto_op *op, *result_op; > @@ -524,7 +518,7 @@ test_one_case(const void *test_case, int sessionless) >=20 > if (tc.modex.xform_type =3D=3D RTE_CRYPTO_ASYM_XFORM_MODEX > || tc.modex.xform_type =3D=3D > RTE_CRYPTO_ASYM_XFORM_MODINV) { > - status =3D test_cryptodev_asym_op(&testsuite_params, &tc, > test_msg, > + status =3D > test_cryptodev_asym_op(&testsuite_params_asym, &tc, > +test_msg, > sessionless, 0, 0); > printf(" %u) TestCase %s %s\n", test_index++, > tc.modex.description, test_msg); > @@ -534,7 +528,7 @@ test_one_case(const void *test_case, int sessionless) > if (tc.rsa_data.op_type_flags & (1 << i)) { > if (tc.rsa_data.key_exp) { > status =3D > test_cryptodev_asym_op( > - &testsuite_params, > &tc, > + > &testsuite_params_asym, &tc, > test_msg, > sessionless, i, >=20 > RTE_RSA_KEY_TYPE_EXP); > } > @@ -544,7 +538,7 @@ test_one_case(const void *test_case, int sessionless) >=20 > RTE_CRYPTO_ASYM_OP_DECRYPT || > i =3D=3D > RTE_CRYPTO_ASYM_OP_SIGN)) { > status =3D > test_cryptodev_asym_op( > - &testsuite_params, > + > &testsuite_params_asym, > &tc, test_msg, > sessionless, i, >=20 > RTE_RSA_KEY_TYPE_QT); > } > @@ -604,7 +598,7 @@ static int > test_one_by_one(void) > { > int status =3D TEST_SUCCESS; > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > uint32_t i =3D 0; > uint8_t dev_id =3D ts_params->valid_devs[0]; > struct rte_cryptodev_info dev_info; > @@ -637,7 +631,7 @@ test_one_by_one(void) static int > test_rsa_sign_verify(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; > void *sess =3D NULL; > @@ -677,7 +671,7 @@ test_rsa_sign_verify(void) static int > test_rsa_enc_dec(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; > void *sess =3D NULL; > @@ -717,7 +711,7 @@ test_rsa_enc_dec(void) static int > test_rsa_sign_verify_crt(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; > void *sess =3D NULL; > @@ -757,7 +751,7 @@ test_rsa_sign_verify_crt(void) static int > test_rsa_enc_dec_crt(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; > void *sess =3D NULL; > @@ -797,7 +791,7 @@ test_rsa_enc_dec_crt(void) static int > testsuite_setup(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS]; > struct rte_cryptodev_info info; > int ret, dev_id =3D -1; > @@ -902,7 +896,7 @@ testsuite_setup(void) static void > testsuite_teardown(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; >=20 > if (ts_params->op_mpool !=3D NULL) { > RTE_LOG(DEBUG, USER1, "CRYPTO_OP_POOL count %u\n", > @@ -919,7 +913,7 @@ testsuite_teardown(void) static int > ut_setup_asym(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; >=20 > uint16_t qp_id; >=20 > @@ -953,7 +947,7 @@ ut_setup_asym(void) > static void > ut_teardown_asym(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_cryptodev_stats stats; >=20 > rte_cryptodev_stats_get(ts_params->valid_devs[0], &stats); @@ - > 1002,7 +996,7 @@ static inline void print_asym_capa( static int > test_capability(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > uint8_t dev_id =3D ts_params->valid_devs[0]; > struct rte_cryptodev_info dev_info; > const struct rte_cryptodev_capabilities *dev_capa; @@ -1039,7 > +1033,7 @@ test_capability(void) static int test_dh_gen_shared_sec(stru= ct > rte_crypto_asym_xform *xfrm) { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; @@ -1121,7 +1115,7 @@ > test_dh_gen_shared_sec(struct rte_crypto_asym_xform *xfrm) static int > test_dh_gen_priv_key(struct rte_crypto_asym_xform *xfrm) { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; @@ -1201,7 +1195,7 @@ > test_dh_gen_priv_key(struct rte_crypto_asym_xform *xfrm) static int > test_dh_gen_pub_key(struct rte_crypto_asym_xform *xfrm) { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; @@ -1289,7 +1283,7 @@ > test_dh_gen_pub_key(struct rte_crypto_asym_xform *xfrm) static int > test_dh_gen_kp(struct rte_crypto_asym_xform *xfrm) { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; @@ -1375,7 +1369,7 @@ > test_dh_gen_kp(struct rte_crypto_asym_xform *xfrm) static int > test_mod_inv(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; @@ -1487,7 +1481,7 @@ > test_mod_inv(void) static int > test_mod_exp(void) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; @@ -1635,7 +1629,7 @@ > test_dh_keygenration(void) static int test_dsa_sign(struct > rte_crypto_dsa_op_param *dsa_op) { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; @@ -1718,7 +1712,7 @@ > test_dsa_sign(struct rte_crypto_dsa_op_param *dsa_op) static int > test_dsa_verify(struct rte_crypto_dsa_op_param *dsa_op) { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > uint8_t dev_id =3D ts_params->valid_devs[0]; @@ -1831,7 +1825,7 @@ > test_dsa(void) static int test_ecdsa_sign_verify(enum curve curve_id) = { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > struct crypto_testsuite_ecdsa_params input_params; @@ -2032,7 > +2026,7 @@ test_ecdsa_sign_verify_all_curve(void) > static int > test_ecpm(enum curve curve_id) > { > - struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params; > + struct crypto_testsuite_params_asym *ts_params =3D > +&testsuite_params_asym; > struct rte_mempool *sess_mpool =3D ts_params->session_mpool; > struct rte_mempool *op_mpool =3D ts_params->op_mpool; > struct crypto_testsuite_ecpm_params input_params; @@ -2219,6 > +2213,7 @@ static struct unit_test_suite cryptodev_qat_asym_testsuite = =3D { > .teardown =3D testsuite_teardown, > .unit_test_cases =3D { > TEST_CASE_ST(ut_setup_asym, ut_teardown_asym, > test_one_by_one), > + TEST_CASE_ST(ats_rsa_setup, ats_rsa_teardown, > ats_rsa_run), > TEST_CASES_END() /**< NULL terminate unit test array */ > } > }; > diff --git a/app/test/test_cryptodev_asym_common.c > b/app/test/test_cryptodev_asym_common.c > new file mode 100644 > index 0000000000..f0e3987db8 > --- /dev/null > +++ b/app/test/test_cryptodev_asym_common.c > @@ -0,0 +1,117 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#include > + > +#include "test_cryptodev_asym_common.h" > +#include "test.h" This test.h could below the one below. > +#include "test_cryptodev.h" > + > +int ats_common_setup(struct crypto_testsuite_params_asym *ts) { > + uint16_t qp_id; > + > + /* Reconfigure device to default parameters */ > + ts->conf.socket_id =3D SOCKET_ID_ANY; > + > + TEST_ASSERT_SUCCESS(rte_cryptodev_configure(ts->valid_devs[0], > + &ts->conf), > + "Failed to configure cryptodev %u", > + ts->valid_devs[0]); > + > + for (qp_id =3D 0; qp_id < ts->conf.nb_queue_pairs ; qp_id++) { > + TEST_ASSERT_SUCCESS(rte_cryptodev_queue_pair_setup( > + ts->valid_devs[0], qp_id, > + &ts->qp_conf, > + rte_cryptodev_socket_id(ts->valid_devs[0])), > + "Failed to setup queue pair %u on cryptodev %u", > + qp_id, ts->valid_devs[0]); > + } > + > + rte_cryptodev_stats_reset(ts->valid_devs[0]); > + > + /* Start the device */ > + TEST_ASSERT_SUCCESS(rte_cryptodev_start(ts->valid_devs[0]), > + "Failed to start cryptodev > %u", > + ts->valid_devs[0]); > + > + return TEST_SUCCESS; > +} > + > +void ats_common_teardown(struct crypto_testsuite_params_asym *ts) { > + struct rte_cryptodev_stats stats; > + > + rte_cryptodev_stats_get(ts->valid_devs[0], &stats); > + Any purpose _stats_get called for here ? > + rte_cryptodev_stop(ts->valid_devs[0]); > +} > + > +void ats_err_msg_cap(void) > +{ > + RTE_LOG(INFO, USER1, "Device doesn't support MODEX. Test > Skipped\n"); > +} > + > +void ats_err_msg_op(char *msg, uint32_t len, uint32_t line) { > + snprintf(msg, len, > + "line %u FAILED: %s", line, > + "Failed to allocate asymmetric crypto operation struct"); } " Failed to allocate struct for asymmetirc crypto op" ..=20 > + > +void ats_err_msg_mod_len(char *msg, uint32_t len, uint32_t line) { > + snprintf(msg, len, > + "line %u FAILED: %s", line, > + "Invalid MODULUS length specified"); Except for library mnemonics like ASYM, RSA, we can avoid capital letters I= MO - "modulus". > +} > + > +void ats_err_msg_inv_alg(char *msg, uint32_t len, uint32_t line) { > + snprintf(msg, len, > + "line %u FAILED: %s", line, > + "Invalid ASYM algorithm specified"); > +} > + > +void ats_err_msg_sess_create(char *msg, uint32_t len, uint32_t line) { > + snprintf(msg, len, > + "line %u FAILED: %s", line, > + "Session creation failed"); > +} > + > +void ats_err_msg_sess_init(char *msg, uint32_t len, uint32_t line) { > + snprintf(msg, len, > + "line %u FAILED: %s", line, > + "unabled to config sym session"); "Unable to config SYM session" ? > +} > + > +void ats_err_msg_enque(char *msg, uint32_t len, uint32_t line) { > + snprintf(msg, len, > + "line %u FAILED: %s", line, > + "Error sending packet for operation"); } > + > +void ats_err_msg_burst(char *msg, uint32_t len, uint32_t line) { > + snprintf(msg, len, > + "line %u FAILED: %s", line, > + "Error sending packet for operation"); } "multiple packets" ? > + > +void ats_err_msg_deq(char *msg, uint32_t len, uint32_t line) { > + snprintf(msg, len, > + "line %u FAILED: %s", line, > + "Failed to process asym crypto op"); "ASYM" just for uniformity. > +} > + > +void ats_err_msg_ver(char *msg, uint32_t len, uint32_t line) { > + snprintf(msg, len, > + "line %u FAILED: %s", line, > + "Verification failed "); > +} > diff --git a/app/test/test_cryptodev_asym_common.h > b/app/test/test_cryptodev_asym_common.h > new file mode 100644 > index 0000000000..f61e49f5dc > --- /dev/null > +++ b/app/test/test_cryptodev_asym_common.h > @@ -0,0 +1,49 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#ifndef TEST_CRYPTODEV_ASYM_COMMON_H_ > +#define TEST_CRYPTODEV_ASYM_COMMON_H_ > + > +#include > +#include > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > + > +#include "test_cryptodev_asym_types.h" > + > +int ats_common_setup(struct crypto_testsuite_params_asym *ts); > + > +void ats_common_teardown(struct crypto_testsuite_params_asym *ts); > + > +void ats_err_msg_cap(void); > + > +void ats_err_msg_op(char *msg, uint32_t len, uint32_t line); > + > +void ats_err_msg_mod_len(char *msg, uint32_t len, uint32_t line); > + > +void ats_err_msg_inv_alg(char *msg, uint32_t len, uint32_t line); > + > +void ats_err_msg_sess_create(char *msg, uint32_t len, uint32_t line); > + > +void ats_err_msg_sess_init(char *msg, uint32_t len, uint32_t line); > + > +void ats_err_msg_enque(char *msg, uint32_t len, uint32_t line); > + > +void ats_err_msg_burst(char *msg, uint32_t len, uint32_t line); > + > +void ats_err_msg_deq(char *msg, uint32_t len, uint32_t line); > + > +void ats_err_msg_ver(char *msg, uint32_t len, uint32_t line); > + > + > +#endif /* TEST_CRYPTODEV_ASYM_COMMON_H_ */ > diff --git a/app/test/test_cryptodev_asym_creator.c > b/app/test/test_cryptodev_asym_creator.c > new file mode 100644 > index 0000000000..2be9755791 > --- /dev/null > +++ b/app/test/test_cryptodev_asym_creator.c > @@ -0,0 +1,42 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#include > +#include > +#include > +#include > + > +#include > + #ifdef USE_OPENSSL > +#include > +#include > + I am adding RTE_HAS_OPENSSL in https://patches.dpdk.org/project/dpdk/patch/da6c7aec7de7da40883d3dc2ce4792= ef7969c958.1664263264.git.gmuthukrishn@marvell.com/ We can add dependency with openssl here. However, I could not find any openSSL fn used in this .c file. > +#include "test_cryptodev_asym_creator.h" > + > +int atv_create_data(uint8_t *data, int len) { > + struct timespec ts; > + struct timeval tv; > + int i; > + > + ts.tv_sec =3D 0; > + ts.tv_nsec =3D 10000000; > + nanosleep(&ts, NULL); > + > + gettimeofday(&tv, NULL); > + int seed =3D 1000000 * tv.tv_sec + tv.tv_usec; > + > + srand(seed); > + > + memset(data, 0, len); > + > + int *dt =3D (int *) data; > + int ln =3D len / sizeof(int); > + > + for (i =3D 0; i < ln; i++) > + dt[i] =3D rand(); > + > + return 0; > +} > + > diff --git a/app/test/test_cryptodev_asym_creator.h > b/app/test/test_cryptodev_asym_creator.h > new file mode 100644 > index 0000000000..9587fadb55 > --- /dev/null > +++ b/app/test/test_cryptodev_asym_creator.h > @@ -0,0 +1,13 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#ifndef TEST_CRYPTODEV_ASYM_CREATOR_H_ > +#define TEST_CRYPTODEV_ASYM_CREATOR_H_ > + > +#include > +#include > + > +int atv_create_data(uint8_t *data, int len); > + > +#endif /* TEST_CRYPTODEV_ASYM_CREATOR_H_ */ > diff --git a/app/test/test_cryptodev_asym_rsa.c > b/app/test/test_cryptodev_asym_rsa.c > new file mode 100644 > index 0000000000..6f90877e6c > --- /dev/null > +++ b/app/test/test_cryptodev_asym_rsa.c > @@ -0,0 +1,309 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#include "test_cryptodev_asym_common.h" > +#include "test_cryptodev_asym_rsa.h" > +#include "test_cryptodev_asym_vectors.h" > + > +#include "test.h" > +#include "test_cryptodev.h" > +#include "test_cryptodev_asym_types.h" > +#include "test_cryptodev_asym_vectors.h" > + > +#define ASYM_TEST_MSG_LEN 256 (256) > +#define TEST_DATA_SIZE 4096 (4096) > + > +struct crypto_unittest_params { > + struct rte_cryptodev_asym_session *sess; > + struct rte_crypto_op *op; > +}; > + > +static struct asym_test_rsa_vct *vct; > +static int vct_nb; "vec" could be used as variable name for test vector purpose, but up to you= . > + > +extern struct crypto_testsuite_params_asym testsuite_params_asym; > + > +int ats_rsa_setup(void) > +{ > + vct =3D atv_rsa(&vct_nb); > + Check for atv_rsa return status. > + int status =3D ats_common_setup(&testsuite_params_asym); > + > + return status; > +} > + > +void ats_rsa_teardown(void) > +{ > + atv_free(vct); > + > + ats_common_teardown(&testsuite_params_asym); > +} > + > +static int ats_case_rsa_op(struct crypto_testsuite_params_asym > *ts_params, > + struct asym_test_rsa_vct *data_tc, char *test_msg, int tc_data may suite better than data_tc for uniformity here. tc_msg instead of test_msg . > sessionless, > + enum rte_crypto_asym_op_type op_type, > + enum rte_crypto_rsa_priv_key_type key_type) { > + struct rte_crypto_asym_op *asym_op =3D NULL; > + struct rte_crypto_op *op =3D NULL; > + struct rte_crypto_op *result_op =3D NULL; > + 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; > + uint8_t dev_id =3D ts_params->valid_devs[0]; > + uint8_t *result =3D NULL; > + uint8_t *data_expected =3D NULL, *data_received =3D NULL; > + size_t data_size =3D 0; > + Like in other places, my suggestion to arrange vars declaration in some inverted tree format just for easier readability. var aaaaa =3D 11; var bbb =3D 12; var c =3D 3; > + int ret, status =3D TEST_SUCCESS; > + > + xform_tc.next =3D NULL; > + xform_tc.xform_type =3D data_tc->xform_type; > + > + cap_idx.type =3D xform_tc.xform_type; > + capability =3D rte_cryptodev_asym_capability_get(dev_id, &cap_idx); > + > + if (capability =3D=3D NULL) { > + ats_err_msg_cap(); > + return TEST_SKIPPED; > + } > + > + /* Generate crypto op data structure */ > + op =3D rte_crypto_op_alloc(ts_params->op_mpool, > + RTE_CRYPTO_OP_TYPE_ASYMMETRIC); > + > + if (!op) { > + ats_err_msg_op(test_msg, ASYM_TEST_MSG_LEN, > __LINE__); > + status =3D TEST_FAILED; > + goto error_exit; > + } > + > + asym_op =3D op->asym; > + > + switch (xform_tc.xform_type) { > + case RTE_CRYPTO_ASYM_XFORM_RSA: > + result =3D rte_zmalloc(NULL, data_tc->n.len, 0); > + op->asym->rsa.op_type =3D op_type; asym_op->rsa.op_type > + xform_tc.rsa.e.data =3D data_tc->e.data; > + xform_tc.rsa.e.length =3D data_tc->e.len; > + xform_tc.rsa.n.data =3D data_tc->n.data; > + xform_tc.rsa.n.length =3D data_tc->n.len; > + > + if (key_type =3D=3D RTE_RSA_KEY_TYPE_EXP) { > + xform_tc.rsa.d.data =3D data_tc->d.data; > + xform_tc.rsa.d.length =3D data_tc->d.len; > + } else { > + xform_tc.rsa.qt.p.data =3D data_tc->p.data; > + xform_tc.rsa.qt.p.length =3D data_tc->p.len; > + xform_tc.rsa.qt.q.data =3D data_tc->q.data; > + xform_tc.rsa.qt.q.length =3D data_tc->q.len; > + xform_tc.rsa.qt.dP.data =3D data_tc->dP.data; > + xform_tc.rsa.qt.dP.length =3D data_tc->dP.len; > + xform_tc.rsa.qt.dQ.data =3D data_tc->dQ.data; > + xform_tc.rsa.qt.dQ.length =3D data_tc->dQ.len; > + xform_tc.rsa.qt.qInv.data =3D data_tc->qInv.data; > + xform_tc.rsa.qt.qInv.length =3D data_tc->qInv.len; > + } > + > + xform_tc.rsa.key_type =3D key_type; > + op->asym->rsa.padding.type =3D data_tc->padding; > + > + if (op->asym->rsa.op_type =3D=3D > RTE_CRYPTO_ASYM_OP_ENCRYPT) { > + asym_op->rsa.message.data =3D data_tc->pt.data; > + asym_op->rsa.message.length =3D data_tc->pt.len; > + asym_op->rsa.cipher.data =3D result; > + asym_op->rsa.cipher.length =3D data_tc->n.len; > + } else if (op->asym->rsa.op_type =3D=3D > RTE_CRYPTO_ASYM_OP_DECRYPT) { > + asym_op->rsa.message.data =3D result; > + asym_op->rsa.message.length =3D 0; > + asym_op->rsa.cipher.data =3D data_tc->ct.data; > + asym_op->rsa.cipher.length =3D data_tc->ct.len; > + } else if (op->asym->rsa.op_type =3D=3D > RTE_CRYPTO_ASYM_OP_SIGN) { > + asym_op->rsa.sign.data =3D result; > + asym_op->rsa.sign.length =3D data_tc->n.len; > + asym_op->rsa.message.data =3D data_tc->digest.data; > + asym_op->rsa.message.length =3D data_tc->digest.len; > + } else if (op->asym->rsa.op_type =3D=3D > RTE_CRYPTO_ASYM_OP_VERIFY) { > + asym_op->rsa.cipher.data =3D result; > + asym_op->rsa.cipher.length =3D data_tc->n.len; > + asym_op->rsa.sign.data =3D data_tc->sign.data; > + asym_op->rsa.sign.length =3D data_tc->sign.len; > + } > + break; > + > + default: > + ats_err_msg_inv_alg(test_msg, ASYM_TEST_MSG_LEN, > __LINE__); > + status =3D TEST_FAILED; > + goto error_exit; > + } > + > + if (!sessionless) { > + ret =3D rte_cryptodev_asym_session_create(dev_id, > &xform_tc, > + ts_params->session_mpool, &sess); > + if (ret < 0) { > + ats_err_msg_sess_create(test_msg, > ASYM_TEST_MSG_LEN, __LINE__); > + status =3D (ret =3D=3D -ENOTSUP) ? TEST_SKIPPED : > TEST_FAILED; > + goto error_exit; > + } > + > + rte_crypto_op_attach_asym_session(op, sess); > + } else { > + asym_op->xform =3D &xform_tc; > + op->sess_type =3D RTE_CRYPTO_OP_SESSIONLESS; > + } > + RTE_LOG(DEBUG, USER1, "Process ASYM operation"); > + > + /* Process crypto operation */ > + if (rte_cryptodev_enqueue_burst(dev_id, 0, &op, 1) !=3D 1) { > + ats_err_msg_enque(test_msg, ASYM_TEST_MSG_LEN, > __LINE__); > + status =3D TEST_FAILED; > + goto error_exit; > + } > + > + while (rte_cryptodev_dequeue_burst(dev_id, 0, &result_op, 1) =3D=3D > 0) > + rte_pause(); > + > + if (result_op =3D=3D NULL) { > + ats_err_msg_deq(test_msg, ASYM_TEST_MSG_LEN, > __LINE__); > + status =3D TEST_FAILED; > + goto error_exit; > + } > + > + if (op->asym->rsa.op_type =3D=3D RTE_CRYPTO_ASYM_OP_ENCRYPT) { > + data_size =3D xform_tc.rsa.n.length; > + data_received =3D result_op->asym->rsa.cipher.data; > + data_expected =3D data_tc->ct.data; > + } else if (op->asym->rsa.op_type =3D=3D > RTE_CRYPTO_ASYM_OP_DECRYPT) { > + data_size =3D xform_tc.rsa.n.length; > + data_expected =3D data_tc->pt.data; > + data_received =3D result_op->asym->rsa.message.data; > + } else if (op->asym->rsa.op_type =3D=3D RTE_CRYPTO_ASYM_OP_SIGN) { > + data_size =3D xform_tc.rsa.n.length; > + data_expected =3D data_tc->sign.data; > + data_received =3D result_op->asym->rsa.sign.data; > + } else if (op->asym->rsa.op_type =3D=3D > RTE_CRYPTO_ASYM_OP_VERIFY) { > + data_size =3D xform_tc.rsa.n.length; > + data_expected =3D data_tc->digest.data; > + data_received =3D result_op->asym->rsa.cipher.data; > + } > + > + if ((memcmp(data_expected, data_received, data_size) !=3D 0) > + || (data_size =3D=3D 0)) { > + ats_err_msg_ver(test_msg, ASYM_TEST_MSG_LEN, > __LINE__); > + status =3D TEST_FAILED; > + goto error_exit; > + } > + > +error_exit: > + if (sess !=3D NULL) > + rte_cryptodev_asym_session_free(dev_id, sess); > + > + if (op !=3D NULL) > + rte_crypto_op_free(op); > + > + if (result !=3D NULL) > + rte_free(result); > + > + return status; > +} > + > +int ats_rsa_run(void) > +{ > + int status =3D TEST_SUCCESS; > + int i, key_type; > + char test_msg[ASYM_TEST_MSG_LEN + 1]; > + int sessionless =3D 0; > + struct crypto_testsuite_params_asym *ts_params =3D > &testsuite_params_asym; > + uint8_t dev_id =3D ts_params->valid_devs[0]; > + struct rte_cryptodev_info dev_info; > + > + rte_cryptodev_info_get(dev_id, &dev_info); > + if ((dev_info.feature_flags & > + RTE_CRYPTODEV_FF_ASYM_SESSIONLESS)) { > + sessionless =3D 1; > + } > + > + for (i =3D 0; i < vct_nb; i++) { > + > + printf("\n %u) TestSubCase %s - %s\n", i + 1, > vct[i].description, > + test_msg); > + debug_hexdump(stdout, "plaintext:", vct[i].pt.data, > vct[i].pt.len); > + debug_hexdump(stdout, "ciphertext:", vct[i].ct.data, > vct[i].ct.len); > + debug_hexdump(stdout, "digest:", vct[i].digest.data, > vct[i].digest.len); > + debug_hexdump(stdout, "sign:", vct[i].sign.data, > vct[i].sign.len); > + > + debug_hexdump(stdout, "e:", vct[i].e.data, vct[i].e.len); > + debug_hexdump(stdout, "d:", vct[i].d.data, vct[i].d.len); > + debug_hexdump(stdout, "n:", vct[i].n.data, vct[i].n.len); > + debug_hexdump(stdout, "p:", vct[i].p.data, vct[i].p.len); > + debug_hexdump(stdout, "q:", vct[i].q.data, vct[i].q.len); > + debug_hexdump(stdout, "dP:", vct[i].dP.data, vct[i].dP.len); > + debug_hexdump(stdout, "dQ:", vct[i].dQ.data, > vct[i].dQ.len); > + debug_hexdump(stdout, "qInv:", vct[i].qInv.data, > vct[i].qInv.len); > + > + for (key_type =3D RTE_RSA_KEY_TYPE_EXP; > + key_type < RTE_RSA_KEY_TYPE_LIST_END; Only two key types we have at the moment (QT and EXP). Adding LIST_END is unnecessarily touching lib/crypto. Could this be handled accordingly here ? Same thing can be done like: for (int i=3D0; i<2; i++) { if (i =3D=3D RTE_RSA_KEY_TYPE_EXP)=20 .. else if (I =3D=3D RTE_RSA_KEY_TYPE_QT) .. else error ... }=20 Also check if dev supports respective key type before calling each test. > key_type++) { > + > + int sess =3D 0; > + > + if (key_type =3D=3D 0) > + printf("\n RSA key is an exponent:\n"); > + else > + printf(" RSA key is in quintuple format:\n"); > + do { > + if (sess =3D=3D 1 && sessionless !=3D 1) > + break; > + > + if (sess =3D=3D 0) > + printf("\n With Session:\n"); > + else > + printf("\n Without Session:\n"); > + > + if > (ats_case_rsa_op(&testsuite_params_asym, &vct[sess], > + test_msg, sess, > RTE_CRYPTO_ASYM_OP_ENCRYPT, > + key_type) !=3D TEST_SUCCESS) > { > + printf(" %-20s: %s\n", "Encryption", > "FAIL"); > + status =3D TEST_FAILED; > + } else { > + printf(" %-20s: %s\n", "Encryption", > "PASS"); > + } > + > + if > (ats_case_rsa_op(&testsuite_params_asym, &vct[sess], > + test_msg, sess, > RTE_CRYPTO_ASYM_OP_DECRYPT, > + key_type) !=3D TEST_SUCCESS) > { > + printf(" %-20s: %s\n", "Decryption", > "FAIL"); > + status =3D TEST_FAILED; > + } else { > + printf(" %-20s: %s\n", "Decryption", > "PASS"); > + } > + > + if > (ats_case_rsa_op(&testsuite_params_asym, &vct[sess], > + test_msg, sess, > RTE_CRYPTO_ASYM_OP_SIGN, > + key_type) !=3D TEST_SUCCESS) > { > + printf(" %-20s: %s\n", "Sign", > "FAIL"); > + status =3D TEST_FAILED; > + } else { > + printf(" %-20s: %s\n", "Sign", > "PASS"); > + } > + > + if > (ats_case_rsa_op(&testsuite_params_asym, &vct[sess], > + test_msg, sess, > RTE_CRYPTO_ASYM_OP_VERIFY, > + key_type) !=3D TEST_SUCCESS) > { > + printf(" %-20s: %s\n", "Verify", > "FAIL"); > + status =3D TEST_FAILED; > + } else { > + printf(" %-20s: %s\n", "Verify", > "PASS"); > + } > + > + sess++; > + > + } while (sess <=3D 1); > + printf("\n"); > + } > + } > + > + TEST_ASSERT_EQUAL(status, 0, "Test failed"); > + return status; > +} > diff --git a/app/test/test_cryptodev_asym_rsa.h > b/app/test/test_cryptodev_asym_rsa.h > new file mode 100644 > index 0000000000..055bb77700 > --- /dev/null > +++ b/app/test/test_cryptodev_asym_rsa.h > @@ -0,0 +1,17 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#ifndef TEST_CRYPTODEV_ASYM_RSA_H_ > +#define TEST_CRYPTODEV_ASYM_RSA_H_ > + > +#include > +#include > + > +int ats_rsa_setup(void); > + > +void ats_rsa_teardown(void); > + > +int ats_rsa_run(void); > + > +#endif /* TEST_CRYPTODEV_ASYM_RSA_H_ */ > diff --git a/app/test/test_cryptodev_asym_rsa_creator.c > b/app/test/test_cryptodev_asym_rsa_creator.c > new file mode 100644 > index 0000000000..7c031721af > --- /dev/null > +++ b/app/test/test_cryptodev_asym_rsa_creator.c > @@ -0,0 +1,145 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#include > +#include > +#include > +#include > + > +#include > + > +#include > +#include > +#include > +#include > +#include Use USE_OPENSSL as mentioned earlier here and don't run tests if openssl no= t installed. > + > +#include "test_cryptodev_asym_rsa_creator.h" > +#include "test_cryptodev_asym_creator.h" > + > +static int rsa_result(RSA *rsa, struct asym_test_rsa_vct *vct, > + enum rte_crypto_rsa_padding_type padding) { > + int clen, state =3D 0; > + int padding_rsa; > + unsigned char digest[SHA256_DIGEST_LENGTH]; > + > + if (padding =3D=3D RTE_CRYPTO_RSA_PADDING_PKCS1_5) > + padding_rsa =3D RSA_PKCS1_PADDING; > + else > + padding_rsa =3D RSA_NO_PADDING; > + > + clen =3D RSA_public_encrypt(vct->pt.len, vct->pt.data, vct->ct.data, > rsa, > + padding_rsa); > + > + if (clen >=3D 0) > + vct->ct.len =3D clen; > + else > + goto err; > + > + unsigned char dec_buffer[ASYM_DATA_SIZE] =3D { 0 }; > + clen =3D RSA_private_decrypt(vct->ct.len, vct->ct.data, dec_buffer, > rsa, > + padding_rsa); > + > + if (memcmp(dec_buffer, vct->pt.data, vct->pt.len) !=3D 0) > + goto err; > + > + SHA256(vct->pt.data, vct->pt.len, digest); > + > + if (padding_rsa =3D=3D RSA_NO_PADDING) { > + int rsa_size =3D RSA_size(rsa); > + if (RSA_padding_add_PKCS1_type_1(vct->digest.data, > rsa_size, digest, > + SHA256_DIGEST_LENGTH) !=3D 1) > + goto err; > + > + vct->digest.len =3D rsa_size; > + } else { > + memcpy(vct->digest.data, digest, SHA256_DIGEST_LENGTH); > + vct->digest.len =3D SHA256_DIGEST_LENGTH; > + } > + > + clen =3D RSA_private_encrypt(vct->digest.len, vct->digest.data, > + vct->sign.data, rsa, padding_rsa); > + > + if (clen >=3D 0) > + vct->sign.len =3D clen; > + else > + goto err; > + > + state =3D 1; > + > +err: > + return state; > +} > + > +int atv_rsa_creator(struct asym_test_rsa_vct *vct, > + struct asym_test_rsa_rule *rule) > +{ > + int ret; > + BN_CTX *ctx =3D NULL; > + RSA *rsa =3D NULL; > + BIGNUM *exp =3D NULL; > + > + const BIGNUM *n =3D NULL; > + const BIGNUM *e =3D NULL; > + const BIGNUM *p =3D NULL; > + const BIGNUM *d =3D NULL; > + const BIGNUM *q =3D NULL; > + const BIGNUM *dmp1 =3D NULL; > + const BIGNUM *dmq1 =3D NULL; > + const BIGNUM *iqmp =3D NULL; > + > + for (;;) { Can you put some limitation on loop count here ? > + vct->pt.len =3D rule->pt_len; > + atv_create_data(vct->pt.data, vct->pt.len); > + vct->pt.data[0] =3D 0xAA; > + > + ctx =3D BN_CTX_new(); > + rsa =3D RSA_new(); > + exp =3D BN_new(); > + > + ret =3D BN_set_word(exp, RSA_F4); > + if (ret =3D=3D 0) > + goto err; > + > + ret =3D RSA_generate_key_ex(rsa, rule->key_size, exp, NULL); > + if (ret =3D=3D 0) > + goto err; > + > + ret =3D rsa_result(rsa, vct, rule->padding); > + if (ret =3D=3D 0) > + goto err; > + > + RSA_get0_key(rsa, &n, &e, &d); > + RSA_get0_factors(rsa, &p, &q); > + RSA_get0_crt_params(rsa, &dmp1, &dmq1, &iqmp); > + > + vct->n.len =3D BN_bn2bin(n, vct->n.data); > + vct->e.len =3D BN_bn2bin(e, vct->e.data); > + vct->d.len =3D BN_bn2bin(d, vct->d.data); > + vct->p.len =3D BN_bn2bin(p, vct->p.data); > + vct->q.len =3D BN_bn2bin(q, vct->q.data); > + > + vct->dP.len =3D BN_bn2bin(dmp1, vct->dP.data); > + vct->dQ.len =3D BN_bn2bin(dmq1, vct->dQ.data); > + vct->qInv.len =3D BN_bn2bin(iqmp, vct->qInv.data); > + > +err: > + RSA_free(rsa); > + BN_free(exp); > + BN_CTX_free(ctx); > + > + if (ret =3D=3D 1) > + break; > + } > + > + vct->xform_type =3D RTE_CRYPTO_ASYM_XFORM_RSA; > + vct->padding =3D rule->padding, > + vct->op_type_flags =3D rule->operation; > + vct->key_exp =3D 1, > + vct->key_qt =3D 1, > + > + sprintf(vct->description, "RSA key size: %d bits", rule->key_size); > + return 0; > +} > diff --git a/app/test/test_cryptodev_asym_rsa_creator.h > b/app/test/test_cryptodev_asym_rsa_creator.h > new file mode 100644 > index 0000000000..58c0efd376 > --- /dev/null > +++ b/app/test/test_cryptodev_asym_rsa_creator.h > @@ -0,0 +1,16 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#ifndef TEST_CRYPTODEV_ASYM_RSA_CREATOR_H_ > +#define TEST_CRYPTODEV_ASYM_RSA_CREATOR_H_ > + > +#include > +#include > + > +#include "test_cryptodev_asym_vectors_def.h" > + > +int atv_rsa_creator(struct asym_test_rsa_vct *vct, > + struct asym_test_rsa_rule *rule); > + > +#endif /* TEST_CRYPTODEV_ASYM_RSA_CREATOR_H_ */ > diff --git a/app/test/test_cryptodev_asym_types.h > b/app/test/test_cryptodev_asym_types.h > new file mode 100644 > index 0000000000..5b2a79679c > --- /dev/null > +++ b/app/test/test_cryptodev_asym_types.h > @@ -0,0 +1,20 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#ifndef TEST_CRPTODEV_ASYM_TYPES_H_ > +#define TEST_CRPTODEV_ASYM_TYPES_H_ > + > +#include > +#include > + > +struct crypto_testsuite_params_asym { > + struct rte_mempool *op_mpool; > + struct rte_mempool *session_mpool; > + struct rte_cryptodev_config conf; > + struct rte_cryptodev_qp_conf qp_conf; > + uint8_t valid_devs[RTE_CRYPTO_MAX_DEVS]; > + uint8_t valid_dev_count; > +}; > + > +#endif /* TEST_CRPTODEV_ASYM_TYPES_H_ */ > diff --git a/app/test/test_cryptodev_asym_vectors.c > b/app/test/test_cryptodev_asym_vectors.c > new file mode 100644 > index 0000000000..d18aaa5426 > --- /dev/null > +++ b/app/test/test_cryptodev_asym_vectors.c > @@ -0,0 +1,31 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#include > +#include > + > +#include "test_cryptodev_asym_vectors.h" > +#include "test_cryptodev_asym_rsa_creator.h" > +#include "test_cryptodev_asym_vectors_rules.h" > + > +void atv_free(void *vct) > +{ > + free(vct); > +} > + > +struct asym_test_rsa_vct *atv_rsa(int *vct_nb) { > + struct asym_test_rsa_vct *vct =3D NULL; > + int i; > + > + *vct_nb =3D asym_test_rsa_rules_size; > + > + vct =3D calloc(*vct_nb, sizeof(struct asym_test_rsa_vct)); > + > + if (vct) > + for (i =3D 0; i < *vct_nb; i++) > + atv_rsa_creator(&vct[i], &asym_test_rsa_rules[i]); else ? > + > + return vct; > +} > diff --git a/app/test/test_cryptodev_asym_vectors.h > b/app/test/test_cryptodev_asym_vectors.h > new file mode 100644 > index 0000000000..6f47d92dd3 > --- /dev/null > +++ b/app/test/test_cryptodev_asym_vectors.h > @@ -0,0 +1,18 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#ifndef TEST_CRYPTODEV_ASYM_VECTORS_H_ > +#define TEST_CRYPTODEV_ASYM_VECTORS_H_ > + > +#include > +#include "rte_crypto_asym.h" > +#include "test_cryptodev_asym_vectors_def.h" > + > +void atv_free(void *vct); > + > +struct asym_test_modex_vct *atv_modex(int *vct_nb); > + > +struct asym_test_rsa_vct *atv_rsa(int *vct_nb); > + > +#endif /* TEST_CRYPTODEV_ASYM_VECTORS_H_ */ > diff --git a/app/test/test_cryptodev_asym_vectors_def.h > b/app/test/test_cryptodev_asym_vectors_def.h > new file mode 100644 > index 0000000000..b8d9c51f9b > --- /dev/null > +++ b/app/test/test_cryptodev_asym_vectors_def.h > @@ -0,0 +1,132 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#ifndef TEST_CRYPTODEV_ASYM_VECTORS_DEF_H__ > +#define TEST_CRYPTODEV_ASYM_VECTORS_DEF_H__ > + > +#include > + > +#include "rte_crypto_asym.h" > + > +#define ASYM_DATA_SIZE 4096 > + > +struct asym_test_rsa_vct { > + enum rte_crypto_asym_xform_type xform_type; > + char description[2048]; > + uint64_t op_type_flags; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } pt; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } ct; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } sign; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } digest; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } e; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } d; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } n; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } p; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } q; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } dP; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } dQ; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } qInv; > + > + uint16_t result_len; > + enum rte_crypto_rsa_padding_type padding; > + int key_exp; > + int key_qt; > +}; > + > +struct asym_test_rsa_rule { > + int key_size; > + enum rte_crypto_rsa_priv_key_type key_type; > + enum rte_crypto_rsa_padding_type padding; > + int pt_len; > + uint64_t operation; > +}; > + > +struct asym_test_modex_vct { > + enum rte_crypto_asym_xform_type xform_type; > + char description[ASYM_DATA_SIZE]; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } base; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } exponent; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } modulus; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } reminder; > + uint16_t result_len; > +}; > + > +struct asym_test_modinv_vct { > + enum rte_crypto_asym_xform_type xform_type; > + char description[ASYM_DATA_SIZE]; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } base; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } modulus; > + struct { > + uint8_t data[ASYM_DATA_SIZE]; > + uint16_t len; > + } inverse; > + uint16_t result_len; > +}; > + > +struct asym_test_modexp_rule { > + int base_len; > + int modulus_len; > + int exponent_len; > +}; > + > +struct asym_test_modinv_rule { > + int base_len; > + int modulus_len; > +}; > + > +#endif /* TEST_CRYPTODEV_ASYM_VECTORS_DEF_H__ */ > diff --git a/app/test/test_cryptodev_asym_vectors_rules.h > b/app/test/test_cryptodev_asym_vectors_rules.h > new file mode 100644 > index 0000000000..4e93df6f59 > --- /dev/null > +++ b/app/test/test_cryptodev_asym_vectors_rules.h > @@ -0,0 +1,42 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright (c) 2022 Intel Corporation */ > + > +#ifndef TEST_CRYPTODEV_ASYM_VECTORS_RULES_H__ > +#define TEST_CRYPTODEV_ASYM_VECTORS_RULES_H__ > + > +#include > + > +#include "test_cryptodev_asym_vectors_def.h" > + > +static struct asym_test_rsa_rule asym_test_rsa_rules[] =3D { { > + .key_size =3D 1024, > + .key_type =3D RTE_RSA_KEY_TYPE_EXP, > + .padding =3D RTE_CRYPTO_RSA_PADDING_NONE, > + .pt_len =3D 128, > + .operation =3D (1UL << RTE_CRYPTO_ASYM_OP_ENCRYPT) | > + (1UL << > RTE_CRYPTO_ASYM_OP_DECRYPT) }, { > + .key_size =3D 2048, > + .key_type =3D RTE_RSA_KEY_TYPE_EXP, > + .padding =3D RTE_CRYPTO_RSA_PADDING_NONE, > + .pt_len =3D 256, > + .operation =3D (1UL << RTE_CRYPTO_ASYM_OP_ENCRYPT) | > + (1UL << > RTE_CRYPTO_ASYM_OP_DECRYPT) }, { > + .key_size =3D 4096, > + .key_type =3D RTE_RSA_KEY_TYPE_EXP, > + .padding =3D RTE_CRYPTO_RSA_PADDING_NONE, > + .pt_len =3D 512, > + .operation =3D (1UL << RTE_CRYPTO_ASYM_OP_ENCRYPT) | > + (1UL << > RTE_CRYPTO_ASYM_OP_DECRYPT) > + }, > +}; > + Could you also add some combinations of _QT type key ? Also on padding type as well. Just to ensure nothing broken here. > +static int asym_test_rsa_rules_size =3D (sizeof(asym_test_rsa_rules) > + / sizeof(*asym_test_rsa_rules)); > + > +#endif /* TEST_CRYPTODEV_ASYM_VECTORS_RULES_H__ */ > diff --git a/lib/cryptodev/rte_crypto_asym.h > b/lib/cryptodev/rte_crypto_asym.h index 8ae43d5f3d..6e289832b3 100644 > --- a/lib/cryptodev/rte_crypto_asym.h > +++ b/lib/cryptodev/rte_crypto_asym.h > @@ -182,6 +182,7 @@ enum rte_crypto_rsa_priv_key_type { > /**< RSA private key is in quintuple format > * See rte_crypto_rsa_priv_key_qt > */ > + RTE_RSA_KEY_TYPE_LIST_END, Read my comment above to avoid this change as much as possible. > }; >=20 > /** > -- > 2.25.1 Thanks, Gowrishankar