libwd/0117-uadk-cleanup-issues-of-hpre.patch
Younger 5c995b2464 libwd - update some patches
Update some patches for 2203-SP3 only.

Signed-off-by: Yang Shen <shenyang39@huawei.com>
2024-05-24 09:59:01 +08:00

636 lines
16 KiB
Diff

From a3d3397b5b2c8fe8908519bc7626f5c5678df494 Mon Sep 17 00:00:00 2001
From: Zhiqi Song <songzhiqi1@huawei.com>
Date: Thu, 7 Dec 2023 19:19:03 +0800
Subject: [PATCH 117/123] uadk: cleanup issues of hpre
1. Remove redundant code.
2. Use safer and more efficient method to distinguish
algorithms.
3. Modify return value style.
Signed-off-by: Zhiqi Song <songzhiqi1@huawei.com>
---
drv/hisi_hpre.c | 101 ++++++++++++++++++++++++++++--------------------
wd_dh.c | 16 ++++----
wd_ecc.c | 33 +++++++++-------
wd_rsa.c | 14 +++----
4 files changed, 93 insertions(+), 71 deletions(-)
diff --git a/drv/hisi_hpre.c b/drv/hisi_hpre.c
index 2f8a5d6..53ebe52 100644
--- a/drv/hisi_hpre.c
+++ b/drv/hisi_hpre.c
@@ -39,6 +39,8 @@
#define GEN_PARAMS_SZ(key_size) ((key_size) << 1)
#define CRT_PARAM_SZ(key_size) ((key_size) >> 1)
+#define WD_TRANS_FAIL 0
+
enum hpre_alg_type {
HPRE_ALG_NC_NCRT = 0x0,
HPRE_ALG_NC_CRT = 0x1,
@@ -64,6 +66,12 @@ enum hpre_alg_type {
HPRE_ALG_SM2_DEC = 0x15
};
+enum hpre_alg_name {
+ WD_RSA,
+ WD_DH,
+ WD_ECC
+};
+
/* put vendor hardware message as a user interface is not suitable here */
struct hisi_hpre_sqe {
__u32 alg : 5;
@@ -101,24 +109,34 @@ struct hisi_hpre_ctx {
struct wd_ctx_config_internal config;
};
-static void dump_hpre_msg(void *msg, const char *s)
+static void dump_hpre_msg(void *msg, int alg)
{
struct wd_rsa_msg *rsa_msg;
struct wd_ecc_msg *ecc_msg;
struct wd_dh_msg *dh_msg;
- WD_ERR("dump %s alg message after a task error occurs.\n", s);
-
- if (!strcmp(s, "rsa")) {
+ switch (alg) {
+ case WD_RSA:
rsa_msg = (struct wd_rsa_msg *)msg;
- WD_ERR("key_bytes:%u key_type:%u\n", rsa_msg->key_bytes, rsa_msg->key_type);
- } else if (!strcmp(s, "ecc")) {
- ecc_msg = (struct wd_ecc_msg *)msg;
- WD_ERR("key_bytes:%u curve_id:%u\n", ecc_msg->key_bytes, ecc_msg->curve_id);
- } else if (!strcmp(s, "dh")) {
+ WD_ERR("dump RSA alg message after a task error occurs\n"
+ "key_bytes:%u key_type:%u\n", rsa_msg->key_bytes,
+ rsa_msg->key_type);
+ break;
+ case WD_DH:
dh_msg = (struct wd_dh_msg *)msg;
- WD_ERR("gbytes:%u key_bytes:%u is_g2:%u\n", dh_msg->gbytes,
- dh_msg->key_bytes, dh_msg->is_g2);
+ WD_ERR("dump DH alg message after a task error occurs\n"
+ "gbytes:%u key_bytes:%u is_g2:%u\n", dh_msg->gbytes,
+ dh_msg->key_bytes, dh_msg->is_g2);
+ break;
+ case WD_ECC:
+ ecc_msg = (struct wd_ecc_msg *)msg;
+ WD_ERR("dump ECC alg message after a task error occurs\n"
+ "key_bytes:%u curve_id:%u\n", ecc_msg->key_bytes,
+ ecc_msg->curve_id);
+ break;
+ default:
+ WD_ERR("invalid alg!\n");
+ break;
}
}
@@ -181,7 +199,7 @@ static int hpre_bin_to_crypto_bin(char *dst, const char *src, __u32 b_size,
if (!dst || !src || !b_size) {
WD_ERR("invalid: %s trans to crypto bin parameters err!\n", p_name);
- return 0;
+ return WD_TRANS_FAIL;
}
while (!src[j] && k < (b_size - 1))
@@ -496,7 +514,7 @@ static int hpre_init_qm_priv(struct wd_ctx_config_internal *config,
config->ctxs[i].sqn = qm_priv->sqn;
}
- return 0;
+ return WD_SUCCESS;
out:
for (j = 0; j < i; j++) {
h_qp = (handle_t)wd_ctx_get_priv(config->ctxs[j].ctx);
@@ -523,7 +541,7 @@ static int hpre_rsa_dh_init(void *conf, void *priv)
if (ret)
return ret;
- return 0;
+ return WD_SUCCESS;
}
static int hpre_ecc_init(void *conf, void *priv)
@@ -543,7 +561,7 @@ static int hpre_ecc_init(void *conf, void *priv)
if (ret)
return ret;
- return 0;
+ return WD_SUCCESS;
}
static void hpre_exit(void *priv)
@@ -655,9 +673,9 @@ static int rsa_recv(handle_t ctx, void *rsa_msg)
}
if (unlikely(msg->result != WD_SUCCESS))
- dump_hpre_msg(temp_msg, "rsa");
+ dump_hpre_msg(temp_msg, WD_RSA);
- return 0;
+ return WD_SUCCESS;
}
static int fill_dh_xp_params(struct wd_dh_msg *msg,
@@ -798,9 +816,9 @@ static int dh_recv(handle_t ctx, void *dh_msg)
}
if (unlikely(msg->result != WD_SUCCESS))
- dump_hpre_msg(temp_msg, "dh");
+ dump_hpre_msg(temp_msg, WD_DH);
- return 0;
+ return WD_SUCCESS;
}
static int ecc_prepare_alg(struct wd_ecc_msg *msg,
@@ -841,7 +859,7 @@ static int ecc_prepare_alg(struct wd_ecc_msg *msg,
return -WD_EINVAL;
}
- return 0;
+ return WD_SUCCESS;
}
static int trans_cv_param_to_hpre_bin(struct wd_dtb *p, struct wd_dtb *a,
@@ -976,7 +994,7 @@ static int ecc_prepare_prikey(struct wd_ecc_key *key, void **data, int id)
*data = p->data;
- return 0;
+ return WD_SUCCESS;
}
static int trans_pub_to_hpre_bin(struct wd_ecc_point *pub)
@@ -1017,7 +1035,7 @@ static int ecc_prepare_pubkey(struct wd_ecc_key *key, void **data)
*data = p->data;
- return 0;
+ return WD_SUCCESS;
}
static bool is_prikey_used(__u8 op_type)
@@ -1050,7 +1068,7 @@ static int ecc_prepare_key(struct wd_ecc_msg *msg,
hw_msg->low_key = LW_U32((uintptr_t)data);
hw_msg->hi_key = HI_U32((uintptr_t)data);
- return 0;
+ return WD_SUCCESS;
}
static void ecc_get_io_len(__u32 atype, __u32 hsz, size_t *ilen,
@@ -1146,7 +1164,7 @@ static int ecc_prepare_sign_in(struct wd_ecc_msg *msg,
*data = e->data;
- return 0;
+ return WD_SUCCESS;
}
static int ecc_prepare_verf_in(struct wd_ecc_msg *msg,
@@ -1188,7 +1206,7 @@ static int ecc_prepare_verf_in(struct wd_ecc_msg *msg,
*data = e->data;
- return 0;
+ return WD_SUCCESS;
}
static int sm2_prepare_enc_in(struct wd_ecc_msg *msg,
@@ -1211,7 +1229,7 @@ static int sm2_prepare_enc_in(struct wd_ecc_msg *msg,
hw_msg->sm2_mlen = ein->plaintext.dsize - 1;
*data = k->data;
- return 0;
+ return WD_SUCCESS;
}
static int sm2_prepare_dec_in(struct wd_ecc_msg *msg,
@@ -1235,7 +1253,7 @@ static int sm2_prepare_dec_in(struct wd_ecc_msg *msg,
hw_msg->sm2_mlen = din->c2.dsize - 1;
*data = c1->x.data;
- return 0;
+ return WD_SUCCESS;
}
static int ecc_prepare_dh_gen_in(struct wd_ecc_msg *msg,
@@ -1256,7 +1274,7 @@ static int ecc_prepare_dh_gen_in(struct wd_ecc_msg *msg,
*data = in->x.data;
- return 0;
+ return WD_SUCCESS;
}
static int ecc_prepare_dh_compute_in(struct wd_ecc_msg *msg,
@@ -1278,7 +1296,7 @@ static int ecc_prepare_dh_compute_in(struct wd_ecc_msg *msg,
*data = pbk->x.data;
- return 0;
+ return WD_SUCCESS;
}
static int u_is_in_p(struct wd_ecc_msg *msg)
@@ -1312,7 +1330,7 @@ static int u_is_in_p(struct wd_ecc_msg *msg)
return -WD_EINVAL;
}
- return 0;
+ return WD_SUCCESS;
}
static int ecc_prepare_in(struct wd_ecc_msg *msg,
@@ -1369,7 +1387,7 @@ static int ecc_prepare_dh_out(struct wd_ecc_out *out, void **data)
*data = dh_out->x.data;
- return 0;
+ return WD_SUCCESS;
}
static int ecc_prepare_out(struct wd_ecc_msg *msg, void **data)
@@ -1437,13 +1455,14 @@ static int ecc_prepare_iot(struct wd_ecc_msg *msg,
return ret;
}
+ /* op_type WD_ECDSA_VERIFY and WD_SM2_VERIFY do not need data */
if (!data)
- return 0;
+ return WD_SUCCESS;
hw_msg->low_out = LW_U32((uintptr_t)data);
hw_msg->hi_out = HI_U32((uintptr_t)data);
- return 0;
+ return WD_SUCCESS;
}
static __u32 get_hw_keysz(__u32 ksz)
@@ -1505,7 +1524,7 @@ static int set_param(struct wd_dtb *dst, const struct wd_dtb *src,
memset(dst->data, 0, dst->bsize);
memcpy(dst->data, src->data, src->dsize);
- return 0;
+ return WD_SUCCESS;
}
static int set_prikey(struct wd_ecc_prikey *prikey,
@@ -1571,7 +1590,6 @@ static struct wd_ecc_out *create_ecdh_out(struct wd_ecc_msg *msg)
dh_out->out.y.data = out->data;
dh_out->out.y.dsize = msg->key_bytes;
dh_out->out.y.bsize = hsz;
- out->size = data_sz;
memcpy(out->data + data_sz, &msg, sizeof(void *));
@@ -1598,7 +1616,7 @@ static int init_req(struct wd_ecc_msg *dst, struct wd_ecc_msg *src,
else
dst->req.src = (void *)&pubkey->pub;
- return 0;
+ return WD_SUCCESS;
}
static struct wd_ecc_msg *create_req(struct wd_ecc_msg *src, __u8 req_idx)
@@ -1674,7 +1692,7 @@ static int split_req(struct wd_ecc_msg *src, struct wd_ecc_msg **dst)
return -WD_ENOMEM;
}
- return 0;
+ return WD_SUCCESS;
}
static int ecc_fill(struct wd_ecc_msg *msg, struct hisi_hpre_sqe *hw_msg)
@@ -1914,8 +1932,7 @@ static int ecc_verf_out_transfer(struct wd_ecc_msg *msg,
{
__u32 result = hw_msg->low_out;
- result >>= 1;
- result &= 1;
+ result = (result >> 1) & 1;
if (!result)
msg->result = WD_VERIFY_ERR;
@@ -2115,7 +2132,7 @@ static int is_equal(struct wd_dtb *src, struct wd_dtb *dst)
{
if (src->dsize == dst->dsize &&
!memcmp(src->data, dst->data, src->dsize)) {
- return 0;
+ return WD_SUCCESS;
}
return -WD_EINVAL;
@@ -2296,7 +2313,7 @@ static int ecc_sqe_parse(struct hisi_qp *qp, struct wd_ecc_msg *msg,
return ret;
dump_err_msg:
- dump_hpre_msg(temp_msg, "ecc");
+ dump_hpre_msg(temp_msg, WD_ECC);
return ret;
}
@@ -2449,7 +2466,7 @@ static int ecc_recv(handle_t ctx, void *ecc_msg)
static int hpre_get_usage(void *param)
{
- return 0;
+ return WD_SUCCESS;
}
#define GEN_HPRE_ALG_DRIVER(hpre_alg_name) \
diff --git a/wd_dh.c b/wd_dh.c
index 6bfc0cc..826f40b 100644
--- a/wd_dh.c
+++ b/wd_dh.c
@@ -78,7 +78,7 @@ static int wd_dh_open_driver(void)
wd_dh_setting.driver = driver;
- return 0;
+ return WD_SUCCESS;
}
static void wd_dh_clear_status(void)
@@ -116,7 +116,7 @@ static int wd_dh_common_init(struct wd_ctx_config *config, struct wd_sched *sche
if (ret)
goto out_clear_pool;
- return 0;
+ return WD_SUCCESS;
out_clear_pool:
wd_uninit_async_request_pool(&wd_dh_setting.pool);
@@ -143,7 +143,7 @@ static int wd_dh_common_uninit(void)
wd_dh_setting.driver,
&wd_dh_setting.priv);
- return 0;
+ return WD_SUCCESS;
}
int wd_dh_init(struct wd_ctx_config *config, struct wd_sched *sched)
@@ -170,7 +170,7 @@ int wd_dh_init(struct wd_ctx_config *config, struct wd_sched *sched)
wd_alg_set_init(&wd_dh_setting.status);
- return 0;
+ return WD_SUCCESS;
out_close_driver:
wd_dh_close_driver();
@@ -270,7 +270,7 @@ int wd_dh_init2_(char *alg, __u32 sched_type, int task_type, struct wd_ctx_param
wd_alg_set_init(&wd_dh_setting.status);
wd_ctx_param_uninit(&dh_ctx_params);
- return 0;
+ return WD_SUCCESS;
out_params_uninit:
wd_ctx_param_uninit(&dh_ctx_params);
@@ -326,7 +326,7 @@ static int fill_dh_msg(struct wd_dh_msg *msg, struct wd_dh_req *req,
return -WD_EINVAL;
}
- return 0;
+ return WD_SUCCESS;
}
int wd_do_dh_sync(handle_t sess, struct wd_dh_req *req)
@@ -422,7 +422,7 @@ int wd_do_dh_async(handle_t sess, struct wd_dh_req *req)
if (ret)
goto fail_with_msg;
- return 0;
+ return WD_SUCCESS;
fail_with_msg:
wd_put_msg_to_pool(&wd_dh_setting.pool, idx, mid);
@@ -510,7 +510,7 @@ int wd_dh_get_mode(handle_t sess, __u8 *alg_mode)
*alg_mode = ((struct wd_dh_sess *)sess)->setup.is_g2;
- return 0;
+ return WD_SUCCESS;
}
__u32 wd_dh_key_bits(handle_t sess)
diff --git a/wd_ecc.c b/wd_ecc.c
index 3cdbfdf..97c758c 100644
--- a/wd_ecc.c
+++ b/wd_ecc.c
@@ -132,7 +132,7 @@ static int wd_ecc_open_driver(void)
wd_ecc_setting.driver = driver;
- return 0;
+ return WD_SUCCESS;
}
static bool is_alg_support(const char *alg)
@@ -179,7 +179,7 @@ static int wd_ecc_common_init(struct wd_ctx_config *config, struct wd_sched *sch
if (ret)
goto out_clear_pool;
- return 0;
+ return WD_SUCCESS;
out_clear_pool:
wd_uninit_async_request_pool(&wd_ecc_setting.pool);
@@ -206,7 +206,7 @@ static int wd_ecc_common_uninit(void)
wd_ecc_setting.driver,
&wd_ecc_setting.priv);
- return 0;
+ return WD_SUCCESS;
}
int wd_ecc_init(struct wd_ctx_config *config, struct wd_sched *sched)
@@ -233,7 +233,7 @@ int wd_ecc_init(struct wd_ctx_config *config, struct wd_sched *sched)
wd_alg_set_init(&wd_ecc_setting.status);
- return 0;
+ return WD_SUCCESS;
out_close_driver:
wd_ecc_close_driver();
@@ -335,7 +335,7 @@ int wd_ecc_init2_(char *alg, __u32 sched_type, int task_type, struct wd_ctx_para
wd_alg_set_init(&wd_ecc_setting.status);
wd_ctx_param_uninit(&ecc_ctx_params);
- return 0;
+ return WD_SUCCESS;
out_params_uninit:
wd_ctx_param_uninit(&ecc_ctx_params);
@@ -827,7 +827,7 @@ static int set_param_single(struct wd_dtb *dst, const struct wd_dtb *src,
memset(dst->data, 0, dst->bsize);
memcpy(dst->data, src->data, src->dsize);
- return 0;
+ return WD_SUCCESS;
}
int wd_ecc_get_key_bits(handle_t sess)
@@ -905,7 +905,7 @@ static int set_curve_param(struct wd_ecc_key *key,
return -WD_EINVAL;
}
- return 0;
+ return WD_SUCCESS;
}
static const struct wd_ecc_curve_list *find_curve_list(__u32 id)
@@ -942,7 +942,7 @@ static int fill_param_by_id(struct wd_ecc_curve *c,
key_size = BITS_TO_BYTES(item->key_bits);
memcpy(c->p.data, item->data, CURVE_PARAM_NUM * key_size);
- return 0;
+ return WD_SUCCESS;
}
static void setup_curve_cfg(struct wd_ecc_sess_setup *setup)
@@ -1064,7 +1064,7 @@ static int create_sess_key(struct wd_ecc_sess_setup *setup,
goto free_d;
}
- return 0;
+ return WD_SUCCESS;
free_d:
release_ecc_d(sess);
@@ -1115,7 +1115,7 @@ static int setup_param_check(struct wd_ecc_sess_setup *setup)
return -WD_EINVAL;
}
- return 0;
+ return WD_SUCCESS;
}
static void del_sess_key(struct wd_ecc_sess *sess)
@@ -1627,7 +1627,7 @@ static int set_sign_in_param(struct wd_ecc_sign_in *sin,
return ret;
}
- return 0;
+ return WD_SUCCESS;
}
static int generate_random(struct wd_ecc_sess *sess, struct wd_dtb *k)
@@ -1635,6 +1635,11 @@ static int generate_random(struct wd_ecc_sess *sess, struct wd_dtb *k)
struct wd_rand_mt rand_t = sess->setup.rand;
int ret;
+ if (!rand_t.cb) {
+ WD_ERR("failed to get rand cb!\n");
+ return -WD_EINVAL;
+ }
+
ret = rand_t.cb(k->data, k->dsize, rand_t.usr);
if (ret)
WD_ERR("failed to do rand cb, ret = %d!\n", ret);
@@ -1764,7 +1769,7 @@ static struct wd_ecc_in *new_sign_in(struct wd_ecc_sess *sess,
return NULL;
sin = &ecc_in->param.sin;
- if (!k && sess_t->setup.rand.cb) {
+ if (!k) {
ret = generate_random(sess_t, &sin->k);
if (ret)
goto release_in;
@@ -1826,7 +1831,7 @@ static int set_verf_in_param(struct wd_ecc_verf_in *vin,
if (ret)
return ret;
- return 0;
+ return WD_SUCCESS;
}
static struct wd_ecc_in *create_sm2_verf_in(struct wd_ecc_sess *sess,
@@ -2258,7 +2263,7 @@ int wd_do_ecc_async(handle_t sess, struct wd_ecc_req *req)
if (ret)
goto fail_with_msg;
- return 0;
+ return WD_SUCCESS;
fail_with_msg:
wd_put_msg_to_pool(&wd_ecc_setting.pool, idx, mid);
diff --git a/wd_rsa.c b/wd_rsa.c
index 1424f61..e23e096 100644
--- a/wd_rsa.c
+++ b/wd_rsa.c
@@ -117,7 +117,7 @@ static int wd_rsa_open_driver(void)
wd_rsa_setting.driver = driver;
- return 0;
+ return WD_SUCCESS;
}
static void wd_rsa_clear_status(void)
@@ -154,7 +154,7 @@ static int wd_rsa_common_init(struct wd_ctx_config *config, struct wd_sched *sch
if (ret)
goto out_clear_pool;
- return 0;
+ return WD_SUCCESS;
out_clear_pool:
wd_uninit_async_request_pool(&wd_rsa_setting.pool);
@@ -181,7 +181,7 @@ static int wd_rsa_common_uninit(void)
wd_rsa_setting.driver,
&wd_rsa_setting.priv);
- return 0;
+ return WD_SUCCESS;
}
int wd_rsa_init(struct wd_ctx_config *config, struct wd_sched *sched)
@@ -208,7 +208,7 @@ int wd_rsa_init(struct wd_ctx_config *config, struct wd_sched *sched)
wd_alg_set_init(&wd_rsa_setting.status);
- return 0;
+ return WD_SUCCESS;
out_close_driver:
wd_rsa_close_driver();
@@ -308,7 +308,7 @@ int wd_rsa_init2_(char *alg, __u32 sched_type, int task_type, struct wd_ctx_para
wd_alg_set_init(&wd_rsa_setting.status);
wd_ctx_param_uninit(&rsa_ctx_params);
- return 0;
+ return WD_SUCCESS;
out_params_uninit:
wd_ctx_param_uninit(&rsa_ctx_params);
@@ -385,7 +385,7 @@ static int fill_rsa_msg(struct wd_rsa_msg *msg, struct wd_rsa_req *req,
msg->key = key;
- return 0;
+ return WD_SUCCESS;
}
int wd_do_rsa_sync(handle_t h_sess, struct wd_rsa_req *req)
@@ -481,7 +481,7 @@ int wd_do_rsa_async(handle_t sess, struct wd_rsa_req *req)
if (ret)
goto fail_with_msg;
- return 0;
+ return WD_SUCCESS;
fail_with_msg:
wd_put_msg_to_pool(&wd_rsa_setting.pool, idx, mid);
--
2.31.1.windows.1