https://github.com/openbsd/ports/blob/5305fd2e586be9252c54543ef1a527a2072cef13/security/qca-qt6/patches/patch-plugins_qca-ossl_qca-ossl_cpp

Fix compilation with LibreSSL

Index: plugins/qca-ossl/qca-ossl.cpp
--- a/plugins/qca-ossl/qca-ossl.cpp.orig
+++ b/plugins/qca-ossl/qca-ossl.cpp
@@ -45,6 +45,11 @@
 #include <openssl/provider.h>
 #endif
 
+#ifndef RSA_F_RSA_OSSL_PRIVATE_DECRYPT
+#define RSA_F_RSA_OSSL_PRIVATE_DECRYPT RSA_F_RSA_EAY_PRIVATE_DECRYPT
+#define SSL_CIPHER_standard_name SSL_CIPHER_get_name
+#endif
+
 #include <openssl/kdf.h>
 
 using namespace QCA;
@@ -311,7 +318,7 @@ static void try_get_name_item(X509_NAME *name, int nid
     while ((loc = X509_NAME_get_index_by_NID(name, nid, loc)) != -1) {
         X509_NAME_ENTRY *ne   = X509_NAME_get_entry(name, loc);
         ASN1_STRING     *data = X509_NAME_ENTRY_get_data(ne);
-        QByteArray       cs((const char *)data->data, data->length);
+        QByteArray       cs((const char *)ASN1_STRING_get0_data(data), ASN1_STRING_length(data));
         info->insert(t, QString::fromLatin1(cs));
     }
 }
@@ -328,7 +335,7 @@ try_get_name_item_by_oid(X509_NAME *name, const QStrin
     while ((loc = X509_NAME_get_index_by_OBJ(name, oid, loc)) != -1) {
         X509_NAME_ENTRY *ne   = X509_NAME_get_entry(name, loc);
         ASN1_STRING     *data = X509_NAME_ENTRY_get_data(ne);
-        QByteArray       cs((const char *)data->data, data->length);
+        QByteArray       cs((const char *)ASN1_STRING_get0_data(data), ASN1_STRING_length(data));
         info->insert(t, QString::fromLatin1(cs));
         qDebug() << "oid: " << oidText << ",  result: " << cs;
     }
@@ -3335,15 +3342,15 @@ class X509Item (public)
 QDateTime ASN1_UTCTIME_QDateTime(const ASN1_UTCTIME *tm, int *isGmt)
 {
     QDateTime qdt;
-    char     *v;
+    const char     *v;
     int       gmt = 0;
     int       i;
     int       y = 0, M = 0, d = 0, h = 0, m = 0, s = 0;
     QDate     qdate;
     QTime     qtime;
 
-    i = tm->length;
-    v = (char *)tm->data;
+    i = ASN1_STRING_length(tm);
+    v = (const char *)ASN1_STRING_get0_data(tm);
 
     if (i < 10)
         goto auq_err;
@@ -3716,9 +3723,9 @@ class MyCertContext : public CertContext (public)
 
         X509_get0_signature(&signature, nullptr, x);
         if (signature) {
-            p.sig = QByteArray(signature->length, 0);
-            for (int i = 0; i < signature->length; i++)
-                p.sig[i] = signature->data[i];
+            p.sig = QByteArray(ASN1_STRING_length(signature), 0);
+            for (int i = 0; i < ASN1_STRING_length(signature); i++)
+                p.sig[i] = ASN1_STRING_get0_data(signature)[i];
         }
 
         switch (X509_get_signature_nid(x)) {
@@ -4214,9 +4221,9 @@ class MyCSRContext : public CSRContext (public)
 
         X509_REQ_get0_signature(x, &signature, nullptr);
         if (signature) {
-            p.sig = QByteArray(signature->length, 0);
-            for (int i = 0; i < signature->length; i++)
-                p.sig[i] = signature->data[i];
+            p.sig = QByteArray(ASN1_STRING_length(signature), 0);
+            for (int i = 0; i < ASN1_STRING_length(signature); i++)
+                p.sig[i] = ASN1_STRING_get0_data(signature)[i];
         }
 
         switch (X509_REQ_get_signature_nid(x)) {
@@ -4412,9 +4419,9 @@ class MyCRLContext : public CRLContext (public)
 
         X509_CRL_get0_signature(x, &signature, nullptr);
         if (signature) {
-            p.sig = QByteArray(signature->length, 0);
-            for (int i = 0; i < signature->length; i++)
-                p.sig[i] = signature->data[i];
+            p.sig = QByteArray(ASN1_STRING_length(signature), 0);
+            for (int i = 0; i < ASN1_STRING_length(signature); i++)
+                p.sig[i] = ASN1_STRING_get0_data(signature)[i];
         }
 
         switch (X509_CRL_get_signature_nid(x)) {
@@ -6460,7 +6467,7 @@ static QStringList all_hash_types()
         list += QStringLiteral("md2");
 #endif
         list += QStringLiteral("md4");
-#ifdef OBJ_whirlpool
+#ifndef OPENSSL_NO_WHIRLPOOL
         list += QStringLiteral("whirlpool");
 #endif
     }
@@ -6921,7 +6928,7 @@ class opensslProvider : public Provider (public)
 #endif
             else if (type == QLatin1String("md4"))
                 return new opensslHashContext(EVP_md4(), this, type);
-#ifdef OBJ_whirlpool
+#ifndef OPENSSL_NO_WHIRLPOOL
             else if (type == QLatin1String("whirlpool"))
                 return new opensslHashContext(EVP_whirlpool(), this, type);
 #endif
