[v2,07/14] cryptodev: add elliptic curve diffie hellman

Message ID 20220525155324.9288-8-arkadiuszx.kusztal@intel.com (mailing list archive)
State Superseded, archived
Delegated to: akhil goyal
Headers
Series cryptodev: rsa, dh, ecdh changes |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Arkadiusz Kusztal May 25, 2022, 3:53 p.m. UTC
  - 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.kusztal@intel.com>
---
 lib/cryptodev/rte_crypto_asym.h | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
  

Comments

Akhil Goyal May 26, 2022, 11:29 a.m. UTC | #1
> - 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.kusztal@intel.com>
> ---
>  lib/cryptodev/rte_crypto_asym.h | 38
> ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
> 
> diff --git a/lib/cryptodev/rte_crypto_asym.h b/lib/cryptodev/rte_crypto_asym.h
> index ffb0e8ed17..0dab7c0593 100644
> --- a/lib/cryptodev/rte_crypto_asym.h
> +++ b/lib/cryptodev/rte_crypto_asym.h
> @@ -112,6 +112,8 @@ enum rte_crypto_asym_xform_type {
>  	/**< Elliptic Curve Digital Signature Algorithm */
>  	RTE_CRYPTO_ASYM_XFORM_ECPM,
>  	/**< Elliptic Curve Point Multiplication */
> +	RTE_CRYPTO_ASYM_XFORM_ECDH,
> +	/**< Elliptic Curve Diffie Hellman */
>  	RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END
>  	/**< End of list */
>  };
> @@ -407,6 +409,42 @@ struct rte_crypto_dh_op_param {
>  };
> 
>  /**
> + * Elliptic Curve Diffie-Hellman Operations params.
> + * @note:

Note missing?

> + */
> +struct rte_crypto_ecdh_op_param {
> +	enum rte_crypto_asym_ke_type op_type;
> +	/**< Key exchange operation type */
> +	rte_crypto_uint priv_key;
> +	/**<
> +	 * Output - generated private key, when xform type is
> +	 * RTE_CRYPTO_ASYM_KE_PRIVATE_KEY_GENERATE.
> +	 *
> +	 * Input - private key, when xform 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 xform 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.
> +	 */

You added the above CSRNG thing in pub key for DH and here in priv key?

> +	struct rte_crypto_ec_point pub_key;
> +	/**<
> +	 * Output - generated public key, when xform type is
> +	 * RTE_CRYPTO_ASYM_KE_PUBLIC_KEY_GENERATE.
> +	 *
> +	 * Input - peer's public key, when xform type is
> +	 * RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE.
Shouldn't this be for both  RTE_CRYPTO_ASYM_KE_PUBLIC_KEY_GENERATE and 
RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE

> +	 */
> +	struct rte_crypto_ec_point shared_secret;
> +	/**<
> +	 * Output - calculated shared secret when xform type is
> +	 * RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE.
> +	 */
> +};
> +
> +/**
>   * DSA Operations params
>   *
>   */
> --
> 2.13.6
  
Arkadiusz Kusztal May 26, 2022, 11:44 a.m. UTC | #2
> -----Original Message-----
> From: Akhil Goyal <gakhil@marvell.com>
> Sent: Thursday, May 26, 2022 1:29 PM
> To: Kusztal, ArkadiuszX <arkadiuszx.kusztal@intel.com>; dev@dpdk.org
> Cc: Zhang, Roy Fan <roy.fan.zhang@intel.com>
> Subject: RE: [EXT] [PATCH v2 07/14] 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.kusztal@intel.com>
> > ---
> >  lib/cryptodev/rte_crypto_asym.h | 38
> > ++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 38 insertions(+)
> >
> > diff --git a/lib/cryptodev/rte_crypto_asym.h
> > b/lib/cryptodev/rte_crypto_asym.h index ffb0e8ed17..0dab7c0593 100644
> > --- a/lib/cryptodev/rte_crypto_asym.h
> > +++ b/lib/cryptodev/rte_crypto_asym.h
> > @@ -112,6 +112,8 @@ enum rte_crypto_asym_xform_type {
> >  	/**< Elliptic Curve Digital Signature Algorithm */
> >  	RTE_CRYPTO_ASYM_XFORM_ECPM,
> >  	/**< Elliptic Curve Point Multiplication */
> > +	RTE_CRYPTO_ASYM_XFORM_ECDH,
> > +	/**< Elliptic Curve Diffie Hellman */
> >  	RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END
> >  	/**< End of list */
> >  };
> > @@ -407,6 +409,42 @@ struct rte_crypto_dh_op_param {  };
> >
> >  /**
> > + * Elliptic Curve Diffie-Hellman Operations params.
> > + * @note:
> 
> Note missing?
I will remove note.
> 
> > + */
> > +struct rte_crypto_ecdh_op_param {
> > +	enum rte_crypto_asym_ke_type op_type;
> > +	/**< Key exchange operation type */
> > +	rte_crypto_uint priv_key;
> > +	/**<
> > +	 * Output - generated private key, when xform type is
> > +	 * RTE_CRYPTO_ASYM_KE_PRIVATE_KEY_GENERATE.
> > +	 *
> > +	 * Input - private key, when xform 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 xform 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.
> > +	 */
> 
> You added the above CSRNG thing in pub key for DH and here in priv key?
Should be under priv key.I will change.
> 
> > +	struct rte_crypto_ec_point pub_key;
> > +	/**<
> > +	 * Output - generated public key, when xform type is
> > +	 * RTE_CRYPTO_ASYM_KE_PUBLIC_KEY_GENERATE.
> > +	 *
> > +	 * Input - peer's public key, when xform type is
> > +	 * RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE.
> Shouldn't this be for both  RTE_CRYPTO_ASYM_KE_PUBLIC_KEY_GENERATE and
> RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE
For priv_key yes, not for public.
> 
> > +	 */
> > +	struct rte_crypto_ec_point shared_secret;
> > +	/**<
> > +	 * Output - calculated shared secret when xform type is
> > +	 * RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE.
> > +	 */
> > +};
> > +
> > +/**
> >   * DSA Operations params
> >   *
> >   */
> > --
> > 2.13.6
  

Patch

diff --git a/lib/cryptodev/rte_crypto_asym.h b/lib/cryptodev/rte_crypto_asym.h
index ffb0e8ed17..0dab7c0593 100644
--- a/lib/cryptodev/rte_crypto_asym.h
+++ b/lib/cryptodev/rte_crypto_asym.h
@@ -112,6 +112,8 @@  enum rte_crypto_asym_xform_type {
 	/**< Elliptic Curve Digital Signature Algorithm */
 	RTE_CRYPTO_ASYM_XFORM_ECPM,
 	/**< Elliptic Curve Point Multiplication */
+	RTE_CRYPTO_ASYM_XFORM_ECDH,
+	/**< Elliptic Curve Diffie Hellman */
 	RTE_CRYPTO_ASYM_XFORM_TYPE_LIST_END
 	/**< End of list */
 };
@@ -407,6 +409,42 @@  struct rte_crypto_dh_op_param {
 };
 
 /**
+ * Elliptic Curve Diffie-Hellman Operations params.
+ * @note:
+ */
+struct rte_crypto_ecdh_op_param {
+	enum rte_crypto_asym_ke_type op_type;
+	/**< Key exchange operation type */
+	rte_crypto_uint priv_key;
+	/**<
+	 * Output - generated private key, when xform type is
+	 * RTE_CRYPTO_ASYM_KE_PRIVATE_KEY_GENERATE.
+	 *
+	 * Input - private key, when xform 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 xform 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 xform type is
+	 * RTE_CRYPTO_ASYM_KE_PUBLIC_KEY_GENERATE.
+	 *
+	 * Input - peer's public key, when xform type is
+	 * RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE.
+	 */
+	struct rte_crypto_ec_point shared_secret;
+	/**<
+	 * Output - calculated shared secret when xform type is
+	 * RTE_CRYPTO_ASYM_KE_SHARED_SECRET_COMPUTE.
+	 */
+};
+
+/**
  * DSA Operations params
  *
  */