984a5cb
diff -Naur libs3-66885387c9f761253988321de9c4bbfc1660717d.old/libs3-openssl3.patch libs3-66885387c9f761253988321de9c4bbfc1660717d/libs3-openssl3.patch
984a5cb
--- libs3-66885387c9f761253988321de9c4bbfc1660717d.old/libs3-openssl3.patch	1970-01-01 01:00:00.000000000 +0100
984a5cb
+++ libs3-66885387c9f761253988321de9c4bbfc1660717d/libs3-openssl3.patch	2024-02-14 11:04:15.016371304 +0100
984a5cb
@@ -0,0 +1,51 @@
984a5cb
+diff --git a/src/bucket_metadata.c b/src/bucket_metadata.c
984a5cb
+index 05f3e67..3a9db98 100644
984a5cb
+--- a/src/bucket_metadata.c
984a5cb
++++ b/src/bucket_metadata.c
984a5cb
+@@ -38,6 +38,23 @@
984a5cb
+     #include <openssl/bio.h>
984a5cb
+     #include <openssl/evp.h>
984a5cb
+     #include <openssl/buffer.h>
984a5cb
++
984a5cb
++#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
984a5cb
++static EVP_MD_CTX* EVP_MD_CTX_new(void) {
984a5cb
++  EVP_MD_CTX* ctx = (EVP_MD_CTX*)malloc(sizeof(EVP_MD_CTX));
984a5cb
++  if(ctx) {
984a5cb
++    EVP_MD_CTX_init(ctx);
984a5cb
++  }
984a5cb
++  return ctx;
984a5cb
++}
984a5cb
++
984a5cb
++static void EVP_MD_CTX_free(EVP_MD_CTX* ctx) {
984a5cb
++  if(ctx) {
984a5cb
++    EVP_MD_CTX_cleanup(ctx);
984a5cb
++    free(ctx);
984a5cb
++  }
984a5cb
++}
984a5cb
++#endif
984a5cb
+ #endif
984a5cb
+ 
984a5cb
+ #include "libs3.h"
984a5cb
+@@ -486,16 +503,17 @@ void S3_get_lifecycle(const S3BucketContext *bucketContext,
984a5cb
+ // Calculate MD5 and encode it as base64
984a5cb
+ void generate_content_md5(const char* data, int size,
984a5cb
+                           char* retBuffer, int retBufferSize) {
984a5cb
+-    MD5_CTX mdContext;
984a5cb
++    EVP_MD_CTX *mdContext;
984a5cb
+     BIO *bio, *b64;
984a5cb
+     BUF_MEM *bufferPtr;
984a5cb
+ 
984a5cb
+     char md5Buffer[MD5_DIGEST_LENGTH];
984a5cb
+ 
984a5cb
+-    MD5_Init(&mdContext);
984a5cb
+-    MD5_Update(&mdContext, data, size);
984a5cb
+-    MD5_Final((unsigned char*)md5Buffer, &mdContext);
984a5cb
+-
984a5cb
++    mdContext = EVP_MD_CTX_new();
984a5cb
++    EVP_DigestInit_ex(mdContext, EVP_md5(), NULL);
984a5cb
++    EVP_DigestUpdate(mdContext, data, size);
984a5cb
++    EVP_DigestFinal_ex(mdContext, (unsigned char*)md5Buffer, NULL);
984a5cb
++    EVP_MD_CTX_free(mdContext);
984a5cb
+ 
984a5cb
+     b64 = BIO_new(BIO_f_base64());
984a5cb
+     bio = BIO_new(BIO_s_mem());
984a5cb
diff -Naur libs3-66885387c9f761253988321de9c4bbfc1660717d.old/src/bucket_metadata.c libs3-66885387c9f761253988321de9c4bbfc1660717d/src/bucket_metadata.c
984a5cb
--- libs3-66885387c9f761253988321de9c4bbfc1660717d.old/src/bucket_metadata.c	2024-02-14 11:04:10.253289215 +0100
984a5cb
+++ libs3-66885387c9f761253988321de9c4bbfc1660717d/src/bucket_metadata.c	2024-02-14 11:04:21.585484519 +0100
984a5cb
@@ -32,6 +32,23 @@
984a5cb
     #include <openssl/bio.h>
984a5cb
     #include <openssl/evp.h>
984a5cb
     #include <openssl/buffer.h>
984a5cb
+
984a5cb
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
984a5cb
+static EVP_MD_CTX* EVP_MD_CTX_new(void) {
984a5cb
+  EVP_MD_CTX* ctx = (EVP_MD_CTX*)malloc(sizeof(EVP_MD_CTX));
984a5cb
+  if(ctx) {
984a5cb
+    EVP_MD_CTX_init(ctx);
984a5cb
+  }
984a5cb
+  return ctx;
984a5cb
+}
984a5cb
+
984a5cb
+static void EVP_MD_CTX_free(EVP_MD_CTX* ctx) {
984a5cb
+  if(ctx) {
984a5cb
+    EVP_MD_CTX_cleanup(ctx);
984a5cb
+    free(ctx);
984a5cb
+  }
984a5cb
+}
984a5cb
+#endif
984a5cb
 #endif
984a5cb
 
984a5cb
 #include "libs3.h"
984a5cb
@@ -480,16 +497,17 @@
984a5cb
 // Calculate MD5 and encode it as base64
984a5cb
 void generate_content_md5(const char* data, int size,
984a5cb
                           char* retBuffer, int retBufferSize) {
984a5cb
-    MD5_CTX mdContext;
984a5cb
+    EVP_MD_CTX *mdContext;
984a5cb
     BIO *bio, *b64;
984a5cb
     BUF_MEM *bufferPtr;
984a5cb
 
984a5cb
     char md5Buffer[MD5_DIGEST_LENGTH];
984a5cb
 
984a5cb
-    MD5_Init(&mdContext);
984a5cb
-    MD5_Update(&mdContext, data, size);
984a5cb
-    MD5_Final((unsigned char*)md5Buffer, &mdContext);
984a5cb
-
984a5cb
+    mdContext = EVP_MD_CTX_new();
984a5cb
+    EVP_DigestInit_ex(mdContext, EVP_md5(), NULL);
984a5cb
+    EVP_DigestUpdate(mdContext, data, size);
984a5cb
+    EVP_DigestFinal_ex(mdContext, (unsigned char*)md5Buffer, NULL);
984a5cb
+    EVP_MD_CTX_free(mdContext);
984a5cb
 
984a5cb
     b64 = BIO_new(BIO_f_base64());
984a5cb
     bio = BIO_new(BIO_s_mem());