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 CD284A0555; Thu, 26 May 2022 11:52:25 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 74B0140E78; Thu, 26 May 2022 11:52:25 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id A6FDD40DF7 for ; Thu, 26 May 2022 11:52:23 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 24Q2AiqI003225; Thu, 26 May 2022 02:52:22 -0700 Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2174.outbound.protection.outlook.com [104.47.59.174]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3g9jap53wr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 26 May 2022 02:52:22 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Qox25UHgXBUQitJ0We+hXwgo9s3N2s7QOPOvb9uSqR/QX6XI5+74bxMhSbXUbim3IGNvsU9ErpTv74BDFa+Wwy7GlGL33KIMabhZnvdglYsaYDT2El9qf5BydCfrlux02c3HY6LmNyBsGQVoyB5/N9sLUgySp83K1RAOkz6G3M9iIATbEvt1LYHLGaDS8obMNPyR9uuHBSVMehPEu5ieX0i+fT+9zMtuBtsSh0Fmh9npxExJvd13/u+/hxsRVtUyCCPyApUA56e37kZiByDR047CvBQVVVmQBnwkz5HyHClIJ/Agp8w2onhu8VmXXsJ2sq+1wMu70WCwCKjNJL7e3A== 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=g2ECWth6HbWOdDYF37fW8eSmGXusZR68ux0jvCdPRT0=; b=MMa9ruRDVlI/oAQd66EUWz1c75/QOU2mV3OXPLR3oXDPoVpNAvqxBQpOLbiW1L+SdwijlD1ljzHtKVW5w12fWnoZL9Wyq7qpAxOi5RReb1M1rED1UKQa/6ackyeU+rdClJg6CQDoTtvssfzSOf+OgWoE15N11BcfR0dNJqf94A8Avm9LWe4p78RN7cxQqgXPuL1nZGp84JTNAZJjntSmnl6wptdIY69T9HYVUOT9E2pv+qZlzLvxwGzeq3PnBjr6f41he5H7WIYLuupugecXr8IKI0j13rmtHb5uADZOdiOBcKIpj82IWDR3UHkGASp3xNgLF9zGb3sNzWmaKtiNoQ== 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=g2ECWth6HbWOdDYF37fW8eSmGXusZR68ux0jvCdPRT0=; b=Ga1XTm54fPguIgbANjPvG3dl7WSTjEM/TyVuclk6W4IwCo3pZfdNZlBnP9AAccJXXxRY/xfQbIdvuCDG5iEJaK6rW7mGEr4tBDHrlUgoa2TSelhU4UriIcD+8yhY1UdKfnZmvDNON8F/StO5BBG4ocWkvt51KuLCAn+4lhW0Xt0= Received: from CO6PR18MB4484.namprd18.prod.outlook.com (2603:10b6:5:359::9) by DM5PR18MB1131.namprd18.prod.outlook.com (2603:10b6:3:2f::12) 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 09:52:19 +0000 Received: from CO6PR18MB4484.namprd18.prod.outlook.com ([fe80::f154:453d:893:f6ce]) by CO6PR18MB4484.namprd18.prod.outlook.com ([fe80::f154:453d:893:f6ce%7]) with mapi id 15.20.5293.013; Thu, 26 May 2022 09:52:19 +0000 From: Akhil Goyal To: Arek Kusztal , "dev@dpdk.org" CC: "roy.fan.zhang@intel.com" Subject: RE: [EXT] [PATCH v2 02/14] cryptodev: reduce number of comments in asym xform Thread-Topic: [EXT] [PATCH v2 02/14] cryptodev: reduce number of comments in asym xform Thread-Index: AQHYcFlw35GCWfYyxkO8cMux5GdcYq0w6NBQ Date: Thu, 26 May 2022 09:52:18 +0000 Message-ID: References: <20220525155324.9288-1-arkadiuszx.kusztal@intel.com> <20220525155324.9288-3-arkadiuszx.kusztal@intel.com> In-Reply-To: <20220525155324.9288-3-arkadiuszx.kusztal@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f2ada04a-4f64-4123-b76f-08da3efd6c46 x-ms-traffictypediagnostic: DM5PR18MB1131: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: pkLHGLe9UHOjCWzUVBxjCfpJq8o7otHfyvdhQTwOMbmUM6fOopfqvr3lV47wXvqlBPa0mCtK9S+2yYqCn1kzWiQffsT3x1pJJVjxsb1mqrbEezJc7fmRKx2oOxZXSiLxlbt5iRDSRSqZcfzxXA+cYFXtIL8QdiEy0YoPeFg1VpcCqlh4vegttLkKcwyjccAmRWWCg+UzuRdglWBNfyHcbTEfYVS9zaX0tuWHb9oogDqjXpknGz+NO0Sc/UNabFNIIU/TvA1dwzzPJt8BpuJkfNCDTNdRjvSPiyJWgXFEGl0SFymZhbghJPlTpJr/6WOAiAFVOo7jxY2hFpyBsA3fBNfdLbd38kCLfFRVbhqoUgUC3xM90iSVksMReCvFhM5LX7P3Rfp/A0VktE4/+bm1Jz3biU2WSLbuujzkG1Y34hloT2OR44RfPSp2cHGbaXWaHodImKa9q0w9UJDkjpIBqoZonNXurIcbxpPOK0A2onFq9AKHVNY1XbeyePugqbG/4WUj/tT+f/aUT1+1ZgK8sLpjOUk2cxpWdaUzXcb8UK9u1rOt5Oe0NZu+1L5579KEqkVBnVg2/4qkYaTjfoG9f4GGwK7MsFYQ5h6kCSqhlys0+pH0k7sdfLrX2dXC34/5mYZSeJ7UiBXkRrkKUnPUKBaDrMa5j5lPV9sjL9Nd3i5rB28T0CRvu24q1uck3TT8i3oePLNOCM651cBf4pfTJw== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CO6PR18MB4484.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(52536014)(4326008)(55016003)(8676002)(33656002)(7696005)(508600001)(5660300002)(8936002)(38070700005)(26005)(186003)(6506007)(55236004)(86362001)(9686003)(71200400001)(83380400001)(2906002)(38100700002)(316002)(110136005)(122000001)(76116006)(66556008)(66946007)(66446008)(66476007)(64756008); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?7k5/KZPQRTVJXFvywuBRV9VAhAAWlzzszROvKcXNqzjK/1sHKQZ+/mpei6HU?= =?us-ascii?Q?KQ8RTuvaeY+j7KZBM4KXvdgfhQFGG9fElrb/bvjOm+PBShit+V29ICbVCUzM?= =?us-ascii?Q?e4dBSedD5QUSYJpNiRuTXWK3cmatt8VtWkAiUP1/MTeCliHYbaEndjfjZeKa?= =?us-ascii?Q?QZdUyd/1WOS0Qpfi3QNgqtpzfVay7JKkIHUKwBUOnwlROSpCq6ESJshIdUmk?= =?us-ascii?Q?pKLJpQYRpwNQGCjY9oqyvAi38LBx1wCxKIz4mH+L0KuqOGUulzT+YJHX3mZE?= =?us-ascii?Q?DCm6Q8YeU6AmU2YsGHqhupAIm5it5r+UEa9pdiizUfhtqsTyguv8FmxamBVu?= =?us-ascii?Q?UjLKFHZ1aOhDbZiaffioeuVYqDBTSFRht5TTi+ebLrdjf0zkQDAmMdaV2/Sy?= =?us-ascii?Q?qRkP5pQQv8XpViM/6cTynliTxnRiRs5jgud4SOANwN+GejGchk199SID2Q5L?= =?us-ascii?Q?jUNG1xWCcvqcdcTab7uSPN9599lo63IcpQcVjVoozthR8iF3oNW3t2IqoXWZ?= =?us-ascii?Q?JGA0Z2oXN8I0yGlxTuC57RRRldfav1+IeVXVdjKS9pphQ28aLFc75xjv/6nn?= =?us-ascii?Q?aQawieRLSMLoE3Ql4s8k0YAy4gxlkaLviZL/+fQ8xpnOdXxO1tdkl26DBBbk?= =?us-ascii?Q?mflR0vREym1BlODNJL4gpSRTxOKwONsY8/gG1A0ZbmY8zr3VQ8+koUszoHmo?= =?us-ascii?Q?OvCR9UYkm9igIZoNjtsAKfKp/A6pdZsqfin0wIa2i4LDNIGl1BY/UtkOAGbu?= =?us-ascii?Q?EhDksHWypAHzG4JDLyfHnzZ6tMnxiLc+ZM/v2S9XktmQ8DoYNT6oyIlzyaDx?= =?us-ascii?Q?TDSKpBzS5rjO5PsF+bAEm4N/u3RczFZp540RQWtMRM50tQ9J5pfgqANfCWgS?= =?us-ascii?Q?NoHrHfCPTG/xUXLmq2DKBOoUdxo3yVYs4Eq7kyq4upfGbcOuLYx8C/N58/ep?= =?us-ascii?Q?nDTlaQ/1HfCLKwpO6SU+fx3TnHvfeyq0r92LiqZ6+pziRZBKmWsyWegUGVNE?= =?us-ascii?Q?/TdY+l/0Wxj1AyuI2KZo4+5gS0r9UXIMf1AUYcgXkhEWYRCFTP3nb9od3ZC0?= =?us-ascii?Q?lZSLKv8XOSOpAbE28lvm9VgGq0LmpLDbgfxxLPNiNYXGaN4X/wUjG8pOFXoX?= =?us-ascii?Q?v8mCyoxLlQXNMFyahTkPODnObxd14bInl6GFYZqnfRi/PQoIoMu8x03nO0cI?= =?us-ascii?Q?Ze/mX44hTSrdpfh8WxBiM6rjLov8cNinyNdeHFHGeiJqqiS+sC9+zClzqyKm?= =?us-ascii?Q?c4Yg9vXAqjIdbQbhxSVSIstx6FpXUen1ntwyANCcbSW1zjTDISijSUeMyxZK?= =?us-ascii?Q?BOf3KsWpxhydCu7Yq7JvsbpriOfNvvbmCeUVulse5y4bQNKFppAV5C/zDvzp?= =?us-ascii?Q?35jcq4l/+gaCzx/x9jJ5knvl2GtOiI8rHoeI4nb07GJl2Vn9ekOBANDtOqfn?= =?us-ascii?Q?92SRFpCnrvTJl0eAVTPGCLH23mvaY6RTZcCFeR1g2FZXwfz2MnupispnaQeJ?= =?us-ascii?Q?wiEmu/3Hq6Z3ixDdtnFOwB2Jd4+JfhMniXJ3iegnfbrqAe5d4tSLjIW+LCmm?= =?us-ascii?Q?Q1RvMUDb9mX0qSuxOCZ5ruLHN67VsYGA5OXbWshbgxz4uorG0mLAdQQybKNc?= =?us-ascii?Q?G5H7vti/IqiUs17Dys3Aozz1K/ZYMpNJpgelgjX7qFy8ZFrK/qCZffT+zSqR?= =?us-ascii?Q?0lbzGo/dq2TuOWzeMrkeBN3Ppyf+Lxr50ynRmScEOcO7rWazlmqyOfzHsn5p?= =?us-ascii?Q?Zk/isKbQjA=3D=3D?= 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: CO6PR18MB4484.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f2ada04a-4f64-4123-b76f-08da3efd6c46 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 May 2022 09:52:18.9943 (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: AVMXtpwG5qHgYvULbFL7KSxAV/hEQyaOtkVjH+mZ50aGQBi9LMBOtSlY4j15urlWvSyPXdu3yXBLu6/Huh+NWA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR18MB1131 X-Proofpoint-GUID: RgbSbn0dEFerJGDnhP6en6szeOLbCjUL X-Proofpoint-ORIG-GUID: RgbSbn0dEFerJGDnhP6en6szeOLbCjUL X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.874,Hydra:6.0.486,FMLib:17.11.64.514 definitions=2022-05-26_03,2022-05-25_02,2022-02-23_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 > - Reduced number of comments in asymmetric xform. > Information describing basic functionality of well known > algorithms are unnecessary. > - Removed NONE asymetric xform. I commented on v1 not to remove this and I do not see comment from your sid= e for removing it. >=20 > Signed-off-by: Arek Kusztal > --- > app/test/test_cryptodev_asym.c | 2 - > lib/cryptodev/rte_crypto_asym.h | 114 ++++++++++++++++------------------= ------ > lib/cryptodev/rte_cryptodev.c | 1 - > 3 files changed, 46 insertions(+), 71 deletions(-) >=20 > diff --git a/app/test/test_cryptodev_asym.c b/app/test/test_cryptodev_asy= m.c > index 573af2a537..5aa9d65395 100644 > --- a/app/test/test_cryptodev_asym.c > +++ b/app/test/test_cryptodev_asym.c > @@ -288,7 +288,6 @@ test_cryptodev_asym_ver(struct rte_crypto_op *op, > break; > case RTE_CRYPTO_ASYM_XFORM_DH: > case RTE_CRYPTO_ASYM_XFORM_DSA: > - case RTE_CRYPTO_ASYM_XFORM_NONE: > case RTE_CRYPTO_ASYM_XFORM_UNSPECIFIED: > default: > break; > @@ -440,7 +439,6 @@ test_cryptodev_asym_op(struct > crypto_testsuite_params_asym *ts_params, > break; > case RTE_CRYPTO_ASYM_XFORM_DH: > case RTE_CRYPTO_ASYM_XFORM_DSA: > - case RTE_CRYPTO_ASYM_XFORM_NONE: > case RTE_CRYPTO_ASYM_XFORM_UNSPECIFIED: > default: > snprintf(test_msg, ASYM_TEST_MSG_LEN, > diff --git a/lib/cryptodev/rte_crypto_asym.h b/lib/cryptodev/rte_crypto_a= sym.h > index 7206652458..66ffb29743 100644 > --- a/lib/cryptodev/rte_crypto_asym.h > +++ b/lib/cryptodev/rte_crypto_asym.h > @@ -38,6 +38,40 @@ extern const char * > rte_crypto_asym_op_strings[]; >=20 > /** > + * Buffer to hold crypto params required for asym operations. > + * > + * These buffers can be used for both input to PMD and output from PMD. > When > + * used for output from PMD, application has to ensure the buffer is lar= ge > + * enough to hold the target data. > + * > + * If an operation requires the PMD to generate a random number, > + * and the device supports CSRNG, 'data' should be set to NULL. > + * The crypto parameter in question will not be used by the PMD, > + * as it is internally generated. > + */ > +typedef struct rte_crypto_param_t { > + uint8_t *data; > + /**< pointer to buffer holding data */ > + rte_iova_t iova; > + /**< IO address of data buffer */ > + size_t length; > + /**< length of data in bytes */ > +} rte_crypto_param; > + > +/** Unsigned big-integer in big-endian format */ > +typedef rte_crypto_param rte_crypto_uint; > + > +/** > + * Structure for elliptic curve point > + */ > +struct rte_crypto_ec_point { > + rte_crypto_param x; > + /**< X coordinate */ > + rte_crypto_param y; > + /**< Y coordinate */ > +}; Why is this movement of code done? > + > +/** > * List of elliptic curves. This enum aligns with > * TLS "Supported Groups" registry (previously known as > * NamedCurve registry). FFDH groups are not, and will not > @@ -55,46 +89,23 @@ enum rte_crypto_curve_id { > }; >=20 > /** > - * Asymmetric crypto transformation types. > - * Each xform type maps to one asymmetric algorithm > - * performing specific operation > - * > + * Asymmetric crypto algorithms Since you are deferring the change for xform, it is better to keep the Above description as well. So no need for this above change. > */ > enum rte_crypto_asym_xform_type { > - RTE_CRYPTO_ASYM_XFORM_UNSPECIFIED =3D 0, > + RTE_CRYPTO_ASYM_XFORM_UNSPECIFIED, > /**< Invalid xform. */ > - RTE_CRYPTO_ASYM_XFORM_NONE, > - /**< Xform type None. > - * May be supported by PMD to support > - * passthrough op for debugging purpose. > - * if xform_type none , op_type is disregarded. > - */ > RTE_CRYPTO_ASYM_XFORM_RSA, > - /**< RSA. Performs Encrypt, Decrypt, Sign and Verify. > - * Refer to rte_crypto_asym_op_type > - */ > + /**< RSA */ I believe it is better to have a short one line description is good to have For someone who is new to asymmetric cryptography. You can remove "* Refer to rte_crypto_asym_op_type " > RTE_CRYPTO_ASYM_XFORM_DH, > - /**< Diffie-Hellman. > - * Performs Key Generate and Shared Secret Compute. > - * Refer to rte_crypto_asym_op_type > - */ > + /**< Diffie-Hellman */ > RTE_CRYPTO_ASYM_XFORM_DSA, > - /**< Digital Signature Algorithm > - * Performs Signature Generation and Verification. > - * Refer to rte_crypto_asym_op_type > - */ > + /**< Digital Signature Algorithm */ > RTE_CRYPTO_ASYM_XFORM_MODINV, > - /**< Modular Multiplicative Inverse > - * Perform Modular Multiplicative Inverse b^(-1) mod n > - */ > + /**< Modular Multiplicative Inverse */ > RTE_CRYPTO_ASYM_XFORM_MODEX, > - /**< Modular Exponentiation > - * Perform Modular Exponentiation b^e mod n > - */ > + /**< Modular Exponentiation */ > RTE_CRYPTO_ASYM_XFORM_ECDSA, > - /**< Elliptic Curve Digital Signature Algorithm > - * Perform Signature Generation and Verification. > - */ > + /**< Elliptic Curve Digital Signature Algorithm */ > RTE_CRYPTO_ASYM_XFORM_ECPM, > /**< Elliptic Curve Point Multiplication */ > RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END > @@ -126,11 +137,12 @@ enum rte_crypto_asym_op_type { > * Padding types for RSA signature. > */ > enum rte_crypto_rsa_padding_type { > - RTE_CRYPTO_RSA_PADDING_NONE =3D 0, > + RTE_CRYPTO_RSA_PADDING_NONE, > /**< RSA no padding scheme */ > RTE_CRYPTO_RSA_PADDING_PKCS1_5, > - /**< RSA PKCS#1 PKCS1-v1_5 padding scheme. For signatures block type > 01, > - * for encryption block type 02 are used. > + /**< RSA PKCS#1 PKCS1-v1_5 padding scheme. > + * For signatures block type 01, for encryption > + * block type 02 are used. > */ > RTE_CRYPTO_RSA_PADDING_OAEP, > /**< RSA PKCS#1 OAEP padding scheme */ > @@ -156,40 +168,6 @@ enum rte_crypto_rsa_priv_key_type { > }; >=20 > /** > - * Buffer to hold crypto params required for asym operations. > - * > - * These buffers can be used for both input to PMD and output from PMD. > When > - * used for output from PMD, application has to ensure the buffer is lar= ge > - * enough to hold the target data. > - * > - * If an operation requires the PMD to generate a random number, > - * and the device supports CSRNG, 'data' should be set to NULL. > - * The crypto parameter in question will not be used by the PMD, > - * as it is internally generated. > - */ > -typedef struct rte_crypto_param_t { > - uint8_t *data; > - /**< pointer to buffer holding data */ > - rte_iova_t iova; > - /**< IO address of data buffer */ > - size_t length; > - /**< length of data in bytes */ > -} rte_crypto_param; > - > -/** Unsigned big-integer in big-endian format */ > -typedef rte_crypto_param rte_crypto_uint; > - > -/** > - * Structure for elliptic curve point > - */ > -struct rte_crypto_ec_point { > - rte_crypto_param x; > - /**< X coordinate */ > - rte_crypto_param y; > - /**< Y coordinate */ > -}; > - > -/** > * Structure describing RSA private key in quintuple format. > * See PKCS V1.5 RSA Cryptography Standard. > */ > diff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.= c > index e16e6802aa..691625bd04 100644 > --- a/lib/cryptodev/rte_cryptodev.c > +++ b/lib/cryptodev/rte_cryptodev.c > @@ -160,7 +160,6 @@ rte_crypto_aead_operation_strings[] =3D { > * Asymmetric crypto transform operation strings identifiers. > */ > const char *rte_crypto_asym_xform_strings[] =3D { > - [RTE_CRYPTO_ASYM_XFORM_NONE] =3D "none", > [RTE_CRYPTO_ASYM_XFORM_RSA] =3D "rsa", > [RTE_CRYPTO_ASYM_XFORM_MODEX] =3D "modexp", > [RTE_CRYPTO_ASYM_XFORM_MODINV] =3D "modinv", > -- > 2.13.6