Changeset: 32b9c73d0fb8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/32b9c73d0fb8
Modified Files:
gdk/gdk_string.c
Branch: Dec2025
Log Message:
In some versions of Ubuntu (22.04) the ripemd160 digest is only available
through the legacy provider.
According to the Ubuntu documentation, it was added to the default
provider in OpenSSL 3.0.7, but 22.04 uses 3.0.2. In OpenSSL 1, we can
also just use ripemd160, so only for a brief moment do we need the
legacy provider.
diffs (63 lines):
diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -9872,6 +9872,13 @@ BATasciify(BAT *b, BAT *s)
#include <openssl/evp.h>
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L && OPENSSL_VERSION_NUMBER <
0x30000070L
+#define NEED_LEGACY
+#include <openssl/provider.h>
+static OSSL_PROVIDER *legacy, *default_;
+static MT_Lock ssl_lock = MT_LOCK_INITIALIZER(ssl_lock);
+#endif
+
gdk_return
BATaggrdigest(allocator *ma, BAT **bnp, char **shap, const char *digest,
BAT *b, BAT *g, BAT *e, BAT *s, bool skip_nils)
@@ -9905,8 +9912,19 @@ BATaggrdigest(allocator *ma, BAT **bnp,
allocator *ta = MT_thread_getallocator();
allocator_state ta_state = ma_open(ta);
+#ifdef NEED_LEGACY
+ EVP_MD *md;
+ MT_lock_set(&ssl_lock);
+ if (legacy == NULL) {
+ legacy = OSSL_PROVIDER_load(NULL, "legacy");
+ default_ = OSSL_PROVIDER_load(NULL, "default");
+ }
+ MT_lock_unset(&ssl_lock);
+ md = EVP_MD_fetch(NULL, digest, NULL);
+#else
const EVP_MD *md;
md = EVP_get_digestbyname(digest);
+#endif
EVP_MD_CTX **mdctx = ma_zalloc(ta, ngrp * sizeof(*mdctx));
if (mdctx == NULL)
goto bailout;
@@ -9952,6 +9970,7 @@ BATaggrdigest(allocator *ma, BAT **bnp,
strcpy_len(digestbuf, str_nil, sizeof(digestbuf));
} else {
if (!EVP_DigestFinal_ex(mdctx[gid], md_value, &md_len))
{
+ GDKerror("Could not update digest value.\n");
goto bailout;
}
for (unsigned int x = 0; x < md_len; x++) {
@@ -9971,11 +9990,17 @@ BATaggrdigest(allocator *ma, BAT **bnp,
}
}
}
+#ifdef NEED_LEGACY
+ EVP_MD_free(md);
+#endif
bat_iterator_end(&bi);
ma_close(&ta_state);
return GDK_SUCCEED;
bailout:
+#ifdef NEED_LEGACY
+ EVP_MD_free(md);
+#endif
bat_iterator_end(&bi);
if (mdctx) {
for (gid = 0; gid < ngrp; gid++)
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]