From 5311736cd1702ae32c649fe45a55846fe3839c9c Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Sat, 9 Apr 2022 11:22:59 +0000 Subject: [PATCH] iscsi: use EVP APIs for md5 calculations OpenSSL 3.0 deprecated the MD5_xxx APIs, so switch the md5 code in the iscsi library to use the EVP APIs recommended by OpenSSL instead. Signed-off-by: Jim Harris Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12240 (master) (cherry picked from commit 92f0be87a0d4b78723ae694dba7834217ce63b9e) Change-Id: Ic5e3cd6e30ebc8b027f0715434cc3be045f1b770 Signed-off-by: Krzysztof Karas Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12482 Reviewed-by: Tomasz Zawadzki Reviewed-by: Konrad Sztyber Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins --- lib/iscsi/md5.c | 22 ++++++++++++++++------ lib/iscsi/md5.h | 3 ++- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lib/iscsi/md5.c b/lib/iscsi/md5.c index c316ac354..1a87f09fd 100644 --- a/lib/iscsi/md5.c +++ b/lib/iscsi/md5.c @@ -33,9 +33,6 @@ */ #include "spdk/stdinc.h" - -#include - #include "iscsi/md5.h" int md5init(struct spdk_md5ctx *md5ctx) @@ -45,7 +42,18 @@ int md5init(struct spdk_md5ctx *md5ctx) if (md5ctx == NULL) { return -1; } - rc = MD5_Init(&md5ctx->md5ctx); + + md5ctx->md5ctx = EVP_MD_CTX_create(); + if (md5ctx->md5ctx == NULL) { + return -1; + } + + rc = EVP_DigestInit_ex(md5ctx->md5ctx, EVP_md5(), NULL); + /* For EVP_DigestInit_ex, 1 == success, 0 == failure. */ + if (rc == 0) { + EVP_MD_CTX_destroy(md5ctx->md5ctx); + md5ctx->md5ctx = NULL; + } return rc; } @@ -56,7 +64,9 @@ int md5final(void *md5, struct spdk_md5ctx *md5ctx) if (md5ctx == NULL || md5 == NULL) { return -1; } - rc = MD5_Final(md5, &md5ctx->md5ctx); + rc = EVP_DigestFinal_ex(md5ctx->md5ctx, md5, NULL); + EVP_MD_CTX_destroy(md5ctx->md5ctx); + md5ctx->md5ctx = NULL; return rc; } @@ -70,6 +80,6 @@ int md5update(struct spdk_md5ctx *md5ctx, const void *data, size_t len) if (data == NULL || len == 0) { return 0; } - rc = MD5_Update(&md5ctx->md5ctx, data, len); + rc = EVP_DigestUpdate(md5ctx->md5ctx, data, len); return rc; } diff --git a/lib/iscsi/md5.h b/lib/iscsi/md5.h index d6fc4c1ff..5a307983f 100644 --- a/lib/iscsi/md5.h +++ b/lib/iscsi/md5.h @@ -38,11 +38,12 @@ #include "spdk/stdinc.h" #include +#include #define SPDK_MD5DIGEST_LEN MD5_DIGEST_LENGTH struct spdk_md5ctx { - MD5_CTX md5ctx; + EVP_MD_CTX *md5ctx; }; int md5init(struct spdk_md5ctx *md5ctx);