Commit 388ade40 authored by Weili Qian's avatar Weili Qian Committed by openeuler-sync-bot
Browse files

crypto: hisilicon/hpre - ensure private key less than n

driver inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I7AUVE


CVE: NA

----------------------------------------------------------------------

The private key of the curve key size generated by stdrng, which may not be
less than n. So the private key with the curve key size minus 1 is
generated to ensure that the private key is less than n.

Signed-off-by: default avatarWeili Qian <qianweili@huawei.com>
Signed-off-by: default avatarJiangShui Yang <yangjiangshui@h-partners.com>
(cherry picked from commit 91c618f0)
parent 4591e909
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -1382,9 +1382,9 @@ static int hpre_ecdh_set_secret(struct crypto_kpp *tfm, const void *buf,
				unsigned int len)
{
	struct hpre_ctx *ctx = kpp_tfm_ctx(tfm);
	unsigned int sz, sz_shift, curve_sz;
	struct device *dev = ctx->dev;
	char key[HPRE_ECC_MAX_KSZ];
	unsigned int sz, sz_shift;
	struct ecdh params;
	int ret;

@@ -1396,7 +1396,13 @@ static int hpre_ecdh_set_secret(struct crypto_kpp *tfm, const void *buf,
	/* Use stdrng to generate private key */
	if (!params.key || !params.key_size) {
		params.key = key;
		params.key_size = hpre_ecdh_get_curvesz(ctx->curve_id);
		curve_sz = hpre_ecdh_get_curvesz(ctx->curve_id);
		if (!curve_sz) {
			dev_err(dev, "Invalid curve size!\n");
			return -EINVAL;
		}

		params.key_size = curve_sz - 1;
		ret = ecdh_gen_privkey(ctx, &params);
		if (ret)
			return ret;