| From 29a4c3a518d13bfc0a07915e7e87fbec2b66597c Mon Sep 17 00:00:00 2001 |
| From: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
| Date: Mon, 13 Feb 2023 08:55:11 +0100 |
| Subject: [PATCH] SHA3 is not supported by libressl |
| |
| Disable SHA3 with libressl as it is not supported resulting in the |
| following build failure: |
| |
| /home/buildroot/autobuild/instance-3/output-1/host/lib/gcc/or1k-buildroot-linux-gnu/11.3.0/../../../../or1k-buildroot-linux-gnu/bin/ld: iscsid.p/usr_auth.c.o: in function `auth_hash_init': |
| auth.c:(.text+0x7bc): undefined reference to `EVP_sha3_256' |
| |
| Fixes: |
| - http://autobuild.buildroot.org/results/48a4bddc355956733d712214797350cca8e111d9 |
| |
| Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
| [Upstream status: https://github.com/open-iscsi/open-iscsi/pull/396] |
| --- |
| libopeniscsiusr/idbm.h | 2 ++ |
| usr/auth.c | 13 ++++++++++++- |
| usr/auth.h | 4 ++++ |
| usr/idbm.c | 2 ++ |
| 4 files changed, 20 insertions(+), 1 deletion(-) |
| |
| diff --git a/libopeniscsiusr/idbm.h b/libopeniscsiusr/idbm.h |
| index be5986f..1043b27 100644 |
| --- a/libopeniscsiusr/idbm.h |
| +++ b/libopeniscsiusr/idbm.h |
| @@ -56,7 +56,9 @@ enum iscsi_chap_algs { |
| ISCSI_AUTH_CHAP_ALG_MD5 = 5, |
| ISCSI_AUTH_CHAP_ALG_SHA1 = 6, |
| ISCSI_AUTH_CHAP_ALG_SHA256 = 7, |
| +#ifndef LIBRESSL_VERSION_NUMBER |
| ISCSI_AUTH_CHAP_ALG_SHA3_256 = 8, |
| +#endif |
| AUTH_CHAP_ALG_MAX_COUNT = 5, |
| }; |
| |
| diff --git a/usr/auth.c b/usr/auth.c |
| index 46c328e..5f50e26 100644 |
| --- a/usr/auth.c |
| +++ b/usr/auth.c |
| @@ -181,9 +181,11 @@ static int auth_hash_init(EVP_MD_CTX **context, int chap_alg) { |
| case AUTH_CHAP_ALG_SHA256: |
| digest = EVP_sha256(); |
| break; |
| +#ifndef LIBRESSL_VERSION_NUMBER |
| case AUTH_CHAP_ALG_SHA3_256: |
| digest = EVP_sha3_256(); |
| break; |
| +#endif |
| } |
| |
| if (*context == NULL) |
| @@ -298,7 +300,9 @@ static int |
| acl_chk_chap_alg_optn(int chap_algorithm) |
| { |
| if (chap_algorithm == AUTH_OPTION_NONE || |
| +#ifndef LIBRESSL_VERSION_NUMBER |
| chap_algorithm == AUTH_CHAP_ALG_SHA3_256 || |
| +#endif |
| chap_algorithm == AUTH_CHAP_ALG_SHA256 || |
| chap_algorithm == AUTH_CHAP_ALG_SHA1 || |
| chap_algorithm == AUTH_CHAP_ALG_MD5) |
| @@ -711,9 +715,11 @@ acl_chk_chap_alg_key(struct iscsi_acl *client) |
| case AUTH_CHAP_ALG_SHA256: |
| client->chap_challenge_len = AUTH_CHAP_SHA256_RSP_LEN; |
| break; |
| +#ifndef LIBRESSL_VERSION_NUMBER |
| case AUTH_CHAP_ALG_SHA3_256: |
| client->chap_challenge_len = AUTH_CHAP_SHA3_256_RSP_LEN; |
| break; |
| +#endif |
| } |
| return; |
| } |
| @@ -862,7 +868,10 @@ acl_local_auth(struct iscsi_acl *client) |
| client->local_state = AUTH_LOCAL_STATE_ERROR; |
| client->dbg_status = AUTH_DBG_STATUS_CHAP_ALG_REJECT; |
| break; |
| - } else if ((client->negotiated_chap_alg != AUTH_CHAP_ALG_SHA3_256) && |
| + } else if ( |
| +#ifndef LIBRESSL_VERSION_NUMBER |
| + (client->negotiated_chap_alg != AUTH_CHAP_ALG_SHA3_256) && |
| +#endif |
| (client->negotiated_chap_alg != AUTH_CHAP_ALG_SHA256) && |
| (client->negotiated_chap_alg != AUTH_CHAP_ALG_SHA1) && |
| (client->negotiated_chap_alg != AUTH_CHAP_ALG_MD5)) { |
| @@ -1824,6 +1833,7 @@ acl_init_chap_digests(int *value_list, unsigned *chap_algs, int conf_count) { |
| "SHA256 due to crypto lib configuration"); |
| } |
| break; |
| +#ifndef LIBRESSL_VERSION_NUMBER |
| case AUTH_CHAP_ALG_SHA3_256: |
| if (EVP_DigestInit_ex(context, EVP_sha3_256(), NULL)) { |
| value_list[i++] = AUTH_CHAP_ALG_SHA3_256; |
| @@ -1832,6 +1842,7 @@ acl_init_chap_digests(int *value_list, unsigned *chap_algs, int conf_count) { |
| "SHA3-256 due to crypto lib configuration"); |
| } |
| break; |
| +#endif |
| case ~0: |
| /* unset value in array, just ignore */ |
| break; |
| diff --git a/usr/auth.h b/usr/auth.h |
| index 16cdb24..9357772 100644 |
| --- a/usr/auth.h |
| +++ b/usr/auth.h |
| @@ -32,7 +32,9 @@ enum { |
| AUTH_CHAP_MD5_RSP_LEN = 16, |
| AUTH_CHAP_SHA1_RSP_LEN = 20, |
| AUTH_CHAP_SHA256_RSP_LEN = 32, |
| +#ifndef LIBRESSL_VERSION_NUMBER |
| AUTH_CHAP_SHA3_256_RSP_LEN = 32, |
| +#endif |
| AUTH_CHAP_RSP_MAX = 32, |
| }; |
| |
| @@ -67,7 +69,9 @@ enum { |
| AUTH_CHAP_ALG_MD5 = 5, |
| AUTH_CHAP_ALG_SHA1 = 6, |
| AUTH_CHAP_ALG_SHA256 = 7, |
| +#ifndef LIBRESSL_VERSION_NUMBER |
| AUTH_CHAP_ALG_SHA3_256 = 8, |
| +#endif |
| AUTH_CHAP_ALG_MAX_COUNT = 5 |
| }; |
| |
| diff --git a/usr/idbm.c b/usr/idbm.c |
| index 90bc142..082e1c6 100644 |
| --- a/usr/idbm.c |
| +++ b/usr/idbm.c |
| @@ -200,7 +200,9 @@ static struct int_list_tbl { |
| { "MD5", AUTH_CHAP_ALG_MD5 }, |
| { "SHA1", AUTH_CHAP_ALG_SHA1 }, |
| { "SHA256", AUTH_CHAP_ALG_SHA256 }, |
| +#ifndef LIBRESSL_VERSION_NUMBER |
| { "SHA3-256", AUTH_CHAP_ALG_SHA3_256 }, |
| +#endif |
| }; |
| |
| static void |
| -- |
| 2.39.0 |
| |