63 lines
1.7 KiB
Diff
63 lines
1.7 KiB
Diff
From f4f8c9a20fa60b2b8c97a3b2a5b0edef1fc896b7 Mon Sep 17 00:00:00 2001
|
|
From: Zhiqi Song <songzhiqi1@huawei.com>
|
|
Date: Sat, 25 Nov 2023 16:13:17 +0800
|
|
Subject: [PATCH 66/82] ecc: optimize sm2 sign check function
|
|
|
|
Enable users to pass NULL sign parameter to obtain the
|
|
length of the signature result. If users want to do actual
|
|
signature task, they need to call the signature function a
|
|
second time.
|
|
|
|
Signed-off-by: Zhiqi Song <songzhiqi1@huawei.com>
|
|
---
|
|
src/uadk_sm2.c | 19 +++++++++++++------
|
|
1 file changed, 13 insertions(+), 6 deletions(-)
|
|
|
|
diff --git a/src/uadk_sm2.c b/src/uadk_sm2.c
|
|
index f393641..df760fe 100644
|
|
--- a/src/uadk_sm2.c
|
|
+++ b/src/uadk_sm2.c
|
|
@@ -26,6 +26,8 @@
|
|
#include "uadk.h"
|
|
#include "uadk_pkey.h"
|
|
|
|
+#define GET_SIGNLEN 1
|
|
+
|
|
enum {
|
|
CTX_INIT_FAIL = -1,
|
|
CTX_UNINIT,
|
|
@@ -673,6 +675,17 @@ static int sm2_sign_check(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
|
|
EC_KEY *ec = EVP_PKEY_get0(p_key);
|
|
const int sig_sz = ECDSA_size(ec);
|
|
|
|
+ /*
|
|
+ * If 'sig' is NULL, users can use sm2_decrypt API to obtain the valid 'siglen' first,
|
|
+ * then users use the value of 'signlen' to alloc the memory of 'sig' and call the
|
|
+ * sm2_decrypt API a second time to do the decryption task.
|
|
+ */
|
|
+ if (!sig) {
|
|
+ fprintf(stderr, "sig is NULL, get valid siglen\n");
|
|
+ *siglen = (size_t)sig_sz;
|
|
+ return GET_SIGNLEN;
|
|
+ }
|
|
+
|
|
if (!smctx || !smctx->sess) {
|
|
fprintf(stderr, "smctx or sess NULL\n");
|
|
return UADK_DO_SOFT;
|
|
@@ -693,12 +706,6 @@ static int sm2_sign_check(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
|
|
return -EINVAL;
|
|
}
|
|
|
|
- if (!sig) {
|
|
- fprintf(stderr, "invalid: sig is NULL\n");
|
|
- *siglen = (size_t)sig_sz;
|
|
- return -EINVAL;
|
|
- }
|
|
-
|
|
if (tbslen > SM2_KEY_BYTES)
|
|
return UADK_DO_SOFT;
|
|
|
|
--
|
|
2.25.1
|
|
|