| From 16483b18a9980575bee23898b2dbfbe2a4675d84 Mon Sep 17 00:00:00 2001 |
| From: Klemens Nanni <kn@openbsd.org> |
| Date: Sat, 15 Jan 2022 23:19:35 +0300 |
| Subject: [PATCH] Remove compatibility code for legacy OpenSSL to fix LibreSSL |
| build |
| |
| In current LibreSSL, `HMAC_CTX` aka. `struct hmac_ctx_st` is an opaque |
| structure as of LibreSSL hmac.h revision 1.15 (14.01.2022) [0], thus |
| `sizeof(HMAC_CTX)` fails to compile. |
| |
| The non-legacy code path should compile with LibreSSL versions as old |
| as 2.7.0 (21.03.2018). |
| |
| Found while building https://github.com/desktop-app/tg_owt which bundles |
| libsrtp 2.2.0 [1] on OpenBSD 7.0 -CURRENT/with latest LibreSSL. |
| |
| Suggestion to remove the legacy code from Theo Buehler, thanks. |
| |
| 0: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libcrypto/hmac/hmac.h?rev=1.15&content-type=text/x-cvsweb-markup |
| 1: https://github.com/desktop-app/tg_owt/blob/6708e0d31a73e64fe12f54829bf4060c41b2658e/src/third_party/libsrtp/crypto/hash/hmac_ossl.c#L85 |
| |
| [Retrieved from: |
| https://github.com/cisco/libsrtp/commit/16483b18a9980575bee23898b2dbfbe2a4675d84] |
| Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com> |
| --- |
| crypto/hash/hmac_ossl.c | 29 ----------------------------- |
| 1 file changed, 29 deletions(-) |
| |
| diff --git a/crypto/hash/hmac_ossl.c b/crypto/hash/hmac_ossl.c |
| index ee6b0b58..c23c7f21 100644 |
| --- a/crypto/hash/hmac_ossl.c |
| +++ b/crypto/hash/hmac_ossl.c |
| @@ -78,26 +78,6 @@ static srtp_err_status_t srtp_hmac_alloc(srtp_auth_t **a, |
| return srtp_err_status_bad_param; |
| } |
| |
| -/* OpenSSL 1.1.0 made HMAC_CTX an opaque structure, which must be allocated |
| - using HMAC_CTX_new. But this function doesn't exist in OpenSSL 1.0.x. */ |
| -#if OPENSSL_VERSION_NUMBER < 0x10100000L || LIBRESSL_VERSION_NUMBER |
| - { |
| - /* allocate memory for auth and HMAC_CTX structures */ |
| - uint8_t *pointer; |
| - HMAC_CTX *new_hmac_ctx; |
| - pointer = (uint8_t *)srtp_crypto_alloc(sizeof(HMAC_CTX) + |
| - sizeof(srtp_auth_t)); |
| - if (pointer == NULL) { |
| - return srtp_err_status_alloc_fail; |
| - } |
| - *a = (srtp_auth_t *)pointer; |
| - (*a)->state = pointer + sizeof(srtp_auth_t); |
| - new_hmac_ctx = (HMAC_CTX *)((*a)->state); |
| - |
| - HMAC_CTX_init(new_hmac_ctx); |
| - } |
| - |
| -#else |
| *a = (srtp_auth_t *)srtp_crypto_alloc(sizeof(srtp_auth_t)); |
| if (*a == NULL) { |
| return srtp_err_status_alloc_fail; |
| @@ -109,7 +89,6 @@ static srtp_err_status_t srtp_hmac_alloc(srtp_auth_t **a, |
| *a = NULL; |
| return srtp_err_status_alloc_fail; |
| } |
| -#endif |
| |
| /* set pointers */ |
| (*a)->type = &srtp_hmac; |
| @@ -126,18 +105,10 @@ static srtp_err_status_t srtp_hmac_dealloc(srtp_auth_t *a) |
| |
| hmac_ctx = (HMAC_CTX *)a->state; |
| |
| -#if OPENSSL_VERSION_NUMBER < 0x10100000L || LIBRESSL_VERSION_NUMBER |
| - HMAC_CTX_cleanup(hmac_ctx); |
| - |
| - /* zeroize entire state*/ |
| - octet_string_set_to_zero(a, sizeof(HMAC_CTX) + sizeof(srtp_auth_t)); |
| - |
| -#else |
| HMAC_CTX_free(hmac_ctx); |
| |
| /* zeroize entire state*/ |
| octet_string_set_to_zero(a, sizeof(srtp_auth_t)); |
| -#endif |
| |
| /* free memory */ |
| srtp_crypto_free(a); |