96 lines
3.0 KiB
Diff
96 lines
3.0 KiB
Diff
From c56df72b255482f6bdc928f08fbfc2304deb526d Mon Sep 17 00:00:00 2001
|
|
From: Zhangfei Gao <zhangfei.gao@linaro.org>
|
|
Date: Mon, 28 Aug 2023 17:38:44 +0800
|
|
Subject: [PATCH 30/48] uadk_prov_digest: provider default may not exist
|
|
|
|
When provider default is not provided, priv->soft_md is NULL
|
|
|
|
Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org>
|
|
---
|
|
src/uadk_prov_digest.c | 34 +++++++++++++++++++++++-----------
|
|
1 file changed, 23 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/src/uadk_prov_digest.c b/src/uadk_prov_digest.c
|
|
index 5456d2d..ecb8d23 100644
|
|
--- a/src/uadk_prov_digest.c
|
|
+++ b/src/uadk_prov_digest.c
|
|
@@ -158,19 +158,30 @@ static int uadk_digests_soft_md(struct digest_priv_ctx *priv)
|
|
|
|
static int uadk_digest_soft_init(struct digest_priv_ctx *priv)
|
|
{
|
|
- return EVP_DigestInit(priv->soft_ctx, priv->soft_md);
|
|
+ if (priv->soft_md)
|
|
+ return EVP_DigestInit_ex(priv->soft_ctx, priv->soft_md, NULL);
|
|
+
|
|
+ return 0;
|
|
}
|
|
|
|
-static int uadk_digest_soft_update(EVP_MD_CTX *ctx, const void *data, size_t len)
|
|
+static int uadk_digest_soft_update(struct digest_priv_ctx *priv,
|
|
+ const void *data, size_t len)
|
|
{
|
|
- return EVP_DigestUpdate(ctx, data, len);
|
|
+ if (priv->soft_md)
|
|
+ return EVP_DigestUpdate(priv->soft_ctx, data, len);
|
|
+
|
|
+ return 0;
|
|
}
|
|
|
|
static int uadk_digest_soft_final(struct digest_priv_ctx *priv, unsigned char *digest)
|
|
{
|
|
- unsigned int digest_length = EVP_MD_get_size(priv->soft_md);
|
|
+ if (priv->soft_md) {
|
|
+ unsigned int digest_length;
|
|
+
|
|
+ return EVP_DigestFinal_ex(priv->soft_ctx, digest, &digest_length);
|
|
+ }
|
|
|
|
- return EVP_DigestFinal(priv->soft_ctx, digest, &digest_length);
|
|
+ return 0;
|
|
}
|
|
|
|
static void digest_soft_cleanup(struct digest_priv_ctx *priv)
|
|
@@ -195,10 +206,13 @@ static void digest_soft_cleanup(struct digest_priv_ctx *priv)
|
|
static int uadk_digest_soft_work(struct digest_priv_ctx *priv, int len,
|
|
unsigned char *digest)
|
|
{
|
|
+ if (!priv->soft_md)
|
|
+ return 0;
|
|
+
|
|
uadk_digest_soft_init(priv);
|
|
|
|
if (len != 0)
|
|
- uadk_digest_soft_update(priv->soft_ctx, priv->data, len);
|
|
+ uadk_digest_soft_update(priv, priv->data, len);
|
|
|
|
uadk_digest_soft_final(priv, digest);
|
|
digest_soft_cleanup(priv);
|
|
@@ -338,13 +352,11 @@ do_soft_digest:
|
|
&& priv->last_update_bufflen != 0) {
|
|
priv->switch_flag = UADK_DO_SOFT;
|
|
uadk_digest_soft_init(priv);
|
|
- ret = uadk_digest_soft_update(priv->soft_ctx,
|
|
- priv->data, priv->last_update_bufflen);
|
|
+ ret = uadk_digest_soft_update(priv, priv->data, priv->last_update_bufflen);
|
|
if (ret != 1)
|
|
return ret;
|
|
|
|
- return uadk_digest_soft_update(priv->soft_ctx,
|
|
- tmpdata, left_len);
|
|
+ return uadk_digest_soft_update(priv, tmpdata, left_len);
|
|
}
|
|
|
|
fprintf(stderr, "do soft digest failed during updating!\n");
|
|
@@ -365,7 +377,7 @@ static int uadk_digest_update(struct digest_priv_ctx *priv, const void *data, si
|
|
return uadk_digest_update_inner(priv, data, data_len);
|
|
|
|
soft_update:
|
|
- return uadk_digest_soft_update(priv->soft_ctx, data, data_len);
|
|
+ return uadk_digest_soft_update(priv, data, data_len);
|
|
}
|
|
|
|
static void uadk_async_cb(struct wd_digest_req *req, void *data)
|
|
--
|
|
2.25.1
|
|
|