> This commit adds Elliptic Curve Diffie-Hellman option to Cryptodev. > This could be achieved with EC point multiplication but: > 1) Phase 1 of DH is used with EC generator, multiplication expect > setting generator manually. > 2) It will unify usage of DH. > 3) Can be extended easily to support X25519 and X448.
It is not clear how adding ECDH option will achieve above three statements. > > Signed-off-by: Arek Kusztal <arkadiuszx.kusz...@intel.com> > --- > v2: > - added ecdh comments to operation types > > Depends-on: series-22684 ("cryptodev: move dh type from xform to dh op") > > lib/cryptodev/rte_crypto_asym.h | 46 +++++++++++++++++++++++---------------- > -- > 1 file changed, 26 insertions(+), 20 deletions(-) > > diff --git a/lib/cryptodev/rte_crypto_asym.h b/lib/cryptodev/rte_crypto_asym.h > index 4697a7bc59..64d97ae054 100644 > --- a/lib/cryptodev/rte_crypto_asym.h > +++ b/lib/cryptodev/rte_crypto_asym.h > @@ -91,6 +91,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 */ Can we add this after ECPM? And we also need to remove the LIST_ENDs from Asym. > RTE_CRYPTO_ASYM_XFORM_ECPM, > /**< Elliptic Curve Point Multiplication */ > RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END > @@ -112,9 +114,9 @@ enum rte_crypto_asym_op_type { > RTE_CRYPTO_ASYM_OP_PRIVATE_KEY_GENERATE, > /**< DH Private Key generation operation */ > RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE, > - /**< DH Public Key generation operation */ > + /**< DH/ECDH Public Key generation operation */ > RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE, > - /**< DH Shared Secret compute operation */ > + /**< DH/ECDH Shared Secret compute operation */ > RTE_CRYPTO_ASYM_OP_LIST_END > }; > > @@ -385,34 +387,38 @@ struct rte_crypto_rsa_op_param { > }; > > /** > - * Diffie-Hellman Operations params. > + * Diffie-Hellman/Elliptic Curve Diffie-Hellman operation. > * @note: > */ > struct rte_crypto_dh_op_param { > enum rte_crypto_asym_op_type op_type; > /**< Diffie-Hellman operation type */ > - rte_crypto_uint pub_key; > + rte_crypto_param priv_key; > /**< > - * Output generated public key when op_type is > - * DH PUB_KEY_GENERATION. > - * Input peer public key when op_type is DH > - * SHARED_SECRET_COMPUTATION > - * > + * Diffie-Hellman private part > + * For DH and ECDH it is big-endian integer. > + * Input for both phases of Diffie-Hellman > */ > - > - rte_crypto_uint priv_key; > + union { > + rte_crypto_uint pub_key; > + struct rte_crypto_ec_point pub_point; > + }; > /**< > - * Output generated private key if op_type is > - * DH PRIVATE_KEY_GENERATION > - * Input when op_type is DH SHARED_SECRET_COMPUTATION. > - * > + * Diffie-Hellman public part > + * For DH it is big-endian unsigned integer. > + * For ECDH it is a point on the curve. > + * Output for RTE_CRYPTO_ASYM_OP_PUBLIC_KEY_GENERATE > + * Input for RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE > */ > - > - rte_crypto_uint shared_secret; > + union { > + rte_crypto_uint shared_secret; > + struct rte_crypto_ec_point shared_point; > + }; > /**< > - * Output with calculated shared secret > - * when dh op_type = SHARED_SECRET_COMPUTATION. > - * > + * Diffie-Hellman shared secret > + * For DH it is big-endian unsigned integer. > + * For ECDH it is a point on the curve. > + * Output for RTE_CRYPTO_ASYM_OP_SHARED_SECRET_COMPUTE > */ > }; There are 2 questions for this above change. - why is the order of parameters change? - The patch description does not describe this change. Could you separate out this change And provide proper explanation to this change?