linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Vitaly Chikunov <vt@altlinux.org>
To: "Giovanni Cabiddu" <giovanni.cabiddu@intel.com>,
	qat-linux@intel.com, "Tom Lendacky" <thomas.lendacky@amd.com>,
	"Gary Hook" <gary.hook@amd.com>,
	"Horia Geantă" <horia.geanta@nxp.com>,
	"Aymen Sghaier" <aymen.sghaier@nxp.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
	linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v7 03/11] crypto: rsa - unimplement sign/verify for raw RSA backends
Date: Fri, 22 Mar 2019 22:21:50 +0300	[thread overview]
Message-ID: <20190322192149.5tceia2q6g62p4so@altlinux.org> (raw)
In-Reply-To: <20190301175918.29694-4-vt@altlinux.org>

Giovanni Cabiddu,

  Can you Ack this patch as it includes small change to QAT driver.

Tom Lendacky, Gary Hook,

  Can you Ack this patch as it includes small change to CCP driver.

Horia Geantă, Aymen Sghaier,

  Can you Ack this patch as it includes small change to CAAM driver.

Thanks,

On Fri, Mar 01, 2019 at 08:59:10PM +0300, Vitaly Chikunov wrote:
> In preparation for new akcipher verify call remove sign/verify callbacks
> from RSA backends and make PKCS1 driver call encrypt/decrypt instead.
> 
> This also complies with the well-known idea that raw RSA should never be
> used for sign/verify. It only should be used with proper padding scheme
> such as PKCS1 driver provides.
> 
> Cc: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
> Cc: qat-linux@intel.com
> Cc: Tom Lendacky <thomas.lendacky@amd.com>
> Cc: Gary Hook <gary.hook@amd.com>
> Cc: Horia Geantă <horia.geanta@nxp.com>
> Cc: Aymen Sghaier <aymen.sghaier@nxp.com>
> Signed-off-by: Vitaly Chikunov <vt@altlinux.org>
> ---
>  crypto/rsa-pkcs1pad.c                         |   4 +-
>  crypto/rsa.c                                  | 109 --------------------------
>  drivers/crypto/caam/caampkc.c                 |   2 -
>  drivers/crypto/ccp/ccp-crypto-rsa.c           |   2 -
>  drivers/crypto/qat/qat_common/qat_asym_algs.c |   2 -
>  5 files changed, 2 insertions(+), 117 deletions(-)
> 
> diff --git a/crypto/rsa-pkcs1pad.c b/crypto/rsa-pkcs1pad.c
> index 0a6680ca8cb6..94382fa2c6ac 100644
> --- a/crypto/rsa-pkcs1pad.c
> +++ b/crypto/rsa-pkcs1pad.c
> @@ -429,7 +429,7 @@ static int pkcs1pad_sign(struct akcipher_request *req)
>  	akcipher_request_set_crypt(&req_ctx->child_req, req_ctx->in_sg,
>  				   req->dst, ctx->key_size - 1, req->dst_len);
>  
> -	err = crypto_akcipher_sign(&req_ctx->child_req);
> +	err = crypto_akcipher_decrypt(&req_ctx->child_req);
>  	if (err != -EINPROGRESS && err != -EBUSY)
>  		return pkcs1pad_encrypt_sign_complete(req, err);
>  
> @@ -551,7 +551,7 @@ static int pkcs1pad_verify(struct akcipher_request *req)
>  				   req_ctx->out_sg, req->src_len,
>  				   ctx->key_size);
>  
> -	err = crypto_akcipher_verify(&req_ctx->child_req);
> +	err = crypto_akcipher_encrypt(&req_ctx->child_req);
>  	if (err != -EINPROGRESS && err != -EBUSY)
>  		return pkcs1pad_verify_complete(req, err);
>  
> diff --git a/crypto/rsa.c b/crypto/rsa.c
> index 4167980c243d..5d427c1100d6 100644
> --- a/crypto/rsa.c
> +++ b/crypto/rsa.c
> @@ -50,34 +50,6 @@ static int _rsa_dec(const struct rsa_mpi_key *key, MPI m, MPI c)
>  	return mpi_powm(m, c, key->d, key->n);
>  }
>  
> -/*
> - * RSASP1 function [RFC3447 sec 5.2.1]
> - * s = m^d mod n
> - */
> -static int _rsa_sign(const struct rsa_mpi_key *key, MPI s, MPI m)
> -{
> -	/* (1) Validate 0 <= m < n */
> -	if (mpi_cmp_ui(m, 0) < 0 || mpi_cmp(m, key->n) >= 0)
> -		return -EINVAL;
> -
> -	/* (2) s = m^d mod n */
> -	return mpi_powm(s, m, key->d, key->n);
> -}
> -
> -/*
> - * RSAVP1 function [RFC3447 sec 5.2.2]
> - * m = s^e mod n;
> - */
> -static int _rsa_verify(const struct rsa_mpi_key *key, MPI m, MPI s)
> -{
> -	/* (1) Validate 0 <= s < n */
> -	if (mpi_cmp_ui(s, 0) < 0 || mpi_cmp(s, key->n) >= 0)
> -		return -EINVAL;
> -
> -	/* (2) m = s^e mod n */
> -	return mpi_powm(m, s, key->e, key->n);
> -}
> -
>  static inline struct rsa_mpi_key *rsa_get_key(struct crypto_akcipher *tfm)
>  {
>  	return akcipher_tfm_ctx(tfm);
> @@ -160,85 +132,6 @@ static int rsa_dec(struct akcipher_request *req)
>  	return ret;
>  }
>  
> -static int rsa_sign(struct akcipher_request *req)
> -{
> -	struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
> -	const struct rsa_mpi_key *pkey = rsa_get_key(tfm);
> -	MPI m, s = mpi_alloc(0);
> -	int ret = 0;
> -	int sign;
> -
> -	if (!s)
> -		return -ENOMEM;
> -
> -	if (unlikely(!pkey->n || !pkey->d)) {
> -		ret = -EINVAL;
> -		goto err_free_s;
> -	}
> -
> -	ret = -ENOMEM;
> -	m = mpi_read_raw_from_sgl(req->src, req->src_len);
> -	if (!m)
> -		goto err_free_s;
> -
> -	ret = _rsa_sign(pkey, s, m);
> -	if (ret)
> -		goto err_free_m;
> -
> -	ret = mpi_write_to_sgl(s, req->dst, req->dst_len, &sign);
> -	if (ret)
> -		goto err_free_m;
> -
> -	if (sign < 0)
> -		ret = -EBADMSG;
> -
> -err_free_m:
> -	mpi_free(m);
> -err_free_s:
> -	mpi_free(s);
> -	return ret;
> -}
> -
> -static int rsa_verify(struct akcipher_request *req)
> -{
> -	struct crypto_akcipher *tfm = crypto_akcipher_reqtfm(req);
> -	const struct rsa_mpi_key *pkey = rsa_get_key(tfm);
> -	MPI s, m = mpi_alloc(0);
> -	int ret = 0;
> -	int sign;
> -
> -	if (!m)
> -		return -ENOMEM;
> -
> -	if (unlikely(!pkey->n || !pkey->e)) {
> -		ret = -EINVAL;
> -		goto err_free_m;
> -	}
> -
> -	s = mpi_read_raw_from_sgl(req->src, req->src_len);
> -	if (!s) {
> -		ret = -ENOMEM;
> -		goto err_free_m;
> -	}
> -
> -	ret = _rsa_verify(pkey, m, s);
> -	if (ret)
> -		goto err_free_s;
> -
> -	ret = mpi_write_to_sgl(m, req->dst, req->dst_len, &sign);
> -	if (ret)
> -		goto err_free_s;
> -
> -	if (sign < 0)
> -		ret = -EBADMSG;
> -
> -err_free_s:
> -	mpi_free(s);
> -err_free_m:
> -	mpi_free(m);
> -	return ret;
> -}
> -
>  static void rsa_free_mpi_key(struct rsa_mpi_key *key)
>  {
>  	mpi_free(key->d);
> @@ -353,8 +246,6 @@ static void rsa_exit_tfm(struct crypto_akcipher *tfm)
>  static struct akcipher_alg rsa = {
>  	.encrypt = rsa_enc,
>  	.decrypt = rsa_dec,
> -	.sign = rsa_sign,
> -	.verify = rsa_verify,
>  	.set_priv_key = rsa_set_priv_key,
>  	.set_pub_key = rsa_set_pub_key,
>  	.max_size = rsa_max_size,
> diff --git a/drivers/crypto/caam/caampkc.c b/drivers/crypto/caam/caampkc.c
> index 77ab28a2811a..d7e1fc5bacc5 100644
> --- a/drivers/crypto/caam/caampkc.c
> +++ b/drivers/crypto/caam/caampkc.c
> @@ -994,8 +994,6 @@ static void caam_rsa_exit_tfm(struct crypto_akcipher *tfm)
>  static struct akcipher_alg caam_rsa = {
>  	.encrypt = caam_rsa_enc,
>  	.decrypt = caam_rsa_dec,
> -	.sign = caam_rsa_dec,
> -	.verify = caam_rsa_enc,
>  	.set_pub_key = caam_rsa_set_pub_key,
>  	.set_priv_key = caam_rsa_set_priv_key,
>  	.max_size = caam_rsa_max_size,
> diff --git a/drivers/crypto/ccp/ccp-crypto-rsa.c b/drivers/crypto/ccp/ccp-crypto-rsa.c
> index 05850dfd7940..71e40680c880 100644
> --- a/drivers/crypto/ccp/ccp-crypto-rsa.c
> +++ b/drivers/crypto/ccp/ccp-crypto-rsa.c
> @@ -214,8 +214,6 @@ static void ccp_rsa_exit_tfm(struct crypto_akcipher *tfm)
>  static struct akcipher_alg ccp_rsa_defaults = {
>  	.encrypt = ccp_rsa_encrypt,
>  	.decrypt = ccp_rsa_decrypt,
> -	.sign = ccp_rsa_decrypt,
> -	.verify = ccp_rsa_encrypt,
>  	.set_pub_key = ccp_rsa_setpubkey,
>  	.set_priv_key = ccp_rsa_setprivkey,
>  	.max_size = ccp_rsa_maxsize,
> diff --git a/drivers/crypto/qat/qat_common/qat_asym_algs.c b/drivers/crypto/qat/qat_common/qat_asym_algs.c
> index 320e7854b4ee..c05d03565e96 100644
> --- a/drivers/crypto/qat/qat_common/qat_asym_algs.c
> +++ b/drivers/crypto/qat/qat_common/qat_asym_algs.c
> @@ -1300,8 +1300,6 @@ static void qat_rsa_exit_tfm(struct crypto_akcipher *tfm)
>  static struct akcipher_alg rsa = {
>  	.encrypt = qat_rsa_enc,
>  	.decrypt = qat_rsa_dec,
> -	.sign = qat_rsa_dec,
> -	.verify = qat_rsa_enc,
>  	.set_pub_key = qat_rsa_setpubkey,
>  	.set_priv_key = qat_rsa_setprivkey,
>  	.max_size = qat_rsa_max_size,
> -- 
> 2.11.0

  reply	other threads:[~2019-03-22 19:21 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-01 17:59 [PATCH v7 00/11] crypto: add EC-RDSA (GOST 34.10) algorithm Vitaly Chikunov
2019-03-01 17:59 ` [PATCH v7 01/11] KEYS: report to keyctl only actually supported key ops Vitaly Chikunov
2019-03-01 17:59 ` [PATCH v7 02/11] crypto: akcipher - check the presence of callback before the call Vitaly Chikunov
2019-03-21 11:19   ` Herbert Xu
2019-03-21 11:42     ` Vitaly Chikunov
2019-03-21 12:11       ` Herbert Xu
2019-03-01 17:59 ` [PATCH v7 03/11] crypto: rsa - unimplement sign/verify for raw RSA backends Vitaly Chikunov
2019-03-22 19:21   ` Vitaly Chikunov [this message]
2019-03-22 20:27     ` Gary R Hook
2019-03-22 22:41   ` Horia Geanta
2019-03-01 17:59 ` [PATCH v7 04/11] crypto: akcipher - new verify API for public key algorithms Vitaly Chikunov
2019-03-01 17:59 ` [PATCH v7 05/11] KEYS: do not kmemdup digest in {public,tpm}_key_verify_signature Vitaly Chikunov
2019-03-22 19:49   ` Vitaly Chikunov
2019-03-01 17:59 ` [PATCH v7 06/11] X.509: parse public key parameters from x509 for akcipher Vitaly Chikunov
2019-03-22 19:42   ` Vitaly Chikunov
2019-03-01 17:59 ` [PATCH v7 07/11] crypto: Kconfig - create Public-key cryptography section Vitaly Chikunov
2019-03-01 17:59 ` [PATCH v7 08/11] crypto: ecc - make ecc into separate module Vitaly Chikunov
2019-03-01 17:59 ` [PATCH v7 09/11] crypto: ecrdsa - add EC-RDSA (GOST 34.10) algorithm Vitaly Chikunov
2019-03-01 17:59 ` [PATCH v7 10/11] crypto: ecrdsa - add EC-RDSA test vectors to testmgr Vitaly Chikunov
2019-03-01 17:59 ` [PATCH v7 11/11] integrity: support EC-RDSA signatures for asymmetric_verify Vitaly Chikunov
2019-03-22 19:15   ` Vitaly Chikunov
2019-03-22 12:39 ` [PATCH v7 00/11] crypto: add EC-RDSA (GOST 34.10) algorithm Herbert Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190322192149.5tceia2q6g62p4so@altlinux.org \
    --to=vt@altlinux.org \
    --cc=aymen.sghaier@nxp.com \
    --cc=gary.hook@amd.com \
    --cc=giovanni.cabiddu@intel.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=horia.geanta@nxp.com \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=qat-linux@intel.com \
    --cc=thomas.lendacky@amd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).