1808 lines
56 KiB
Diff
1808 lines
56 KiB
Diff
From 39c35271759ee04a3509c058bc587ecce2d2db50 Mon Sep 17 00:00:00 2001
|
||
From: JiangShui <1175135535@qq.com>
|
||
Date: Fri, 4 Aug 2023 10:51:48 +0800
|
||
Subject: [PATCH] Backport uadk engine patch for v1.0.1
|
||
|
||
---
|
||
...the-full-mac-buffer-length-as-doing-.patch | 74 +++
|
||
0059-uadk_utils-fix-x86-local-build.patch | 59 ++
|
||
...-about-segfault-in-sm2-ctrl-function.patch | 188 ++++++
|
||
...HW_V2-HW_V3-to-distinguish-different.patch | 142 +++++
|
||
...te-the-numa-parameter-of-the-schedul.patch | 73 +++
|
||
...bugfix-side-effects-of-right-operand.patch | 205 +++++++
|
||
...nup-static-check-warning-of-clangtid.patch | 118 ++++
|
||
...e-bugfix-enable-environment-variable.patch | 38 ++
|
||
...ne-cleanup-magic-number-and-comments.patch | 537 ++++++++++++++++++
|
||
0067-uadk_engine-cleanup-header-file.patch | 250 ++++++++
|
||
uadk_engine.spec | 13 +
|
||
11 files changed, 1697 insertions(+)
|
||
create mode 100644 0058-uadk_digest-fix-the-full-mac-buffer-length-as-doing-.patch
|
||
create mode 100644 0059-uadk_utils-fix-x86-local-build.patch
|
||
create mode 100644 0060-sm2-bugfix-about-segfault-in-sm2-ctrl-function.patch
|
||
create mode 100644 0061-uadk_engine-use-HW_V2-HW_V3-to-distinguish-different.patch
|
||
create mode 100644 0062-uadk-engine-update-the-numa-parameter-of-the-schedul.patch
|
||
create mode 100644 0063-uadk_engine-bugfix-side-effects-of-right-operand.patch
|
||
create mode 100644 0064-uadk_engine-cleanup-static-check-warning-of-clangtid.patch
|
||
create mode 100644 0065-uadk_engine-bugfix-enable-environment-variable.patch
|
||
create mode 100644 0066-uadk_engine-cleanup-magic-number-and-comments.patch
|
||
create mode 100644 0067-uadk_engine-cleanup-header-file.patch
|
||
|
||
diff --git a/0058-uadk_digest-fix-the-full-mac-buffer-length-as-doing-.patch b/0058-uadk_digest-fix-the-full-mac-buffer-length-as-doing-.patch
|
||
new file mode 100644
|
||
index 0000000..b19486b
|
||
--- /dev/null
|
||
+++ b/0058-uadk_digest-fix-the-full-mac-buffer-length-as-doing-.patch
|
||
@@ -0,0 +1,74 @@
|
||
+From 36ea42a1d9556e937be5ebf47f41f66b51a29cb6 Mon Sep 17 00:00:00 2001
|
||
+From: Kai Ye <yekai13@huawei.com>
|
||
+Date: Tue, 16 Aug 2022 09:57:18 +0800
|
||
+Subject: uadk_digest: fix the full mac buffer length as doing long hash
|
||
+
|
||
+Sha224 and Sha384 need full length mac buffer as doing long hash.
|
||
+
|
||
+Depends-on:uadk 802878d71999("digest: fix mac buffer len as long hash")
|
||
+Signed-off-by: Kai Ye <yekai13@huawei.com>
|
||
+---
|
||
+ src/uadk_digest.c | 25 +++++++++++++++++++++++--
|
||
+ 1 file changed, 23 insertions(+), 2 deletions(-)
|
||
+
|
||
+diff --git a/src/uadk_digest.c b/src/uadk_digest.c
|
||
+index b2646cb..63887e7 100644
|
||
+--- a/src/uadk_digest.c
|
||
++++ b/src/uadk_digest.c
|
||
+@@ -484,7 +484,7 @@ static void digest_priv_ctx_setup(struct digest_priv_ctx *priv,
|
||
+ {
|
||
+ priv->setup.alg = alg;
|
||
+ priv->setup.mode = mode;
|
||
+- priv->req.out_buf_bytes = out_len;
|
||
++ priv->req.out_buf_bytes = MAX_DIGEST_LENGTH;
|
||
+ priv->req.out_bytes = out_len;
|
||
+ }
|
||
+
|
||
+@@ -543,15 +543,30 @@ soft_init:
|
||
+ return digest_soft_init(priv->soft_ctx, priv->e_nid);
|
||
+ }
|
||
+
|
||
++static void digest_update_out_length(EVP_MD_CTX *ctx)
|
||
++{
|
||
++ struct digest_priv_ctx *priv =
|
||
++ (struct digest_priv_ctx *)EVP_MD_CTX_md_data(ctx);
|
||
++
|
||
++ /* Sha224 and Sha384 need full length mac buffer as doing long hash */
|
||
++ if (priv->e_nid == NID_sha224)
|
||
++ priv->req.out_bytes = WD_DIGEST_SHA224_FULL_LEN;
|
||
++
|
||
++ if (priv->e_nid == NID_sha384)
|
||
++ priv->req.out_bytes = WD_DIGEST_SHA384_FULL_LEN;
|
||
++}
|
||
++
|
||
+ static int digest_update_inner(EVP_MD_CTX *ctx, const void *data, size_t data_len)
|
||
+ {
|
||
+ struct digest_priv_ctx *priv =
|
||
+- (struct digest_priv_ctx *) EVP_MD_CTX_md_data(ctx);
|
||
++ (struct digest_priv_ctx *)EVP_MD_CTX_md_data(ctx);
|
||
+ const unsigned char *tmpdata = (const unsigned char *)data;
|
||
+ size_t left_len = data_len;
|
||
+ int copy_to_bufflen;
|
||
+ int ret;
|
||
+
|
||
++ digest_update_out_length(ctx);
|
||
++
|
||
+ priv->req.has_next = DIGEST_DOING;
|
||
+
|
||
+ while (priv->last_update_bufflen + left_len > DIGEST_BLOCK_SIZE) {
|
||
+@@ -708,6 +723,12 @@ static int uadk_e_digest_final(EVP_MD_CTX *ctx, unsigned char *digest)
|
||
+ priv->req.in_bytes = priv->last_update_bufflen;
|
||
+ priv->e_nid = EVP_MD_nid(EVP_MD_CTX_md(ctx));
|
||
+
|
||
++ if (priv->e_nid == NID_sha224)
|
||
++ priv->req.out_bytes = WD_DIGEST_SHA224_LEN;
|
||
++
|
||
++ if (priv->e_nid == NID_sha384)
|
||
++ priv->req.out_bytes = WD_DIGEST_SHA384_LEN;
|
||
++
|
||
+ ret = async_setup_async_event_notification(&op);
|
||
+ if (unlikely(!ret)) {
|
||
+ fprintf(stderr, "failed to setup async event notification.\n");
|
||
+--
|
||
+1.8.3.1
|
||
+
|
||
diff --git a/0059-uadk_utils-fix-x86-local-build.patch b/0059-uadk_utils-fix-x86-local-build.patch
|
||
new file mode 100644
|
||
index 0000000..e8673e6
|
||
--- /dev/null
|
||
+++ b/0059-uadk_utils-fix-x86-local-build.patch
|
||
@@ -0,0 +1,59 @@
|
||
+From 06fd1fe00a03bfbc7430ec8e1b1f7356f47da55d Mon Sep 17 00:00:00 2001
|
||
+From: Zhangfei Gao <zhangfei.gao@linaro.org>
|
||
+Date: Tue, 18 Oct 2022 15:39:11 +0800
|
||
+Subject: uadk_utils: fix x86 local build
|
||
+MIME-Version: 1.0
|
||
+Content-Type: text/plain; charset=UTF-8
|
||
+Content-Transfer-Encoding: 8bit
|
||
+
|
||
+On x86 local build:
|
||
+autoreconf -i
|
||
+./configure --libdir=/usr/local/lib/engines-1.1/
|
||
+make -j4
|
||
+
|
||
+uadk_utils.c: In function ‘uadk_memcpy’:
|
||
+uadk_utils.c:23:2: error: unknown register name ‘q1’ in ‘asm’
|
||
+ __asm__ __volatile__(
|
||
+ ^
|
||
+uadk_utils.c:23:2: error: unknown register name ‘q0’ in ‘asm’
|
||
+uadk_utils.c:23:2: error: unknown register name ‘x14’ in ‘asm’
|
||
+uadk_utils.c:23:2: error: unknown register name ‘x5’ in ‘asm’
|
||
+uadk_utils.c:23:2: error: unknown register name ‘x4’ in ‘asm’
|
||
+uadk_utils.c:23:2: error: unknown register name ‘x3’ in ‘asm’
|
||
+
|
||
+With this patch, x86 build is OK
|
||
+
|
||
+Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org>
|
||
+---
|
||
+ src/uadk_utils.c | 11 +++++++++++
|
||
+ 1 file changed, 11 insertions(+)
|
||
+
|
||
+diff --git a/src/uadk_utils.c b/src/uadk_utils.c
|
||
+index 2b34b3a..275a124 100644
|
||
+--- a/src/uadk_utils.c
|
||
++++ b/src/uadk_utils.c
|
||
+@@ -16,6 +16,8 @@
|
||
+ */
|
||
+ #include "uadk_utils.h"
|
||
+
|
||
++#if defined(__AARCH64_CMODEL_SMALL__) && __AARCH64_CMODEL_SMALL__
|
||
++
|
||
+ #define UADK_MEM_IMPROVE_THRESHOLD 1024
|
||
+
|
||
+ static void *memcpy_large(void *dstpp, const void *srcpp, size_t len)
|
||
+@@ -61,3 +63,12 @@ void *uadk_memcpy(void *dstpp, const void *srcpp, size_t len)
|
||
+ else
|
||
+ return memcpy(dstpp, srcpp, len);
|
||
+ }
|
||
++
|
||
++#else
|
||
++
|
||
++void *uadk_memcpy(void *dstpp, const void *srcpp, size_t len)
|
||
++{
|
||
++ return memcpy(dstpp, srcpp, len);
|
||
++}
|
||
++
|
||
++#endif
|
||
+--
|
||
+1.8.3.1
|
||
+
|
||
diff --git a/0060-sm2-bugfix-about-segfault-in-sm2-ctrl-function.patch b/0060-sm2-bugfix-about-segfault-in-sm2-ctrl-function.patch
|
||
new file mode 100644
|
||
index 0000000..8e0b7e3
|
||
--- /dev/null
|
||
+++ b/0060-sm2-bugfix-about-segfault-in-sm2-ctrl-function.patch
|
||
@@ -0,0 +1,188 @@
|
||
+From 8c4f478b1e8965e592467be92d042c8b00c8c426 Mon Sep 17 00:00:00 2001
|
||
+From: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+Date: Sat, 22 Oct 2022 15:14:03 +0800
|
||
+Subject: sm2: bugfix about segfault in sm2 ctrl function
|
||
+
|
||
+When there is no available instance of hpre device, the sm2_init()
|
||
+in uadk_engine will failed, the setting of sched_init() will failed,
|
||
+so sched_init() will be NULL. If the sm2_ctrl() function still call
|
||
+the sm2_update_sess() in this situation, and make wd_ecc_alloc_sess()
|
||
+to call sched_init(), there will be a segfault.
|
||
+
|
||
+The solution is to modify the status field of sm2_ctx, make the
|
||
+variable 'init_status' to indicate the status of init operation:
|
||
+'CTX_UNINIT' indicates the init operation has not been performed,
|
||
+'CTX_INIT_SUCC' indicates the init operation has been succeeded,
|
||
+'CTX_INIT_FAIL' indicates the init operation has been failed.
|
||
+
|
||
+The sm2_update_sess() will only be called if the 'init_status' is
|
||
+'CTX_INIT_SUCC'. Then there will be no segfault.
|
||
+
|
||
+And when there is no available instance, it should switch to openssl
|
||
+software method, so modify some return values to help finish this
|
||
+process.
|
||
+
|
||
+Signed-off-by: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+---
|
||
+ src/uadk_sm2.c | 44 ++++++++++++++++++++++++++++++++------------
|
||
+ 1 file changed, 32 insertions(+), 12 deletions(-)
|
||
+
|
||
+diff --git a/src/uadk_sm2.c b/src/uadk_sm2.c
|
||
+index fcca9f2..8a9adca 100644
|
||
+--- a/src/uadk_sm2.c
|
||
++++ b/src/uadk_sm2.c
|
||
+@@ -25,6 +25,12 @@
|
||
+ #include "uadk.h"
|
||
+ #include "uadk_pkey.h"
|
||
+
|
||
++enum {
|
||
++ CTX_INIT_FAIL = -1,
|
||
++ CTX_UNINIT,
|
||
++ CTX_INIT_SUCC
|
||
++};
|
||
++
|
||
+ typedef struct {
|
||
+ /* Key and paramgen group */
|
||
+ EC_GROUP *gen_group;
|
||
+@@ -43,7 +49,7 @@ struct sm2_ctx {
|
||
+ const BIGNUM *prikey;
|
||
+ const EC_POINT *pubkey;
|
||
+ BIGNUM *order;
|
||
+- bool is_init;
|
||
++ int init_status;
|
||
+ };
|
||
+
|
||
+ typedef struct sm2_ciphertext {
|
||
+@@ -165,6 +171,7 @@ static int sm2_update_sess(struct sm2_ctx *smctx)
|
||
+
|
||
+ memset(&setup, 0, sizeof(setup));
|
||
+ setup.alg = "sm2";
|
||
++
|
||
+ if (smctx->ctx.md) {
|
||
+ setup.hash.cb = compute_hash;
|
||
+ setup.hash.usr = (void *)smctx->ctx.md;
|
||
+@@ -189,6 +196,7 @@ static int sm2_update_sess(struct sm2_ctx *smctx)
|
||
+
|
||
+ if (smctx->sess)
|
||
+ wd_ecc_free_sess(smctx->sess);
|
||
++
|
||
+ smctx->sess = sess;
|
||
+ smctx->prikey = NULL;
|
||
+ smctx->pubkey = NULL;
|
||
+@@ -636,7 +644,7 @@ static int sm2_sign_check(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
|
||
+
|
||
+ if (!smctx || !smctx->sess) {
|
||
+ fprintf(stderr, "smctx or sess NULL\n");
|
||
+- return -EINVAL;
|
||
++ return UADK_DO_SOFT;
|
||
+ }
|
||
+
|
||
+ if (sig_sz <= 0) {
|
||
+@@ -676,7 +684,7 @@ static int sm2_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
|
||
+ if (ret)
|
||
+ goto do_soft;
|
||
+
|
||
+- if (!smctx->is_init) {
|
||
++ if (smctx->init_status != CTX_INIT_SUCC) {
|
||
+ ret = UADK_DO_SOFT;
|
||
+ goto do_soft;
|
||
+ }
|
||
+@@ -744,6 +752,13 @@ static int sm2_verify_check(EVP_PKEY_CTX *ctx,
|
||
+ const unsigned char *tbs,
|
||
+ size_t tbslen)
|
||
+ {
|
||
++ struct sm2_ctx *smctx = EVP_PKEY_CTX_get_data(ctx);
|
||
++
|
||
++ if (!smctx || !smctx->sess) {
|
||
++ fprintf(stderr, "smctx or sess NULL\n");
|
||
++ return UADK_DO_SOFT;
|
||
++ }
|
||
++
|
||
+ if (tbslen > SM2_KEY_BYTES)
|
||
+ return UADK_DO_SOFT;
|
||
+
|
||
+@@ -772,7 +787,7 @@ static int sm2_verify(EVP_PKEY_CTX *ctx,
|
||
+ if (ret)
|
||
+ goto do_soft;
|
||
+
|
||
+- if (!smctx->is_init) {
|
||
++ if (smctx->init_status != CTX_INIT_SUCC) {
|
||
+ ret = UADK_DO_SOFT;
|
||
+ goto do_soft;
|
||
+ }
|
||
+@@ -853,7 +868,7 @@ static int sm2_encrypt_check(EVP_PKEY_CTX *ctx,
|
||
+
|
||
+ if (!smctx || !smctx->sess) {
|
||
+ fprintf(stderr, "smctx or sess NULL\n");
|
||
+- return 0;
|
||
++ return UADK_DO_SOFT;
|
||
+ }
|
||
+
|
||
+ md = (smctx->ctx.md == NULL) ? EVP_sm3() : smctx->ctx.md;
|
||
+@@ -897,7 +912,7 @@ static int sm2_encrypt(EVP_PKEY_CTX *ctx,
|
||
+ if (ret)
|
||
+ goto do_soft;
|
||
+
|
||
+- if (!smctx->is_init) {
|
||
++ if (smctx->init_status != CTX_INIT_SUCC) {
|
||
+ ret = UADK_DO_SOFT;
|
||
+ goto do_soft;
|
||
+ }
|
||
+@@ -953,7 +968,7 @@ static int sm2_decrypt_check(EVP_PKEY_CTX *ctx,
|
||
+
|
||
+ if (!smctx || !smctx->sess) {
|
||
+ fprintf(stderr, "smctx or sess NULL\n");
|
||
+- return -EINVAL;
|
||
++ return UADK_DO_SOFT;
|
||
+ }
|
||
+
|
||
+ md = (smctx->ctx.md == NULL) ? EVP_sm3() : smctx->ctx.md;
|
||
+@@ -1038,7 +1053,7 @@ static int sm2_decrypt(EVP_PKEY_CTX *ctx,
|
||
+ if (ret)
|
||
+ goto do_soft;
|
||
+
|
||
+- if (!smctx->is_init) {
|
||
++ if (smctx->init_status != CTX_INIT_SUCC) {
|
||
+ ret = UADK_DO_SOFT;
|
||
+ goto do_soft;
|
||
+ }
|
||
+@@ -1124,18 +1139,18 @@ static int sm2_init(EVP_PKEY_CTX *ctx)
|
||
+ ret = uadk_init_ecc();
|
||
+ if (ret) {
|
||
+ fprintf(stderr, "failed to uadk_init_ecc, ret = %d\n", ret);
|
||
+- smctx->is_init = false;
|
||
++ smctx->init_status = CTX_INIT_FAIL;
|
||
+ goto end;
|
||
+ }
|
||
+
|
||
+ ret = sm2_update_sess(smctx);
|
||
+ if (ret) {
|
||
+ fprintf(stderr, "failed to update sess\n");
|
||
+- smctx->is_init = false;
|
||
++ smctx->init_status = CTX_INIT_FAIL;
|
||
+ goto end;
|
||
+ }
|
||
+
|
||
+- smctx->is_init = true;
|
||
++ smctx->init_status = CTX_INIT_SUCC;
|
||
+ end:
|
||
+ EVP_PKEY_CTX_set_data(ctx, smctx);
|
||
+ EVP_PKEY_CTX_set0_keygen_info(ctx, NULL, 0);
|
||
+@@ -1196,8 +1211,13 @@ static int sm2_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
|
||
+ return 1;
|
||
+ case EVP_PKEY_CTRL_MD:
|
||
+ smctx->ctx.md = p2;
|
||
+- if (sm2_update_sess(smctx))
|
||
++ if (smctx->init_status != CTX_INIT_SUCC)
|
||
++ return 1;
|
||
++
|
||
++ if (sm2_update_sess(smctx)) {
|
||
++ fprintf(stderr, "failed to set MD\n");
|
||
+ return 0;
|
||
++ }
|
||
+ return 1;
|
||
+ case EVP_PKEY_CTRL_GET_MD:
|
||
+ *(const EVP_MD **)p2 = smctx->ctx.md;
|
||
+--
|
||
+1.8.3.1
|
||
+
|
||
diff --git a/0061-uadk_engine-use-HW_V2-HW_V3-to-distinguish-different.patch b/0061-uadk_engine-use-HW_V2-HW_V3-to-distinguish-different.patch
|
||
new file mode 100644
|
||
index 0000000..55ab785
|
||
--- /dev/null
|
||
+++ b/0061-uadk_engine-use-HW_V2-HW_V3-to-distinguish-different.patch
|
||
@@ -0,0 +1,142 @@
|
||
+From e34a0bb0cc5c381f45877e05d927fd4bc5dc98f6 Mon Sep 17 00:00:00 2001
|
||
+From: Hao Fang <fanghao11@huawei.com>
|
||
+Date: Sat, 22 Oct 2022 15:27:20 +0800
|
||
+Subject: uadk_engine: use HW_V2/HW_V3 to distinguish different hardware
|
||
+ platforms
|
||
+
|
||
+Hardware version numbers are used to distinguish different hardware.
|
||
+
|
||
+Signed-off-by: Hao Fang <fanghao11@huawei.com>
|
||
+Tested-by: Junchong Pan <panjunchong@hisilicon.com>
|
||
+---
|
||
+ src/uadk.h | 4 ++--
|
||
+ src/uadk_cipher.c | 22 +++++++++++-----------
|
||
+ test/sanity_test.sh | 8 ++++----
|
||
+ 3 files changed, 17 insertions(+), 17 deletions(-)
|
||
+
|
||
+diff --git a/src/uadk.h b/src/uadk.h
|
||
+index cd3447c..99c65c7 100644
|
||
+--- a/src/uadk.h
|
||
++++ b/src/uadk.h
|
||
+@@ -27,8 +27,8 @@
|
||
+ #define ENGINE_RECV_MAX_CNT 60000000
|
||
+
|
||
+ enum {
|
||
+- KUNPENG920,
|
||
+- KUNPENG930,
|
||
++ HW_V2,
|
||
++ HW_V3,
|
||
+ };
|
||
+
|
||
+ extern const char *engine_uadk_id;
|
||
+diff --git a/src/uadk_cipher.c b/src/uadk_cipher.c
|
||
+index c5bc7af..c6878c3 100644
|
||
+--- a/src/uadk_cipher.c
|
||
++++ b/src/uadk_cipher.c
|
||
+@@ -77,7 +77,7 @@ static int platform;
|
||
+
|
||
+ #define SMALL_PACKET_OFFLOAD_THRESHOLD_DEFAULT 192
|
||
+
|
||
+-static int cipher_920_nids[] = {
|
||
++static int cipher_hw_v2_nids[] = {
|
||
+ NID_aes_128_cbc,
|
||
+ NID_aes_192_cbc,
|
||
+ NID_aes_256_cbc,
|
||
+@@ -93,7 +93,7 @@ static int cipher_920_nids[] = {
|
||
+ 0,
|
||
+ };
|
||
+
|
||
+-static int cipher_930_nids[] = {
|
||
++static int cipher_hw_v3_nids[] = {
|
||
+ NID_aes_128_cbc,
|
||
+ NID_aes_192_cbc,
|
||
+ NID_aes_256_cbc,
|
||
+@@ -342,9 +342,9 @@ static int uadk_get_accel_platform(char *alg_name)
|
||
+ return 0;
|
||
+
|
||
+ if (!strcmp(dev->api, "hisi_qm_v2"))
|
||
+- platform = KUNPENG920;
|
||
++ platform = HW_V2;
|
||
+ else
|
||
+- platform = KUNPENG930;
|
||
++ platform = HW_V3;
|
||
+ free(dev);
|
||
+
|
||
+ return 1;
|
||
+@@ -358,12 +358,12 @@ static int uadk_e_engine_ciphers(ENGINE *e, const EVP_CIPHER **cipher,
|
||
+ int size;
|
||
+ int i;
|
||
+
|
||
+- if (platform == KUNPENG920) {
|
||
+- size = (sizeof(cipher_920_nids) - 1) / sizeof(int);
|
||
+- cipher_nids = cipher_920_nids;
|
||
++ if (platform == HW_V2) {
|
||
++ size = (sizeof(cipher_hw_v2_nids) - 1) / sizeof(int);
|
||
++ cipher_nids = cipher_hw_v2_nids;
|
||
+ } else {
|
||
+- size = (sizeof(cipher_930_nids) - 1) / sizeof(int);
|
||
+- cipher_nids = cipher_930_nids;
|
||
++ size = (sizeof(cipher_hw_v3_nids) - 1) / sizeof(int);
|
||
++ cipher_nids = cipher_hw_v3_nids;
|
||
+ }
|
||
+
|
||
+ if (!cipher) {
|
||
+@@ -1073,7 +1073,7 @@ int uadk_e_bind_cipher(ENGINE *e)
|
||
+ }
|
||
+
|
||
+ bind_v2_cipher();
|
||
+- if (platform > KUNPENG920)
|
||
++ if (platform > HW_V2)
|
||
+ bind_v3_cipher();
|
||
+
|
||
+ return ENGINE_set_ciphers(e, uadk_e_engine_ciphers);
|
||
+@@ -1155,7 +1155,7 @@ void uadk_e_destroy_cipher(void)
|
||
+ pthread_spin_destroy(&engine.lock);
|
||
+
|
||
+ destroy_v2_cipher();
|
||
+- if (platform > KUNPENG920)
|
||
++ if (platform > HW_V2)
|
||
+ destroy_v3_cipher();
|
||
+ }
|
||
+
|
||
+diff --git a/test/sanity_test.sh b/test/sanity_test.sh
|
||
+index 2c0c504..bdedc15 100755
|
||
+--- a/test/sanity_test.sh
|
||
++++ b/test/sanity_test.sh
|
||
+@@ -103,7 +103,7 @@ if [[ $algs =~ "RSA" ]]; then
|
||
+ openssl speed -elapsed -engine $engine_id -async_jobs 1 rsa4096
|
||
+ fi
|
||
+
|
||
+-#ecdsa only supported in Kunpeng930 or later
|
||
++#ecdsa only supported in HW_V3 or later
|
||
+ if [[ $algs =~ "id-ecPublicKey" ]]; then
|
||
+ echo "testing ECDSA"
|
||
+ openssl speed -elapsed -engine $engine_id ecdsap224
|
||
+@@ -116,21 +116,21 @@ if [[ $algs =~ "id-ecPublicKey" ]]; then
|
||
+ openssl speed -elapsed -engine $engine_id -async_jobs 1 ecdsap521
|
||
+ fi
|
||
+
|
||
+-#X25519 only supported in Kunpeng930 or later
|
||
++#X25519 only supported in HW_V3 or later
|
||
+ if [[ $algs =~ "X25519" ]]; then
|
||
+ echo "testing X25519"
|
||
+ openssl speed -elapsed -engine $engine_id ecdhx25519
|
||
+ openssl speed -elapsed -engine $engine_id -async_jobs 1 ecdhx25519
|
||
+ fi
|
||
+
|
||
+-#X448 only supported in Kunpeng930 or later
|
||
++#X448 only supported in HW_V3 or later
|
||
+ if [[ $algs =~ "X448" ]]; then
|
||
+ echo "testing X448"
|
||
+ openssl speed -elapsed -engine $engine_id ecdhx448
|
||
+ openssl speed -elapsed -engine $engine_id -async_jobs 1 ecdhx448
|
||
+ fi
|
||
+
|
||
+-#ecdh only supported in Kunpeng930 or later
|
||
++#ecdh only supported in HW_V3 or later
|
||
+ if [[ $algs =~ "id-ecPublicKey" ]]; then
|
||
+ echo "testing ECDH"
|
||
+ openssl speed -elapsed -engine $engine_id ecdhp192
|
||
+--
|
||
+1.8.3.1
|
||
+
|
||
diff --git a/0062-uadk-engine-update-the-numa-parameter-of-the-schedul.patch b/0062-uadk-engine-update-the-numa-parameter-of-the-schedul.patch
|
||
new file mode 100644
|
||
index 0000000..1c5a5d9
|
||
--- /dev/null
|
||
+++ b/0062-uadk-engine-update-the-numa-parameter-of-the-schedul.patch
|
||
@@ -0,0 +1,73 @@
|
||
+From 01580bb856fe7a2206990954b38d8213efd06098 Mon Sep 17 00:00:00 2001
|
||
+From: Longfang Liu <liulongfang@huawei.com>
|
||
+Date: Sat, 22 Oct 2022 15:31:24 +0800
|
||
+Subject: uadk/engine: update the numa parameter of the scheduler
|
||
+
|
||
+In the scenario where multiple devices are enabled at the
|
||
+same time through environment variables, fixing a numa id
|
||
+will make other devices unusable. When using the default
|
||
+numa parameter, the scheduler will automatically allocate
|
||
+device resources according to the CPU id of the thread,
|
||
+so as to realize all devices.
|
||
+
|
||
+Signed-off-by: Longfang Liu <liulongfang@huawei.com>
|
||
+---
|
||
+ src/uadk_cipher.c | 4 ++--
|
||
+ src/uadk_digest.c | 3 ++-
|
||
+ src/uadk_rsa.c | 4 +++-
|
||
+ 3 files changed, 7 insertions(+), 4 deletions(-)
|
||
+
|
||
+diff --git a/src/uadk_cipher.c b/src/uadk_cipher.c
|
||
+index c6878c3..8e8c5f3 100644
|
||
+--- a/src/uadk_cipher.c
|
||
++++ b/src/uadk_cipher.c
|
||
+@@ -469,7 +469,6 @@ static handle_t sched_single_init(handle_t h_sched_ctx, void *sched_param)
|
||
+ return (handle_t)0;
|
||
+ }
|
||
+
|
||
+- skey->numa_id = param->numa_id;
|
||
+ skey->type = param->type;
|
||
+
|
||
+ return (handle_t)skey;
|
||
+@@ -881,7 +880,8 @@ static void uadk_e_ctx_init(EVP_CIPHER_CTX *ctx, struct cipher_priv_ctx *priv)
|
||
+ if (ret)
|
||
+ params.type = 0;
|
||
+
|
||
+- params.numa_id = engine.numa_id;
|
||
++ /* Use the default numa parameters */
|
||
++ params.numa_id = -1;
|
||
+ priv->setup.sched_param = ¶ms;
|
||
+ if (!priv->sess) {
|
||
+ priv->sess = wd_cipher_alloc_sess(&priv->setup);
|
||
+diff --git a/src/uadk_digest.c b/src/uadk_digest.c
|
||
+index 63887e7..8370490 100644
|
||
+--- a/src/uadk_digest.c
|
||
++++ b/src/uadk_digest.c
|
||
+@@ -523,7 +523,8 @@ static int uadk_e_digest_init(EVP_MD_CTX *ctx)
|
||
+ return 0;
|
||
+ }
|
||
+
|
||
+- params.numa_id = engine.numa_id;
|
||
++ /* Use the default numa parameters */
|
||
++ params.numa_id = -1;
|
||
+ priv->setup.sched_param = ¶ms;
|
||
+ priv->sess = wd_digest_alloc_sess(&priv->setup);
|
||
+ if (unlikely(!priv->sess))
|
||
+diff --git a/src/uadk_rsa.c b/src/uadk_rsa.c
|
||
+index ef1739d..74852e7 100644
|
||
+--- a/src/uadk_rsa.c
|
||
++++ b/src/uadk_rsa.c
|
||
+@@ -881,7 +881,9 @@ static struct uadk_rsa_sess *rsa_get_eng_session(RSA *rsa, unsigned int bits,
|
||
+
|
||
+ rsa_sess->key_size = key_size;
|
||
+ rsa_sess->setup.key_bits = key_size << BIT_BYTES_SHIFT;
|
||
+- params.numa_id = g_rsa_res.numa_id;
|
||
++
|
||
++ /* Use the default numa parameters */
|
||
++ params.numa_id = -1;
|
||
+ rsa_sess->setup.sched_param = ¶ms;
|
||
+ rsa_sess->setup.is_crt = is_crt;
|
||
+
|
||
+--
|
||
+1.8.3.1
|
||
+
|
||
diff --git a/0063-uadk_engine-bugfix-side-effects-of-right-operand.patch b/0063-uadk_engine-bugfix-side-effects-of-right-operand.patch
|
||
new file mode 100644
|
||
index 0000000..838d1e7
|
||
--- /dev/null
|
||
+++ b/0063-uadk_engine-bugfix-side-effects-of-right-operand.patch
|
||
@@ -0,0 +1,205 @@
|
||
+From 5b59c17f84d5a1f6e7c996a499f5a70059d89ee7 Mon Sep 17 00:00:00 2001
|
||
+From: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+Date: Sat, 22 Oct 2022 15:35:17 +0800
|
||
+Subject: uadk_engine: bugfix side effects of right operand
|
||
+
|
||
+The right operand of while condition may contains side effects,
|
||
+variables change "rx_cnt++". Move 'rx_cnt++' from condition
|
||
+to statement.
|
||
+
|
||
+Signed-off-by: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+---
|
||
+ src/uadk_cipher.c | 13 ++++++++-----
|
||
+ src/uadk_dh.c | 18 +++++++++++-------
|
||
+ src/uadk_digest.c | 13 ++++++++-----
|
||
+ src/uadk_pkey.c | 13 ++++++++-----
|
||
+ src/uadk_rsa.c | 14 +++++++++-----
|
||
+ 5 files changed, 44 insertions(+), 27 deletions(-)
|
||
+
|
||
+diff --git a/src/uadk_cipher.c b/src/uadk_cipher.c
|
||
+index 8e8c5f3..9d4f692 100644
|
||
+--- a/src/uadk_cipher.c
|
||
++++ b/src/uadk_cipher.c
|
||
+@@ -516,11 +516,13 @@ static int uadk_e_cipher_poll(void *ctx)
|
||
+
|
||
+ do {
|
||
+ ret = wd_cipher_poll_ctx(idx, expt, &recv);
|
||
+- if (recv == expt)
|
||
++ if (!ret && recv == expt)
|
||
+ return 0;
|
||
+- else if (ret < 0 && ret != -EAGAIN)
|
||
+- return ret;
|
||
+- } while (ret == -EAGAIN && (rx_cnt++ < ENGINE_RECV_MAX_CNT));
|
||
++ else if (ret == -EAGAIN)
|
||
++ rx_cnt++;
|
||
++ else
|
||
++ return -1;
|
||
++ } while (rx_cnt < ENGINE_RECV_MAX_CNT);
|
||
+
|
||
+ fprintf(stderr, "failed to recv msg: timeout!\n");
|
||
+
|
||
+@@ -539,7 +541,8 @@ static int uadk_e_cipher_env_poll(void *ctx)
|
||
+ ret = wd_cipher_poll(expt, &recv);
|
||
+ if (ret < 0 || recv == expt)
|
||
+ return ret;
|
||
+- } while (rx_cnt++ < ENGINE_RECV_MAX_CNT);
|
||
++ rx_cnt++;
|
||
++ } while (rx_cnt < ENGINE_RECV_MAX_CNT);
|
||
+
|
||
+ fprintf(stderr, "failed to poll msg: timeout!\n");
|
||
+
|
||
+diff --git a/src/uadk_dh.c b/src/uadk_dh.c
|
||
+index 37f84e9..2af2455 100644
|
||
+--- a/src/uadk_dh.c
|
||
++++ b/src/uadk_dh.c
|
||
+@@ -48,6 +48,7 @@
|
||
+ #define UADK_E_SUCCESS 1
|
||
+ #define UADK_E_FAIL 0
|
||
+ #define UADK_E_POLL_SUCCESS 0
|
||
++#define UADK_E_POLL_FAIL (-1)
|
||
+ #define UADK_E_INIT_SUCCESS 0
|
||
+ #define ENV_ENABLED 1
|
||
+
|
||
+@@ -206,17 +207,19 @@ static int uadk_e_dh_poll(void *ctx)
|
||
+ {
|
||
+ __u64 rx_cnt = 0;
|
||
+ __u32 recv = 0;
|
||
+- int expect = 1;
|
||
++ int expt = 1;
|
||
+ int idx = 1;
|
||
+ int ret;
|
||
+
|
||
+ do {
|
||
+- ret = wd_dh_poll_ctx(idx, expect, &recv);
|
||
+- if (recv == expect)
|
||
++ ret = wd_dh_poll_ctx(idx, expt, &recv);
|
||
++ if (!ret && recv == expt)
|
||
+ return UADK_E_POLL_SUCCESS;
|
||
+- else if (ret < 0 && ret != -EAGAIN)
|
||
+- return ret;
|
||
+- } while (ret == -EAGAIN && (rx_cnt++ < ENGINE_RECV_MAX_CNT));
|
||
++ else if (ret == -EAGAIN)
|
||
++ rx_cnt++;
|
||
++ else
|
||
++ return UADK_E_POLL_FAIL;
|
||
++ } while (rx_cnt < ENGINE_RECV_MAX_CNT);
|
||
+
|
||
+ fprintf(stderr, "failed to recv msg: timeout!\n");
|
||
+
|
||
+@@ -283,7 +286,8 @@ static int uadk_e_dh_env_poll(void *ctx)
|
||
+ ret = wd_dh_poll(expt, &recv);
|
||
+ if (ret < 0 || recv == expt)
|
||
+ return ret;
|
||
+- } while (rx_cnt++ < ENGINE_RECV_MAX_CNT);
|
||
++ rx_cnt++;
|
||
++ } while (rx_cnt < ENGINE_RECV_MAX_CNT);
|
||
+
|
||
+ fprintf(stderr, "failed to poll msg: timeout!\n");
|
||
+
|
||
+diff --git a/src/uadk_digest.c b/src/uadk_digest.c
|
||
+index 8370490..9568a98 100644
|
||
+--- a/src/uadk_digest.c
|
||
++++ b/src/uadk_digest.c
|
||
+@@ -343,11 +343,13 @@ static int uadk_e_digest_poll(void *ctx)
|
||
+
|
||
+ do {
|
||
+ ret = wd_digest_poll_ctx(CTX_ASYNC, expt, &recv);
|
||
+- if (recv == expt)
|
||
++ if (!ret && recv == expt)
|
||
+ return 0;
|
||
+- else if (ret < 0 && ret != -EAGAIN)
|
||
+- return ret;
|
||
+- } while (ret == -EAGAIN && (rx_cnt++ < ENGINE_RECV_MAX_CNT));
|
||
++ else if (ret == -EAGAIN)
|
||
++ rx_cnt++;
|
||
++ else
|
||
++ return -1;
|
||
++ } while (rx_cnt < ENGINE_RECV_MAX_CNT);
|
||
+
|
||
+ fprintf(stderr, "failed to recv msg: timeout!\n");
|
||
+
|
||
+@@ -366,7 +368,8 @@ static int uadk_e_digest_env_poll(void *ctx)
|
||
+ ret = wd_digest_poll(expt, &recv);
|
||
+ if (ret < 0 || recv == expt)
|
||
+ return ret;
|
||
+- } while (rx_cnt++ < ENGINE_RECV_MAX_CNT);
|
||
++ rx_cnt++;
|
||
++ } while (rx_cnt < ENGINE_RECV_MAX_CNT);
|
||
+
|
||
+ fprintf(stderr, "failed to poll msg: timeout!\n");
|
||
+
|
||
+diff --git a/src/uadk_pkey.c b/src/uadk_pkey.c
|
||
+index 211f1cc..6920cff 100644
|
||
+--- a/src/uadk_pkey.c
|
||
++++ b/src/uadk_pkey.c
|
||
+@@ -110,11 +110,13 @@ static int uadk_ecc_poll(void *ctx)
|
||
+
|
||
+ do {
|
||
+ ret = wd_ecc_poll_ctx(CTX_ASYNC, expt, &recv);
|
||
+- if (recv == expt)
|
||
++ if (!ret && recv == expt)
|
||
+ return 0;
|
||
+- else if (ret < 0 && ret != -EAGAIN)
|
||
+- return ret;
|
||
+- } while (ret == -EAGAIN && (rx_cnt++ < ENGINE_RECV_MAX_CNT));
|
||
++ else if (ret == -EAGAIN)
|
||
++ rx_cnt++;
|
||
++ else
|
||
++ return -1;
|
||
++ } while (rx_cnt < ENGINE_RECV_MAX_CNT);
|
||
+
|
||
+ fprintf(stderr, "failed to recv msg: timeout!\n");
|
||
+
|
||
+@@ -153,7 +155,8 @@ static int uadk_e_ecc_env_poll(void *ctx)
|
||
+ ret = wd_ecc_poll(expt, &recv);
|
||
+ if (ret < 0 || recv == expt)
|
||
+ return ret;
|
||
+- } while (rx_cnt++ < ENGINE_RECV_MAX_CNT);
|
||
++ rx_cnt++;
|
||
++ } while (rx_cnt < ENGINE_RECV_MAX_CNT);
|
||
+
|
||
+ fprintf(stderr, "failed to poll msg: timeout!\n");
|
||
+
|
||
+diff --git a/src/uadk_rsa.c b/src/uadk_rsa.c
|
||
+index 74852e7..bcdd6bc 100644
|
||
+--- a/src/uadk_rsa.c
|
||
++++ b/src/uadk_rsa.c
|
||
+@@ -48,6 +48,7 @@
|
||
+ #define UADK_E_FAIL 0
|
||
+ #define UADK_DO_SOFT (-0xE0)
|
||
+ #define UADK_E_POLL_SUCCESS 0
|
||
++#define UADK_E_POLL_FAIL (-1)
|
||
+ #define UADK_E_INIT_SUCCESS 0
|
||
+ #define CHECK_PADDING_FAIL (-1)
|
||
+ #define ENV_ENABLED 1
|
||
+@@ -664,11 +665,13 @@ static int uadk_e_rsa_poll(void *ctx)
|
||
+
|
||
+ do {
|
||
+ ret = wd_rsa_poll_ctx(CTX_ASYNC, expt, &recv);
|
||
+- if (recv == expt)
|
||
++ if (!ret && recv == expt)
|
||
+ return UADK_E_POLL_SUCCESS;
|
||
+- else if (ret < 0 && ret != -EAGAIN)
|
||
+- return ret;
|
||
+- } while (ret == -EAGAIN && (rx_cnt++ < ENGINE_RECV_MAX_CNT));
|
||
++ else if (ret == -EAGAIN)
|
||
++ rx_cnt++;
|
||
++ else
|
||
++ return UADK_E_POLL_FAIL;
|
||
++ } while (rx_cnt < ENGINE_RECV_MAX_CNT);
|
||
+
|
||
+ fprintf(stderr, "failed to recv msg: timeout!\n");
|
||
+
|
||
+@@ -700,7 +703,8 @@ static int uadk_e_rsa_env_poll(void *ctx)
|
||
+ ret = wd_rsa_poll(expt, &recv);
|
||
+ if (ret < 0 || recv == expt)
|
||
+ return ret;
|
||
+- } while (rx_cnt++ < ENGINE_RECV_MAX_CNT);
|
||
++ rx_cnt++;
|
||
++ } while (rx_cnt < ENGINE_RECV_MAX_CNT);
|
||
+
|
||
+ fprintf(stderr, "failed to poll msg: timeout!\n");
|
||
+
|
||
+--
|
||
+1.8.3.1
|
||
+
|
||
diff --git a/0064-uadk_engine-cleanup-static-check-warning-of-clangtid.patch b/0064-uadk_engine-cleanup-static-check-warning-of-clangtid.patch
|
||
new file mode 100644
|
||
index 0000000..9107679
|
||
--- /dev/null
|
||
+++ b/0064-uadk_engine-cleanup-static-check-warning-of-clangtid.patch
|
||
@@ -0,0 +1,118 @@
|
||
+From f17c89d7d27b3a728232c7e641c2978db238a2f3 Mon Sep 17 00:00:00 2001
|
||
+From: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+Date: Sat, 22 Oct 2022 15:37:45 +0800
|
||
+Subject: uadk_engine: cleanup static check warning of clangtidy tool
|
||
+
|
||
+Cleanup the following warning:
|
||
+1. Parameters of function should not be used as working
|
||
+variable.
|
||
+2. Cleanup uninitialized value.
|
||
+3. Storage class should be specified after a type.
|
||
+
|
||
+Signed-off-by: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+---
|
||
+ src/e_uadk.c | 6 ++----
|
||
+ src/uadk_cipher.c | 9 +++++----
|
||
+ src/uadk_ec.c | 5 +++--
|
||
+ src/uadk_rsa.c | 16 ++++++++--------
|
||
+ 4 files changed, 18 insertions(+), 18 deletions(-)
|
||
+
|
||
+diff --git a/src/e_uadk.c b/src/e_uadk.c
|
||
+index 77612d7..21ceb86 100644
|
||
+--- a/src/e_uadk.c
|
||
++++ b/src/e_uadk.c
|
||
+@@ -89,13 +89,11 @@ static const ENGINE_CMD_DEFN g_uadk_cmd_defns[] = {
|
||
+ }
|
||
+ };
|
||
+
|
||
+-__attribute__((constructor))
|
||
+-static void uadk_constructor(void)
|
||
++static void __attribute__((constructor)) uadk_constructor(void)
|
||
+ {
|
||
+ }
|
||
+
|
||
+-__attribute__((destructor))
|
||
+-static void uadk_destructor(void)
|
||
++static void __attribute__((destructor)) uadk_destructor(void)
|
||
+ {
|
||
+ }
|
||
+
|
||
+diff --git a/src/uadk_cipher.c b/src/uadk_cipher.c
|
||
+index 9d4f692..14e2af2 100644
|
||
+--- a/src/uadk_cipher.c
|
||
++++ b/src/uadk_cipher.c
|
||
+@@ -749,17 +749,18 @@ static void ctr_iv_inc(uint8_t *counter, __u32 c)
|
||
+ {
|
||
+ uint32_t n = CTR_128BIT_COUNTER;
|
||
+ uint8_t *counter1 = counter;
|
||
++ __u32 c_value = c;
|
||
+
|
||
+ /*
|
||
+ * Since the counter has been increased 1 by the hardware,
|
||
+ * so the c need to decrease 1.
|
||
+ */
|
||
+- c = c - 1;
|
||
++ c_value -= 1;
|
||
+ do {
|
||
+ --n;
|
||
+- c += counter1[n];
|
||
+- counter1[n] = (uint8_t)c;
|
||
+- c >>= BYTE_BITS;
|
||
++ c_value += counter1[n];
|
||
++ counter1[n] = (uint8_t)c_value;
|
||
++ c_value >>= BYTE_BITS;
|
||
+ } while (n);
|
||
+ }
|
||
+
|
||
+diff --git a/src/uadk_ec.c b/src/uadk_ec.c
|
||
+index 37683cd..247b875 100644
|
||
+--- a/src/uadk_ec.c
|
||
++++ b/src/uadk_ec.c
|
||
+@@ -72,14 +72,15 @@ static void init_dtb_param(void *dtb, char *start,
|
||
+ __u32 dsz, __u32 bsz, __u32 num)
|
||
+ {
|
||
+ struct wd_dtb *tmp = dtb;
|
||
++ char *buff = start;
|
||
+ int i = 0;
|
||
+
|
||
+ while (i++ < num) {
|
||
+- tmp->data = start;
|
||
++ tmp->data = buff;
|
||
+ tmp->dsize = dsz;
|
||
+ tmp->bsize = bsz;
|
||
+ tmp += 1;
|
||
+- start += bsz;
|
||
++ buff += bsz;
|
||
+ }
|
||
+ }
|
||
+
|
||
+diff --git a/src/uadk_rsa.c b/src/uadk_rsa.c
|
||
+index bcdd6bc..7d25338 100644
|
||
+--- a/src/uadk_rsa.c
|
||
++++ b/src/uadk_rsa.c
|
||
+@@ -932,14 +932,14 @@ static int rsa_fill_prikey(RSA *rsa, struct uadk_rsa_sess *rsa_sess,
|
||
+ struct rsa_prikey_param *pri,
|
||
+ unsigned char *in_buf, unsigned char *to)
|
||
+ {
|
||
+- struct wd_rsa_prikey *prikey;
|
||
+- struct wd_dtb *wd_dq;
|
||
+- struct wd_dtb *wd_dp;
|
||
+- struct wd_dtb *wd_q;
|
||
+- struct wd_dtb *wd_p;
|
||
+- struct wd_dtb *wd_qinv;
|
||
+- struct wd_dtb *wd_d;
|
||
+- struct wd_dtb *wd_n;
|
||
++ struct wd_rsa_prikey *prikey = NULL;
|
||
++ struct wd_dtb *wd_qinv = NULL;
|
||
++ struct wd_dtb *wd_dq = NULL;
|
||
++ struct wd_dtb *wd_dp = NULL;
|
||
++ struct wd_dtb *wd_q = NULL;
|
||
++ struct wd_dtb *wd_p = NULL;
|
||
++ struct wd_dtb *wd_d = NULL;
|
||
++ struct wd_dtb *wd_n = NULL;
|
||
+
|
||
+ if (!(rsa_sess->is_prikey_ready) && (pri->is_crt)) {
|
||
+ wd_rsa_get_prikey(rsa_sess->sess, &prikey);
|
||
+--
|
||
+1.8.3.1
|
||
+
|
||
diff --git a/0065-uadk_engine-bugfix-enable-environment-variable.patch b/0065-uadk_engine-bugfix-enable-environment-variable.patch
|
||
new file mode 100644
|
||
index 0000000..2fab708
|
||
--- /dev/null
|
||
+++ b/0065-uadk_engine-bugfix-enable-environment-variable.patch
|
||
@@ -0,0 +1,38 @@
|
||
+From 7ef97aab7a5cd964241fe9879588ceb54a547003 Mon Sep 17 00:00:00 2001
|
||
+From: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+Date: Sat, 22 Oct 2022 15:53:53 +0800
|
||
+Subject: uadk_engine: bugfix enable environment variable
|
||
+
|
||
+When the 'alg_name' set by the user is valid, the 'env_enabled'
|
||
+field should be set or returned.
|
||
+
|
||
+Signed-off-by: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+---
|
||
+ src/e_uadk.c | 4 ++--
|
||
+ 1 file changed, 2 insertions(+), 2 deletions(-)
|
||
+
|
||
+diff --git a/src/e_uadk.c b/src/e_uadk.c
|
||
+index 21ceb86..0a9e3e6 100644
|
||
+--- a/src/e_uadk.c
|
||
++++ b/src/e_uadk.c
|
||
+@@ -116,7 +116,7 @@ int uadk_e_is_env_enabled(const char *alg_name)
|
||
+ int i = 0;
|
||
+
|
||
+ while (i < len) {
|
||
+- if (strcmp(uadk_env_enabled[i].alg_name, alg_name))
|
||
++ if (!strcmp(uadk_env_enabled[i].alg_name, alg_name))
|
||
+ return uadk_env_enabled[i].env_enabled;
|
||
+ i++;
|
||
+ }
|
||
+@@ -130,7 +130,7 @@ static void uadk_e_set_env_enabled(const char *alg_name, __u8 value)
|
||
+ int i = 0;
|
||
+
|
||
+ while (i < len) {
|
||
+- if (strcmp(uadk_env_enabled[i].alg_name, alg_name)) {
|
||
++ if (!strcmp(uadk_env_enabled[i].alg_name, alg_name)) {
|
||
+ uadk_env_enabled[i].env_enabled = value;
|
||
+ return;
|
||
+ }
|
||
+--
|
||
+1.8.3.1
|
||
+
|
||
diff --git a/0066-uadk_engine-cleanup-magic-number-and-comments.patch b/0066-uadk_engine-cleanup-magic-number-and-comments.patch
|
||
new file mode 100644
|
||
index 0000000..b9a5379
|
||
--- /dev/null
|
||
+++ b/0066-uadk_engine-cleanup-magic-number-and-comments.patch
|
||
@@ -0,0 +1,537 @@
|
||
+From 20049f2becb9cc339276d4839f6d9f909273f5a5 Mon Sep 17 00:00:00 2001
|
||
+From: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+Date: Sat, 22 Oct 2022 15:54:51 +0800
|
||
+Subject: uadk_engine: cleanup magic number and comments
|
||
+
|
||
+Use macros to replace magic numbers and related operations.
|
||
+Simplify code comments and unify style.
|
||
+
|
||
+Signed-off-by: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+---
|
||
+ src/uadk_cipher.c | 4 +---
|
||
+ src/uadk_dh.c | 5 ++---
|
||
+ src/uadk_digest.c | 2 +-
|
||
+ src/uadk_ec.c | 51 ++++++++++++++++++++++++++-------------------------
|
||
+ src/uadk_ecx.c | 40 +++++++++++++++++++++++-----------------
|
||
+ src/uadk_pkey.c | 9 ++++-----
|
||
+ src/uadk_pkey.h | 6 +++++-
|
||
+ src/uadk_rsa.c | 25 ++++++++++---------------
|
||
+ src/uadk_sm2.c | 23 ++++++++++++-----------
|
||
+ 9 files changed, 84 insertions(+), 81 deletions(-)
|
||
+
|
||
+diff --git a/src/uadk_cipher.c b/src/uadk_cipher.c
|
||
+index 14e2af2..de5f078 100644
|
||
+--- a/src/uadk_cipher.c
|
||
++++ b/src/uadk_cipher.c
|
||
+@@ -480,13 +480,11 @@ static __u32 sched_single_pick_next_ctx(handle_t sched_ctx,
|
||
+ struct sched_params *key = (struct sched_params *)sched_key;
|
||
+
|
||
+ if (sched_mode) {
|
||
+- /* async */
|
||
+ if (key->type == WD_CIPHER_ENCRYPTION)
|
||
+ return CTX_ASYNC_ENC;
|
||
+ else
|
||
+ return CTX_ASYNC_DEC;
|
||
+ } else {
|
||
+- /* sync */
|
||
+ if (key->type == WD_CIPHER_ENCRYPTION)
|
||
+ return CTX_SYNC_ENC;
|
||
+ else
|
||
+@@ -744,7 +742,7 @@ static void async_cb(struct wd_cipher_req *req, void *data)
|
||
+ }
|
||
+ }
|
||
+
|
||
+-/* increment counter (128-bit int) by c */
|
||
++/* Increment counter (128-bit int) by c */
|
||
+ static void ctr_iv_inc(uint8_t *counter, __u32 c)
|
||
+ {
|
||
+ uint32_t n = CTR_128BIT_COUNTER;
|
||
+diff --git a/src/uadk_dh.c b/src/uadk_dh.c
|
||
+index 2af2455..6356872 100644
|
||
+--- a/src/uadk_dh.c
|
||
++++ b/src/uadk_dh.c
|
||
+@@ -603,7 +603,7 @@ static int dh_fill_genkey_req(const BIGNUM *g, const BIGNUM *p,
|
||
+ if (!ag_bin)
|
||
+ return UADK_E_FAIL;
|
||
+
|
||
+- /* malloc a contiguous chunk of memory */
|
||
++ /* Malloc a contiguous chunk of memory */
|
||
+ apriv_key_bin = OPENSSL_malloc(key_size * DH_PARAMS_CNT);
|
||
+ if (!apriv_key_bin)
|
||
+ goto free_ag;
|
||
+@@ -615,7 +615,7 @@ static int dh_fill_genkey_req(const BIGNUM *g, const BIGNUM *p,
|
||
+ memset(ap_bin, 0, key_size);
|
||
+ memset(out_pri, 0, key_size);
|
||
+
|
||
+- /* construct data block of g */
|
||
++ /* Construct data block of g */
|
||
+ ret = dh_set_g(g, key_size, ag_bin, dh_sess);
|
||
+ if (!ret)
|
||
+ goto free_apriv;
|
||
+@@ -623,7 +623,6 @@ static int dh_fill_genkey_req(const BIGNUM *g, const BIGNUM *p,
|
||
+ dh_sess->req.xbytes = BN_bn2bin(priv_key, apriv_key_bin);
|
||
+ dh_sess->req.pbytes = BN_bn2bin(p, ap_bin);
|
||
+ dh_sess->req.x_p = (void *)apriv_key_bin;
|
||
+- /* the output from uadk */
|
||
+ dh_sess->req.pri = out_pri;
|
||
+ dh_sess->req.pri_bytes = key_size;
|
||
+ dh_sess->req.op_type = WD_DH_PHASE1;
|
||
+diff --git a/src/uadk_digest.c b/src/uadk_digest.c
|
||
+index 9568a98..9d009a9 100644
|
||
+--- a/src/uadk_digest.c
|
||
++++ b/src/uadk_digest.c
|
||
+@@ -71,7 +71,7 @@ static struct digest_engine engine;
|
||
+
|
||
+ struct evp_md_ctx_st {
|
||
+ const EVP_MD *digest;
|
||
+- /* functional reference if 'digest' is ENGINE-provided */
|
||
++ /* Functional reference if 'digest' is ENGINE-provided */
|
||
+ ENGINE *engine;
|
||
+ unsigned long flags;
|
||
+ void *md_data;
|
||
+diff --git a/src/uadk_ec.c b/src/uadk_ec.c
|
||
+index 247b875..9b48ae7 100644
|
||
+--- a/src/uadk_ec.c
|
||
++++ b/src/uadk_ec.c
|
||
+@@ -27,23 +27,23 @@
|
||
+ #include "uadk.h"
|
||
+
|
||
+ #define ECC128BITS 128
|
||
+-#define ECC192BITS 192
|
||
+-#define ECC224BITS 224
|
||
+-#define ECC256BITS 256
|
||
+-#define ECC320BITS 320
|
||
+-#define ECC384BITS 384
|
||
+-#define ECC521BITS 521
|
||
++#define ECC192BITS 192
|
||
++#define ECC224BITS 224
|
||
++#define ECC256BITS 256
|
||
++#define ECC320BITS 320
|
||
++#define ECC384BITS 384
|
||
++#define ECC521BITS 521
|
||
+
|
||
+ struct curve_param {
|
||
+- /* prime */
|
||
++ /* Prime */
|
||
+ BIGNUM *p;
|
||
+- /* ecc coefficient 'a' */
|
||
++ /* ECC coefficient 'a' */
|
||
+ BIGNUM *a;
|
||
+- /* ecc coefficient 'b' */
|
||
++ /* ECC coefficient 'b' */
|
||
+ BIGNUM *b;
|
||
+- /* base point */
|
||
++ /* Base point */
|
||
+ const EC_POINT *g;
|
||
+- /* order of base point */
|
||
++ /* Order of base point */
|
||
+ const BIGNUM *order;
|
||
+ };
|
||
+
|
||
+@@ -176,7 +176,6 @@ free_ctx:
|
||
+
|
||
+ static int get_smallest_hw_keybits(int bits)
|
||
+ {
|
||
+- /* ec curve order width */
|
||
+ if (bits > ECC384BITS)
|
||
+ return ECC521BITS;
|
||
+ else if (bits > ECC320BITS)
|
||
+@@ -283,7 +282,7 @@ static int eckey_check(const EC_KEY *eckey)
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+- /* field GF(2m) is not supported by uadk */
|
||
++ /* Field GF(2m) is not supported by uadk */
|
||
+ if (!uadk_prime_field(group))
|
||
+ return UADK_DO_SOFT;
|
||
+
|
||
+@@ -336,22 +335,25 @@ static int set_digest(handle_t sess, struct wd_dtb *e,
|
||
+ unsigned int dlen = sdgst->dsize;
|
||
+ BIGNUM *m;
|
||
+
|
||
+- if (dlen << UADK_BITS_2_BYTES_SHIFT > order_bits) {
|
||
++ if (dlen << TRANS_BITS_BYTES_SHIFT > order_bits) {
|
||
+ m = BN_new();
|
||
+
|
||
+ /* Need to truncate digest if it is too long: first truncate
|
||
+ * whole bytes
|
||
+ */
|
||
+- dlen = (order_bits + 7) >> UADK_BITS_2_BYTES_SHIFT;
|
||
++ dlen = BITS_TO_BYTES(order_bits);
|
||
+ if (!BN_bin2bn(dgst, dlen, m)) {
|
||
+ fprintf(stderr, "failed to BN_bin2bn digest\n");
|
||
+ BN_free(m);
|
||
+ return -1;
|
||
+ }
|
||
+
|
||
+- /* If still too long, truncate remaining bits with a shift */
|
||
+- if (dlen << UADK_BITS_2_BYTES_SHIFT > order_bits &&
|
||
+- !BN_rshift(m, m, 8 - (order_bits & 0x7))) {
|
||
++ /* If the length of digest is still longer than the length
|
||
++ * of the base point order, truncate remaining bits with a
|
||
++ * shift to that length
|
||
++ */
|
||
++ if (dlen << TRANS_BITS_BYTES_SHIFT > order_bits &&
|
||
++ !BN_rshift(m, m, DGST_SHIFT_NUM(order_bits))) {
|
||
+ fprintf(stderr, "failed to truncate input digest\n");
|
||
+ BN_free(m);
|
||
+ return -1;
|
||
+@@ -743,7 +745,7 @@ err:
|
||
+
|
||
+ static int set_key_to_ec_key(EC_KEY *ec, struct wd_ecc_req *req)
|
||
+ {
|
||
+- unsigned char buff[SM2_KEY_BYTES * 2 + 1] = {UADK_OCTET_STRING};
|
||
++ unsigned char buff[ECC_POINT_SIZE(SM2_KEY_BYTES) + 1] = {UADK_OCTET_STRING};
|
||
+ struct wd_ecc_point *pubkey = NULL;
|
||
+ struct wd_dtb *privkey = NULL;
|
||
+ const EC_GROUP *group;
|
||
+@@ -768,8 +770,8 @@ static int set_key_to_ec_key(EC_KEY *ec, struct wd_ecc_req *req)
|
||
+ return -ENOMEM;
|
||
+ }
|
||
+
|
||
+- memcpy(buff + 1, pubkey->x.data, SM2_KEY_BYTES * 2);
|
||
+- tmp = BN_bin2bn(buff, SM2_KEY_BYTES * 2 + 1, NULL);
|
||
++ memcpy(buff + 1, pubkey->x.data, ECC_POINT_SIZE(SM2_KEY_BYTES));
|
||
++ tmp = BN_bin2bn(buff, ECC_POINT_SIZE(SM2_KEY_BYTES) + 1, NULL);
|
||
+ ptr = EC_POINT_bn2point(group, tmp, point, NULL);
|
||
+ BN_free(tmp);
|
||
+ if (!ptr) {
|
||
+@@ -1029,7 +1031,7 @@ static int ecdh_compkey_init_iot(handle_t sess, struct wd_ecc_req *req,
|
||
+ in_pkey.x.dsize = BN_bn2bin(pkey_x, (unsigned char *)in_pkey.x.data);
|
||
+ in_pkey.y.dsize = BN_bn2bin(pkey_y, (unsigned char *)in_pkey.y.data);
|
||
+
|
||
+- /* set public key */
|
||
++ /* Set public key */
|
||
+ ecdh_in = wd_ecxdh_new_in(sess, &in_pkey);
|
||
+ if (!ecdh_in) {
|
||
+ fprintf(stderr, "failed to new ecxdh in\n");
|
||
+@@ -1075,7 +1077,7 @@ static int ecdh_set_key_to_ec_key(EC_KEY *ecdh, struct wd_ecc_req *req)
|
||
+ }
|
||
+
|
||
+ key_size_std = (unsigned int)(EC_GROUP_get_degree(group) +
|
||
+- UADK_ECC_PADDING) >> UADK_BITS_2_BYTES_SHIFT;
|
||
++ UADK_ECC_PADDING) >> TRANS_BITS_BYTES_SHIFT;
|
||
+ key_size_x = pubkey->x.dsize;
|
||
+ key_size_y = pubkey->y.dsize;
|
||
+ if ((key_size_x > key_size_std) || (key_size_y > key_size_std)) {
|
||
+@@ -1088,9 +1090,8 @@ static int ecdh_set_key_to_ec_key(EC_KEY *ecdh, struct wd_ecc_req *req)
|
||
+ * tag - 1 byte
|
||
+ * point_x - [key_size_std] bytes
|
||
+ * point_y - [key_size_std] bytes
|
||
+- * so the malloc size is: key_size_std * 2 + 1
|
||
+ */
|
||
+- buff_size = key_size_std * 2 + 1;
|
||
++ buff_size = ECC_POINT_SIZE(key_size_std) + 1;
|
||
+ x_shift = key_size_std - key_size_x + 1;
|
||
+ y_shift = buff_size - key_size_y;
|
||
+ buff = (unsigned char *)OPENSSL_malloc(buff_size);
|
||
+diff --git a/src/uadk_ecx.c b/src/uadk_ecx.c
|
||
+index df23156..67042a3 100644
|
||
+--- a/src/uadk_ecx.c
|
||
++++ b/src/uadk_ecx.c
|
||
+@@ -295,33 +295,39 @@ static int ecx_keygen_set_pkey(EVP_PKEY *pkey, struct ecx_ctx *ecx_ctx,
|
||
+
|
||
+ memcpy(ecx_key->pubkey, (const unsigned char *)pubkey->x.data,
|
||
+ key_size);
|
||
+- /* trans public key from big-endian to little-endian */
|
||
++ /* Trans public key from big-endian to little-endian */
|
||
+ ret = reverse_bytes(ecx_key->pubkey, key_size);
|
||
+ if (!ret) {
|
||
+ fprintf(stderr, "failed to trans public key\n");
|
||
+ return UADK_E_FAIL;
|
||
+ }
|
||
+- /* trans private key from big-endian to little-endian */
|
||
++ /* Trans private key from big-endian to little-endian */
|
||
+ ret = reverse_bytes(ecx_key->privkey, key_size);
|
||
+ if (!ret) {
|
||
+ fprintf(stderr, "failed to trans private key\n");
|
||
+ return UADK_E_FAIL;
|
||
+ }
|
||
+ /*
|
||
+- * This is a pretreatment of X25519/X448, as described in RFC 7748:
|
||
+- * For X25519, in order to decode 32 random bytes as an integer
|
||
+- * scaler, set the three LSB of the first byte and MSB of the last
|
||
+- * to zero, set the second MSB of the last byte to 1.
|
||
+- * For X448, set the two LSB of the first byte to 0, and MSB of the
|
||
+- * last byte to 1. Decode in little-endian mode.
|
||
++ * This is a pretreatment of X25519/X448 described in RFC 7748.
|
||
++ * In order to decode the random bytes as an integer scaler, there
|
||
++ * are some special data processing. And use little-endian mode for
|
||
++ * decoding.
|
||
+ */
|
||
+ if (ecx_ctx->nid == EVP_PKEY_X25519) {
|
||
+- ecx_key->privkey[0] &= 248;
|
||
+- ecx_key->privkey[X25519_KEYLEN - 1] &= 127;
|
||
+- ecx_key->privkey[X25519_KEYLEN - 1] |= 64;
|
||
++ /* Set the three LSB of the first byte to 0 */
|
||
++ ecx_key->privkey[0] &= 0xF8;
|
||
++
|
||
++ /* Set the MSB of the last byte to 0 */
|
||
++ ecx_key->privkey[X25519_KEYLEN - 1] &= 0x7F;
|
||
++
|
||
++ /* Set the second MSB of the last byte to 1 */
|
||
++ ecx_key->privkey[X25519_KEYLEN - 1] |= 0x40;
|
||
+ } else if (ecx_ctx->nid == EVP_PKEY_X448) {
|
||
+- ecx_key->privkey[0] &= 252;
|
||
+- ecx_key->privkey[X448_KEYLEN - 1] |= 128;
|
||
++ /* Set the two LSB of the first byte to 0 */
|
||
++ ecx_key->privkey[0] &= 0xFC;
|
||
++
|
||
++ /* Set the MSB of the last byte to 1 */
|
||
++ ecx_key->privkey[X448_KEYLEN - 1] |= 0x80;
|
||
+ }
|
||
+
|
||
+ ret = EVP_PKEY_assign(pkey, ecx_ctx->nid, ecx_key);
|
||
+@@ -494,7 +500,7 @@ static int ecx_compkey_init_iot(struct ecx_ctx *ecx_ctx, struct wd_ecc_req *req,
|
||
+ struct wd_ecc_in *ecx_in;
|
||
+ int ret;
|
||
+
|
||
+- /* trans public key from little-endian to big-endian */
|
||
++ /* Trans public key from little-endian to big-endian */
|
||
+ ret = reverse_bytes(peer_ecx_key->pubkey, key_size);
|
||
+ if(!ret) {
|
||
+ fprintf(stderr, "failed to trans public key\n");
|
||
+@@ -521,7 +527,7 @@ static int ecx_compkey_init_iot(struct ecx_ctx *ecx_ctx, struct wd_ecc_req *req,
|
||
+
|
||
+ uadk_ecc_fill_req(req, WD_ECXDH_COMPUTE_KEY, ecx_in, ecx_out);
|
||
+
|
||
+- /* trans public key from big-endian to little-endian */
|
||
++ /* Trans public key from big-endian to little-endian */
|
||
+ ret = reverse_bytes(peer_ecx_key->pubkey, key_size);
|
||
+ if (!ret) {
|
||
+ fprintf(stderr, "failed to trans public key\n");
|
||
+@@ -553,7 +559,7 @@ static int ecx_derive_set_private_key(struct ecx_ctx *ecx_ctx,
|
||
+ struct wd_dtb prikey;
|
||
+ int ret;
|
||
+
|
||
+- /* trans private key from little-endian to big-endian */
|
||
++ /* Trans private key from little-endian to big-endian */
|
||
+ ret = reverse_bytes(ecx_key->privkey, key_size);
|
||
+ if (!ret) {
|
||
+ fprintf(stderr, "failed to trans private key\n");
|
||
+@@ -569,7 +575,7 @@ static int ecx_derive_set_private_key(struct ecx_ctx *ecx_ctx,
|
||
+ return UADK_E_FAIL;
|
||
+ }
|
||
+
|
||
+- /* trans private key from big-endian to little-endian */
|
||
++ /* Trans private key from big-endian to little-endian */
|
||
+ ret = reverse_bytes(ecx_key->privkey, key_size);
|
||
+ if (!ret) {
|
||
+ fprintf(stderr, "failed to trans private key\n");
|
||
+diff --git a/src/uadk_pkey.c b/src/uadk_pkey.c
|
||
+index 6920cff..6b5ae9a 100644
|
||
+--- a/src/uadk_pkey.c
|
||
++++ b/src/uadk_pkey.c
|
||
+@@ -44,7 +44,7 @@ struct ecc_res_config {
|
||
+ int numa_id;
|
||
+ };
|
||
+
|
||
+-/* ecc global hardware resource is saved here */
|
||
++/* ECC global hardware resource is saved here */
|
||
+ struct ecc_res {
|
||
+ struct wd_ctx_config *ctx_res;
|
||
+ int pid;
|
||
+@@ -123,7 +123,7 @@ static int uadk_ecc_poll(void *ctx)
|
||
+ return -ETIMEDOUT;
|
||
+ }
|
||
+
|
||
+-/* make resource configure static */
|
||
++/* Make resource configure static */
|
||
+ struct ecc_res_config ecc_res_config = {
|
||
+ .sched = {
|
||
+ .sched_type = -1,
|
||
+@@ -234,7 +234,7 @@ static int uadk_wd_ecc_init(struct ecc_res_config *config)
|
||
+ struct uacce_dev *dev;
|
||
+ int ret;
|
||
+
|
||
+- /* ctx is no difference for sm2/ecdsa/ecdh/x25519/x448 */
|
||
++ /* The ctx is no difference for sm2/ecdsa/ecdh/x25519/x448 */
|
||
+ dev = wd_get_accel_dev("ecdsa");
|
||
+ if (!dev)
|
||
+ return -ENOMEM;
|
||
+@@ -396,8 +396,7 @@ int uadk_ecc_set_private_key(handle_t sess, const EC_KEY *eckey)
|
||
+ return -EINVAL;
|
||
+ }
|
||
+
|
||
+- /* pad and convert bits to bytes */
|
||
+- buflen = (EC_GROUP_get_degree(group) + 7) / 8;
|
||
++ buflen = BITS_TO_BYTES(EC_GROUP_get_degree(group));
|
||
+ ecc_key = wd_ecc_get_key(sess);
|
||
+ prikey.data = (void *)bin;
|
||
+ prikey.dsize = BN_bn2binpad(d, bin, buflen);
|
||
+diff --git a/src/uadk_pkey.h b/src/uadk_pkey.h
|
||
+index b30c2de..6d1cc77 100644
|
||
+--- a/src/uadk_pkey.h
|
||
++++ b/src/uadk_pkey.h
|
||
+@@ -26,7 +26,6 @@
|
||
+ #define UADK_ECC_MAX_KEY_BITS 521
|
||
+ #define UADK_ECC_MAX_KEY_BYTES 66
|
||
+ #define UADK_ECC_CV_PARAM_NUM 6
|
||
+-#define UADK_BITS_2_BYTES_SHIFT 3
|
||
+ #define SM2_KEY_BYTES 32
|
||
+ #define UADK_OCTET_STRING 4
|
||
+ #define UADK_ECC_PUBKEY_PARAM_NUM 2
|
||
+@@ -34,6 +33,11 @@
|
||
+ #define UADK_ECDH_CV_NUM 8
|
||
+ #define ENV_ENABLED 1
|
||
+ #define UADK_E_INVALID (-2)
|
||
++#define TRANS_BITS_BYTES_SHIFT 3
|
||
++#define ECC_POINT_SIZE(n) ((n) * 2)
|
||
++#define GET_MS_BYTE(n) ((n) >> 8)
|
||
++#define GET_LS_BYTE(n) ((n) & 0xFF)
|
||
++#define DGST_SHIFT_NUM(n) (8 - ((n) & 0x7))
|
||
+
|
||
+ struct uadk_pkey_meth {
|
||
+ EVP_PKEY_METHOD *sm2;
|
||
+diff --git a/src/uadk_rsa.c b/src/uadk_rsa.c
|
||
+index 7d25338..e9a2c53 100644
|
||
+--- a/src/uadk_rsa.c
|
||
++++ b/src/uadk_rsa.c
|
||
+@@ -52,6 +52,9 @@
|
||
+ #define UADK_E_INIT_SUCCESS 0
|
||
+ #define CHECK_PADDING_FAIL (-1)
|
||
+ #define ENV_ENABLED 1
|
||
++#define PRIME_RETRY_COUNT 4
|
||
++#define GENCB_NEXT 2
|
||
++#define GENCB_RETRY 3
|
||
+
|
||
+ static RSA_METHOD *rsa_hw_meth;
|
||
+
|
||
+@@ -173,11 +176,7 @@ static int rsa_prime_mul_res(int num, struct rsa_prime_param *param,
|
||
+ if (!BN_mul(param->r1, param->rsa_p, param->rsa_q, ctx))
|
||
+ return BN_ERR;
|
||
+ } else {
|
||
+- /*
|
||
+- * Use the number 3 to indicate whether
|
||
+- * the generator has been found.
|
||
+- */
|
||
+- if (!BN_GENCB_call(cb, 3, num))
|
||
++ if (!BN_GENCB_call(cb, GENCB_RETRY, num))
|
||
+ return BN_ERR;
|
||
+ return BN_CONTINUE;
|
||
+ }
|
||
+@@ -228,14 +227,11 @@ static int check_rsa_prime_sufficient(int *num, const int *bitsr,
|
||
+ *bitse -= bitsr[*num];
|
||
+ else
|
||
+ return -1;
|
||
+- /*
|
||
+- * Use the number 2 to indicate whether
|
||
+- * a prime has been found.
|
||
+- */
|
||
+- ret = BN_GENCB_call(cb, 2, *n++);
|
||
++
|
||
++ ret = BN_GENCB_call(cb, GENCB_NEXT, *n++);
|
||
+ if (!ret)
|
||
+ return -1;
|
||
+- if (retries == 4) {
|
||
++ if (retries == PRIME_RETRY_COUNT) {
|
||
+ *num = -1;
|
||
+ *bitse = 0;
|
||
+ retries = 0;
|
||
+@@ -244,8 +240,8 @@ static int check_rsa_prime_sufficient(int *num, const int *bitsr,
|
||
+ retries++;
|
||
+ return BN_REDO;
|
||
+ }
|
||
+- /* Use the number 3 to indicate whether the generator has been found. */
|
||
+- ret = BN_GENCB_call(cb, 3, *num);
|
||
++
|
||
++ ret = BN_GENCB_call(cb, GENCB_RETRY, *num);
|
||
+ if (!ret)
|
||
+ return BN_ERR;
|
||
+ retries = 0;
|
||
+@@ -320,8 +316,7 @@ static int check_rsa_prime_useful(const int *n, struct rsa_prime_param *param,
|
||
+ else
|
||
+ return BN_ERR;
|
||
+
|
||
+- /* Use the number 2 to indicate whether a prime has been found. */
|
||
+- if (!BN_GENCB_call(cb, 2, *n++))
|
||
++ if (!BN_GENCB_call(cb, GENCB_NEXT, *n++))
|
||
+ return BN_ERR;
|
||
+
|
||
+ return GET_ERR_FINISH;
|
||
+diff --git a/src/uadk_sm2.c b/src/uadk_sm2.c
|
||
+index 8a9adca..578d2d8 100644
|
||
+--- a/src/uadk_sm2.c
|
||
++++ b/src/uadk_sm2.c
|
||
+@@ -34,12 +34,12 @@ enum {
|
||
+ typedef struct {
|
||
+ /* Key and paramgen group */
|
||
+ EC_GROUP *gen_group;
|
||
+- /* message digest */
|
||
++ /* Message digest */
|
||
+ const EVP_MD *md;
|
||
+ /* Distinguishing Identifier, ISO/IEC 15946-3 */
|
||
+ uint8_t *id;
|
||
+ size_t id_len;
|
||
+- /* id_set indicates if the 'id' field is set (1) or not (0) */
|
||
++ /* Indicates if the 'id' field is set (1) or not (0) */
|
||
+ int id_set;
|
||
+ } SM2_PKEY_CTX;
|
||
+
|
||
+@@ -557,8 +557,7 @@ static size_t ec_field_size(const EC_GROUP *group)
|
||
+ if (!EC_GROUP_get_curve(group, p, a, b, NULL))
|
||
+ goto done;
|
||
+
|
||
+- /* Pad and convert bits to bytes */
|
||
+- field_size = (BN_num_bits(p) + 7) / 8;
|
||
++ field_size = BITS_TO_BYTES(BN_num_bits(p));
|
||
+
|
||
+ done:
|
||
+ BN_free(p);
|
||
+@@ -1172,7 +1171,7 @@ static int sm2_set_ctx_id(struct sm2_ctx *smctx, int p1, const void *p2)
|
||
+ OPENSSL_free(smctx->ctx.id);
|
||
+ smctx->ctx.id = tmp_id;
|
||
+ } else {
|
||
+- /* set null-ID */
|
||
++ /* Set null-ID */
|
||
+ OPENSSL_free(smctx->ctx.id);
|
||
+ smctx->ctx.id = NULL;
|
||
+ }
|
||
+@@ -1231,7 +1230,7 @@ static int sm2_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
|
||
+ *(size_t *)p2 = smctx->ctx.id_len;
|
||
+ return 1;
|
||
+ case EVP_PKEY_CTRL_DIGESTINIT:
|
||
+- /* nothing to be inited, this is to suppress the error... */
|
||
++ /* Nothing to be inited, for suppress the error */
|
||
+ return 1;
|
||
+ default:
|
||
+ fprintf(stderr, "sm2 ctrl type = %d error\n", type);
|
||
+@@ -1323,20 +1322,22 @@ static int check_digest_evp_lib(const EVP_MD *digest, EVP_MD_CTX *hash,
|
||
+ }
|
||
+
|
||
+ /* Z = h(ENTL || ID || a || b || xG || yG || xA || yA) */
|
||
+- if (id_len >= (UINT16_MAX / 8)) {
|
||
++ if (id_len >= (UINT16_MAX >> TRANS_BITS_BYTES_SHIFT)) {
|
||
+ fprintf(stderr, "id too large\n");
|
||
+ return 0;
|
||
+ }
|
||
+
|
||
+- entl = (uint16_t)(8 * id_len);
|
||
++ entl = (uint16_t)(id_len << TRANS_BITS_BYTES_SHIFT);
|
||
+
|
||
+- e_byte = entl >> 8;
|
||
++ /* Update the most significant (first) byte of 'entl' */
|
||
++ e_byte = GET_MS_BYTE(entl);
|
||
+ if (!EVP_DigestUpdate(hash, &e_byte, 1)) {
|
||
+ fprintf(stderr, "error evp lib\n");
|
||
+ return 0;
|
||
+ }
|
||
+
|
||
+- e_byte = entl & 0xFF;
|
||
++ /* Update the least significant (second) byte of 'entl' */
|
||
++ e_byte = GET_LS_BYTE(entl);
|
||
+ if (!EVP_DigestUpdate(hash, &e_byte, 1)) {
|
||
+ fprintf(stderr, "error evp lib\n");
|
||
+ return 0;
|
||
+@@ -1516,7 +1517,7 @@ static int sm2_digest_custom(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)
|
||
+ return 0;
|
||
+ }
|
||
+
|
||
+- /* get hashed prefix 'z' of tbs message */
|
||
++ /* Get hashed prefix 'z' of tbs message */
|
||
+ if (!sm2_compute_z_digest(z, md, smctx->ctx.id, smctx->ctx.id_len, ec))
|
||
+ return 0;
|
||
+
|
||
+--
|
||
+1.8.3.1
|
||
+
|
||
diff --git a/0067-uadk_engine-cleanup-header-file.patch b/0067-uadk_engine-cleanup-header-file.patch
|
||
new file mode 100644
|
||
index 0000000..b6f7fbc
|
||
--- /dev/null
|
||
+++ b/0067-uadk_engine-cleanup-header-file.patch
|
||
@@ -0,0 +1,250 @@
|
||
+From 1dd1503428df2b33f679f81b1541a4314fe0aa11 Mon Sep 17 00:00:00 2001
|
||
+From: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+Date: Sat, 22 Oct 2022 15:56:54 +0800
|
||
+Subject: uadk_engine: cleanup header file
|
||
+
|
||
+Remove redundant header file and modify magic number.
|
||
+
|
||
+Signed-off-by: Zhiqi Song <songzhiqi1@huawei.com>
|
||
+---
|
||
+ src/uadk.h | 3 ---
|
||
+ src/uadk_async.c | 1 +
|
||
+ src/uadk_async.h | 2 +-
|
||
+ src/uadk_cipher.c | 1 +
|
||
+ src/uadk_dh.c | 1 +
|
||
+ src/uadk_digest.c | 2 ++
|
||
+ src/uadk_ec.c | 1 +
|
||
+ src/uadk_ecx.c | 2 +-
|
||
+ src/uadk_pkey.c | 5 ++++-
|
||
+ src/uadk_rsa.c | 6 +++++-
|
||
+ src/uadk_sm2.c | 7 +++++--
|
||
+ 11 files changed, 22 insertions(+), 9 deletions(-)
|
||
+
|
||
+diff --git a/src/uadk.h b/src/uadk.h
|
||
+index 99c65c7..30c099f 100644
|
||
+--- a/src/uadk.h
|
||
++++ b/src/uadk.h
|
||
+@@ -18,9 +18,6 @@
|
||
+ #ifndef UADK_H
|
||
+ #define UADK_H
|
||
+ #include <openssl/engine.h>
|
||
+-#include <uadk/wd.h>
|
||
+-#include <uadk/wd_sched.h>
|
||
+-#include "uadk_utils.h"
|
||
+
|
||
+ #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||
+ #define ENV_STRING_LEN 256
|
||
+diff --git a/src/uadk_async.c b/src/uadk_async.c
|
||
+index 3f2e1db..2edd6ea 100644
|
||
+--- a/src/uadk_async.c
|
||
++++ b/src/uadk_async.c
|
||
+@@ -20,6 +20,7 @@
|
||
+ #include <string.h>
|
||
+ #include <sys/eventfd.h>
|
||
+ #include <unistd.h>
|
||
++#include <openssl/async.h>
|
||
+ #include "uadk.h"
|
||
+ #include "uadk_async.h"
|
||
+
|
||
+diff --git a/src/uadk_async.h b/src/uadk_async.h
|
||
+index 9bae3f4..8a4822e 100644
|
||
+--- a/src/uadk_async.h
|
||
++++ b/src/uadk_async.h
|
||
+@@ -19,8 +19,8 @@
|
||
+ #define UADK_ASYNC_H
|
||
+
|
||
+ #include <stdbool.h>
|
||
+-#include <openssl/async.h>
|
||
+ #include <semaphore.h>
|
||
++#include <openssl/async.h>
|
||
+
|
||
+ #define ASYNC_QUEUE_TASK_NUM 1024
|
||
+
|
||
+diff --git a/src/uadk_cipher.c b/src/uadk_cipher.c
|
||
+index de5f078..cc06429 100644
|
||
+--- a/src/uadk_cipher.c
|
||
++++ b/src/uadk_cipher.c
|
||
+@@ -22,6 +22,7 @@
|
||
+ #include <dlfcn.h>
|
||
+ #include <openssl/engine.h>
|
||
+ #include <uadk/wd_cipher.h>
|
||
++#include <uadk/wd_sched.h>
|
||
+ #include "uadk.h"
|
||
+ #include "uadk_async.h"
|
||
+
|
||
+diff --git a/src/uadk_dh.c b/src/uadk_dh.c
|
||
+index 6356872..680564c 100644
|
||
+--- a/src/uadk_dh.c
|
||
++++ b/src/uadk_dh.c
|
||
+@@ -23,6 +23,7 @@
|
||
+ #include <openssl/dh.h>
|
||
+ #include <string.h>
|
||
+ #include <uadk/wd_dh.h>
|
||
++#include <uadk/wd_sched.h>
|
||
+ #include "uadk.h"
|
||
+ #include "uadk_async.h"
|
||
+
|
||
+diff --git a/src/uadk_digest.c b/src/uadk_digest.c
|
||
+index 9d009a9..26a6272 100644
|
||
+--- a/src/uadk_digest.c
|
||
++++ b/src/uadk_digest.c
|
||
+@@ -25,8 +25,10 @@
|
||
+ #include <openssl/evp.h>
|
||
+ #include <uadk/wd_cipher.h>
|
||
+ #include <uadk/wd_digest.h>
|
||
++#include <uadk/wd_sched.h>
|
||
+ #include "uadk.h"
|
||
+ #include "uadk_async.h"
|
||
++#include "uadk_utils.h"
|
||
+
|
||
+ #define UADK_DO_SOFT (-0xE0)
|
||
+ #define CTX_SYNC 0
|
||
+diff --git a/src/uadk_ec.c b/src/uadk_ec.c
|
||
+index 9b48ae7..6106083 100644
|
||
+--- a/src/uadk_ec.c
|
||
++++ b/src/uadk_ec.c
|
||
+@@ -23,6 +23,7 @@
|
||
+ #include <openssl/err.h>
|
||
+ #include <openssl/ec.h>
|
||
+ #include <uadk/wd_ecc.h>
|
||
++#include <uadk/wd_sched.h>
|
||
+ #include "uadk_pkey.h"
|
||
+ #include "uadk.h"
|
||
+
|
||
+diff --git a/src/uadk_ecx.c b/src/uadk_ecx.c
|
||
+index 67042a3..b62f81d 100644
|
||
+--- a/src/uadk_ecx.c
|
||
++++ b/src/uadk_ecx.c
|
||
+@@ -14,7 +14,6 @@
|
||
+ * limitations under the License.
|
||
+ *
|
||
+ */
|
||
+-#include <errno.h>
|
||
+ #include <string.h>
|
||
+ #include <openssl/bn.h>
|
||
+ #include <openssl/engine.h>
|
||
+@@ -24,6 +23,7 @@
|
||
+ #include <openssl/ec.h>
|
||
+ #include <openssl/evp.h>
|
||
+ #include <uadk/wd_ecc.h>
|
||
++#include <uadk/wd_sched.h>
|
||
+ #include "uadk_pkey.h"
|
||
+ #include "uadk.h"
|
||
+
|
||
+diff --git a/src/uadk_pkey.c b/src/uadk_pkey.c
|
||
+index 6b5ae9a..7b7a345 100644
|
||
+--- a/src/uadk_pkey.c
|
||
++++ b/src/uadk_pkey.c
|
||
+@@ -17,6 +17,7 @@
|
||
+ #include <openssl/engine.h>
|
||
+ #include <uadk/wd.h>
|
||
+ #include <uadk/wd_ecc.h>
|
||
++#include <uadk/wd_sched.h>
|
||
+ #include "uadk_async.h"
|
||
+ #include "uadk.h"
|
||
+ #include "uadk_pkey.h"
|
||
+@@ -381,6 +382,7 @@ int uadk_ecc_set_private_key(handle_t sess, const EC_KEY *eckey)
|
||
+ const EC_GROUP *group;
|
||
+ struct wd_dtb prikey;
|
||
+ const BIGNUM *d;
|
||
++ size_t degree;
|
||
+ int buflen;
|
||
+ int ret;
|
||
+
|
||
+@@ -396,7 +398,8 @@ int uadk_ecc_set_private_key(handle_t sess, const EC_KEY *eckey)
|
||
+ return -EINVAL;
|
||
+ }
|
||
+
|
||
+- buflen = BITS_TO_BYTES(EC_GROUP_get_degree(group));
|
||
++ degree = EC_GROUP_get_degree(group);
|
||
++ buflen = BITS_TO_BYTES(degree);
|
||
+ ecc_key = wd_ecc_get_key(sess);
|
||
+ prikey.data = (void *)bin;
|
||
+ prikey.dsize = BN_bn2binpad(d, bin, buflen);
|
||
+diff --git a/src/uadk_rsa.c b/src/uadk_rsa.c
|
||
+index e9a2c53..96c898f 100644
|
||
+--- a/src/uadk_rsa.c
|
||
++++ b/src/uadk_rsa.c
|
||
+@@ -20,6 +20,7 @@
|
||
+ #include <openssl/ossl_typ.h>
|
||
+ #include <openssl/rsa.h>
|
||
+ #include <uadk/wd_rsa.h>
|
||
++#include <uadk/wd_sched.h>
|
||
+ #include "uadk_async.h"
|
||
+ #include "uadk.h"
|
||
+
|
||
+@@ -55,6 +56,7 @@
|
||
+ #define PRIME_RETRY_COUNT 4
|
||
+ #define GENCB_NEXT 2
|
||
+ #define GENCB_RETRY 3
|
||
++#define PRIME_CHECK_BIT_NUM 4
|
||
+
|
||
+ static RSA_METHOD *rsa_hw_meth;
|
||
+
|
||
+@@ -210,7 +212,7 @@ static int check_rsa_prime_sufficient(int *num, const int *bitsr,
|
||
+ * key by using the modulus in a certificate. This is also covered
|
||
+ * by checking the length should not be less than 0x9.
|
||
+ */
|
||
+- if (!BN_rshift(param->r2, param->r1, *bitse - 4))
|
||
++ if (!BN_rshift(param->r2, param->r1, *bitse - PRIME_CHECK_BIT_NUM))
|
||
+ return BN_ERR;
|
||
+
|
||
+ bitst = BN_get_word(param->r2);
|
||
+@@ -231,6 +233,7 @@ static int check_rsa_prime_sufficient(int *num, const int *bitsr,
|
||
+ ret = BN_GENCB_call(cb, GENCB_NEXT, *n++);
|
||
+ if (!ret)
|
||
+ return -1;
|
||
++
|
||
+ if (retries == PRIME_RETRY_COUNT) {
|
||
+ *num = -1;
|
||
+ *bitse = 0;
|
||
+@@ -288,6 +291,7 @@ static int check_rsa_prime_useful(const int *n, struct rsa_prime_param *param,
|
||
+ BIGNUM *e_pub, BN_CTX *ctx, BN_GENCB *cb)
|
||
+ {
|
||
+ unsigned long err;
|
||
++
|
||
+ /*
|
||
+ * BN_sub(r,a,b) substracts b from a and place the result in r,
|
||
+ * r = a-b.
|
||
+diff --git a/src/uadk_sm2.c b/src/uadk_sm2.c
|
||
+index 578d2d8..b14fbcf 100644
|
||
+--- a/src/uadk_sm2.c
|
||
++++ b/src/uadk_sm2.c
|
||
+@@ -22,6 +22,7 @@
|
||
+ #include <openssl/ossl_typ.h>
|
||
+ #include <openssl/err.h>
|
||
+ #include <uadk/wd_ecc.h>
|
||
++#include <uadk/wd_sched.h>
|
||
+ #include "uadk.h"
|
||
+ #include "uadk_pkey.h"
|
||
+
|
||
+@@ -550,6 +551,7 @@ static size_t ec_field_size(const EC_GROUP *group)
|
||
+ BIGNUM *a = BN_new();
|
||
+ BIGNUM *b = BN_new();
|
||
+ size_t field_size = 0;
|
||
++ size_t p_bits;
|
||
+
|
||
+ if (p == NULL || a == NULL || b == NULL)
|
||
+ goto done;
|
||
+@@ -557,7 +559,8 @@ static size_t ec_field_size(const EC_GROUP *group)
|
||
+ if (!EC_GROUP_get_curve(group, p, a, b, NULL))
|
||
+ goto done;
|
||
+
|
||
+- field_size = BITS_TO_BYTES(BN_num_bits(p));
|
||
++ p_bits = BN_num_bits(p);
|
||
++ field_size = BITS_TO_BYTES(p_bits);
|
||
+
|
||
+ done:
|
||
+ BN_free(p);
|
||
+@@ -598,7 +601,7 @@ static int sm2_ciphertext_size(const EC_KEY *key,
|
||
+ * Integer and string are simple type; set constructed = 0, means
|
||
+ * primitive and definite length encoding.
|
||
+ */
|
||
+- sz = 2 * ASN1_object_size(0, field_size + 1, V_ASN1_INTEGER)
|
||
++ sz = ECC_POINT_SIZE(ASN1_object_size(0, field_size + 1, V_ASN1_INTEGER))
|
||
+ + ASN1_object_size(0, md_size, V_ASN1_OCTET_STRING)
|
||
+ + ASN1_object_size(0, msg_len, V_ASN1_OCTET_STRING);
|
||
+ *ct_size = ASN1_object_size(1, sz, V_ASN1_SEQUENCE);
|
||
+--
|
||
+1.8.3.1
|
||
+
|
||
diff --git a/uadk_engine.spec b/uadk_engine.spec
|
||
index 4e32f87..b2cd083 100644
|
||
--- a/uadk_engine.spec
|
||
+++ b/uadk_engine.spec
|
||
@@ -71,6 +71,16 @@ Patch0054: 0054-doc-Modify-maintainers.patch
|
||
Patch0055: 0055-rsa-modify-the-default-algorithm-of-keygen-soft-algo.patch
|
||
Patch0056: 0056-engine-initialize-resources-only-once.patch
|
||
Patch0057: 0057-engine-fix-function-type.patch
|
||
+Patch0058: 0058-uadk_digest-fix-the-full-mac-buffer-length-as-doing-.patch
|
||
+Patch0059: 0059-uadk_utils-fix-x86-local-build.patch
|
||
+Patch0060: 0060-sm2-bugfix-about-segfault-in-sm2-ctrl-function.patch
|
||
+Patch0061: 0061-uadk_engine-use-HW_V2-HW_V3-to-distinguish-different.patch
|
||
+Patch0062: 0062-uadk-engine-update-the-numa-parameter-of-the-schedul.patch
|
||
+Patch0063: 0063-uadk_engine-bugfix-side-effects-of-right-operand.patch
|
||
+Patch0064: 0064-uadk_engine-cleanup-static-check-warning-of-clangtid.patch
|
||
+Patch0065: 0065-uadk_engine-bugfix-enable-environment-variable.patch
|
||
+Patch0066: 0066-uadk_engine-cleanup-magic-number-and-comments.patch
|
||
+Patch0067: 0067-uadk_engine-cleanup-header-file.patch
|
||
|
||
%description
|
||
This package contains the UADK Accelerator Engine
|
||
@@ -120,6 +130,9 @@ fi
|
||
/sbin/ldconfig
|
||
|
||
%changelog
|
||
+* Fri Aug 19 2023 JiangShui Yang <yangjiangshui@h-partners.com> 1.0.0-9
|
||
+- Backport uadk engine patch for v1.0.1
|
||
+
|
||
* Fri Aug 19 2023 JiangShui Yang <yangjiangshui@h-partners.com> 1.0.0-8
|
||
- Eable debuginfo for fix strip
|
||
|
||
--
|
||
2.25.1
|
||
|