AGWA / git-crypt

Transparent file encryption in git
https://www.agwa.name/projects/git-crypt/
GNU General Public License v3.0
8.1k stars 472 forks source link

fix build with libressl >= 3.5.0 #249

Open ffontaine opened 2 years ago

ffontaine commented 2 years ago

Fix the following build failure with libressl >= 3.5.0:

crypto-openssl-10.cpp:78:18: error: field 'ctx' has incomplete type 'HMAC_CTX' {aka 'hmac_ctx_st'}
   78 |         HMAC_CTX ctx;
      |                  ^~~

Fixes:

Signed-off-by: Fabrice Fontaine fontaine.fabrice@gmail.com

loqs commented 2 years ago

What if instead you tested for OPENSSL_VERSION_NUMBER < 0x10100000L? I believe for libressl >= 3.5.0 that would be 0x20000000L and guaranteed not to change so would accommodate that case as well as OpenSSL 1.1 and 3.0 in a single test.

ffontaine commented 2 years ago

As OPENSSL_VERSION_NUMBER is hardcoded to 0x20000000L in libressl, this would mean that the build will fail for all versions before 3.5.0. If you want to be compatible with all libressl versions, LIBRESSL_VERSION_NUMBER must be checked.

loqs commented 2 years ago

What if instead you use a feature test?

diff --git a/crypto-openssl-10.cpp b/crypto-openssl-10.cpp
index f0f2c53..1623690 100644
--- a/crypto-openssl-10.cpp
+++ b/crypto-openssl-10.cpp
@@ -28,16 +28,15 @@
  * as that of the covered work.
  */

-#include <openssl/opensslconf.h>
+#include <openssl/hmac.h>

-#if !defined(OPENSSL_API_COMPAT)
+#if defined(HMAC_cleanup)

 #include "crypto.hpp"
 #include "key.hpp"
 #include "util.hpp"
 #include <openssl/aes.h>
 #include <openssl/sha.h>
-#include <openssl/hmac.h>
 #include <openssl/evp.h>
 #include <openssl/rand.h>
 #include <openssl/err.h>
diff --git a/crypto-openssl-11.cpp b/crypto-openssl-11.cpp
index adf03bb..518b90c 100644
--- a/crypto-openssl-11.cpp
+++ b/crypto-openssl-11.cpp
@@ -28,16 +28,15 @@
  * as that of the covered work.
  */

-#include <openssl/opensslconf.h>
+#include <openssl/hmac.h>

-#if defined(OPENSSL_API_COMPAT)
+#if !defined(HMAC_cleanup)

 #include "crypto.hpp"
 #include "key.hpp"
 #include "util.hpp"
 #include <openssl/aes.h>
 #include <openssl/sha.h>
-#include <openssl/hmac.h>
 #include <openssl/evp.h>
 #include <openssl/rand.h>
 #include <openssl/err.h>
ffontaine commented 2 years ago

I updated the PR as requested

ffontaine commented 6 months ago

Do you plan on merging this PR?