Hi Akhil, I did not put much effort into documentation part. I believe it needs bit more attention in asym area (one bigger patch) + backported fixes about ECDSA and ECPM.
> -----Original Message----- > From: Kusztal, ArkadiuszX <arkadiuszx.kusz...@intel.com> > Sent: Wednesday, June 1, 2022 11:03 AM > To: dev@dpdk.org > Cc: gak...@marvell.com; Zhang, Roy Fan <roy.fan.zh...@intel.com>; Kusztal, > ArkadiuszX <arkadiuszx.kusz...@intel.com> > Subject: [PATCH v5 06/12] cryptodev: add elliptic curve diffie hellman > > - Added elliptic curve Diffie-Hellman parameters. > Point multiplication allows the user to process every phase of ECDH, but for > phase 1, user should not really care about the generator. > The user does not even need to know what the generator looks like, therefore > setting ec xform would make this work. > > Signed-off-by: Arek Kusztal <arkadiuszx.kusz...@intel.com> > --- > devtools/libabigail.abignore | 3 +++ > doc/guides/cryptodevs/features/default.ini | 1 + > doc/guides/prog_guide/cryptodev_lib.rst | 7 +++--- > doc/guides/rel_notes/release_22_07.rst | 2 ++ > lib/cryptodev/rte_crypto_asym.h | 38 > ++++++++++++++++++++++++++++++ > 5 files changed, 48 insertions(+), 3 deletions(-) > > diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore index > 79ff15dc4e..6d174b291f 100644 > --- a/devtools/libabigail.abignore > +++ b/devtools/libabigail.abignore > @@ -27,6 +27,9 @@ > ; Ignore changes to rte_crypto_asym_op, asymmetric crypto API is > experimental [suppress_type] > name = rte_crypto_asym_op > +; Ignore changes to rte_crypto_asym_xform_type, asymmetric crypto API > +is experimental [suppress_type] > + name = rte_crypto_asym_xform_type > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > ; Temporary exceptions till next major ABI version ; diff --git > a/doc/guides/cryptodevs/features/default.ini > b/doc/guides/cryptodevs/features/default.ini > index 018fe0221e..7371ca6644 100644 > --- a/doc/guides/cryptodevs/features/default.ini > +++ b/doc/guides/cryptodevs/features/default.ini > @@ -118,6 +118,7 @@ Modular Inversion = > Diffie-hellman = > ECDSA = > ECPM = > +ECDH = > > ; > ; Supported Operating systems of a default crypto driver. > diff --git a/doc/guides/prog_guide/cryptodev_lib.rst > b/doc/guides/prog_guide/cryptodev_lib.rst > index edd11059bc..9e54683aa1 100644 > --- a/doc/guides/prog_guide/cryptodev_lib.rst > +++ b/doc/guides/prog_guide/cryptodev_lib.rst > @@ -1018,9 +1018,9 @@ Asymmetric Cryptography > ----------------------- > > The cryptodev library currently provides support for the following > asymmetric - > Crypto operations; RSA, Modular exponentiation and inversion, Diffie-Hellman - > public and/or private key generation and shared secret compute, DSA Signature > - > generation and verification. > +Crypto operations; RSA, Modular exponentiation and inversion, > +Diffie-Hellman and Elliptic Curve Diffie-Hellman public and/or private > +key generation and shared secret compute, DSA Signature generation and > verification. > > Session and Session Management > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > @@ -1088,6 +1088,7 @@ Each xform defines specific asymmetric crypto algo. > Currently supported are: > * Modular operations (Exponentiation and Inverse) > * Diffie-Hellman > * DSA > +* Elliptic Curve Diffie-Hellman > * None - special case where PMD may support a passthrough mode. More for > diagnostic purpose > > See *DPDK API Reference* for details on each rte_crypto_xxx_xform struct diff > --git a/doc/guides/rel_notes/release_22_07.rst > b/doc/guides/rel_notes/release_22_07.rst > index 73a2434f86..ef6eaf0ad2 100644 > --- a/doc/guides/rel_notes/release_22_07.rst > +++ b/doc/guides/rel_notes/release_22_07.rst > @@ -130,6 +130,8 @@ Removed Items > API Changes > ----------- > > +* cryptodev: Added Elliptic Curve Diffie-Hellman (ECDH) algorithm. > + > .. This section should contain API changes. Sample format: > > * sample: Add a short 1-2 sentence description of the API change diff > --git > a/lib/cryptodev/rte_crypto_asym.h b/lib/cryptodev/rte_crypto_asym.h index > 88bc34dc8c..f61a2ddce8 100644 > --- a/lib/cryptodev/rte_crypto_asym.h > +++ b/lib/cryptodev/rte_crypto_asym.h > @@ -99,6 +99,8 @@ enum rte_crypto_asym_xform_type { > /**< Elliptic Curve Digital Signature Algorithm > * Perform Signature Generation and Verification. > */ > + RTE_CRYPTO_ASYM_XFORM_ECDH, > + /**< Elliptic Curve Diffie Hellman */ > RTE_CRYPTO_ASYM_XFORM_ECPM, > /**< Elliptic Curve Point Multiplication */ > RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END > @@ -429,6 +431,41 @@ struct rte_crypto_dh_op_param { }; > > /** > + * Elliptic Curve Diffie-Hellman Operations params. > + */ > +struct rte_crypto_ecdh_op_param { > + enum rte_crypto_asym_ke_type ke_type; > + /**< Key exchange operation type */ > + rte_crypto_uint priv_key; > + /**< > + * Output - generated private key when ke_type is > + * RTE_CRYPTO_ASYM_KE_PRIVATE_KEY_GENERATE. > + * > + * Input - private key when ke_type is one of: > + * RTE_CRYPTO_ASYM_KE_PUBLIC_KEY_GENERATE, > + * RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE. > + * > + * In case priv_key.length is 0 and ke_type is set with > + * RTE_CRYPTO_ASYM_KE_PUBLIC_KEY_GENERATE, CSRNG capable > + * device will generate private key and use it for public > + * key generation. > + */ > + struct rte_crypto_ec_point pub_key; > + /**< > + * Output - generated public key when ke_type is > + * RTE_CRYPTO_ASYM_KE_PUBLIC_KEY_GENERATE. > + * > + * Input - peer's public key when ke_type is > + * RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE. > + */ > + struct rte_crypto_ec_point shared_secret; > + /**< > + * Output - calculated shared secret when ke_type is > + * RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE. > + */ > +}; > + > +/** > * DSA Operations params > * > */ > @@ -566,6 +603,7 @@ struct rte_crypto_asym_op { > struct rte_crypto_mod_op_param modex; > struct rte_crypto_mod_op_param modinv; > struct rte_crypto_dh_op_param dh; > + struct rte_crypto_ecdh_op_param ecdh; > struct rte_crypto_dsa_op_param dsa; > struct rte_crypto_ecdsa_op_param ecdsa; > struct rte_crypto_ecpm_op_param ecpm; > -- > 2.13.6