diff -Naur a/src/network/ssl/qsslcertificate_openssl.cpp b/src/network/ssl/qsslcertificate_openssl.cpp --- a/src/network/ssl/qsslcertificate_openssl.cpp 2025-11-20 13:50:34.000000000 +0100 +++ b/src/network/ssl/qsslcertificate_openssl.cpp 2026-06-16 20:44:45.385704205 +0200 @@ -48,6 +48,8 @@ #include #include +#include + QT_BEGIN_NAMESPACE Q_CONSTEXPR int MutexPoolSize = 17; @@ -60,7 +62,7 @@ } // forward declaration -static QMultiMap _q_mapFromX509Name(X509_NAME *name); +static QMultiMap _q_mapFromX509Name(const X509_NAME *name); bool QSslCertificate::operator==(const QSslCertificate &other) const { @@ -125,9 +127,11 @@ if (d->serialNumberString.isEmpty() && d->x509) { ASN1_INTEGER *serialNumber = q_X509_get_serialNumber(d->x509); QByteArray hexString; - hexString.reserve(serialNumber->length * 3); - for (int a = 0; a < serialNumber->length; ++a) { - hexString += QByteArray::number(serialNumber->data[a], 16).rightJustified(2, '0'); + const unsigned char *serialNumberData = q_ASN1_STRING_get0_data(serialNumber); + int serialNumberLength = q_ASN1_STRING_length(serialNumber); + hexString.reserve(qsizetype(serialNumberLength) * 3); + for (int a = 0; a < serialNumberLength; ++a) { + hexString += QByteArray::number(serialNumberData[a], 16).rightJustified(2, '0'); hexString += ':'; } hexString.chop(1); @@ -251,10 +255,10 @@ QHostAddress ipAddress; switch (len) { case 4: // IPv4 - ipAddress = QHostAddress(qFromBigEndian(*reinterpret_cast(genName->d.iPAddress->data))); + ipAddress = QHostAddress(qFromBigEndian(*reinterpret_cast(q_ASN1_STRING_get0_data(genName->d.iPAddress)))); break; case 16: // IPv6 - ipAddress = QHostAddress(reinterpret_cast(genName->d.iPAddress->data)); + ipAddress = QHostAddress(reinterpret_cast(q_ASN1_STRING_get0_data(genName->d.iPAddress))); break; default: // Unknown IP address format break; @@ -329,7 +333,7 @@ /* * Convert unknown extensions to a QVariant. */ -static QVariant x509UnknownExtensionToValue(X509_EXTENSION *ext) +static QVariant x509UnknownExtensionToValue(QT_OPENSSL4_CONST X509_EXTENSION *ext) { Q_ASSERT(ext); // Get the extension specific method object if available, @@ -338,7 +342,7 @@ // in the object. X509V3_EXT_METHOD *meth = const_cast(q_X509V3_EXT_get(ext)); if (!meth) { - ASN1_OCTET_STRING *value = q_X509_EXTENSION_get_data(ext); + QT_OPENSSL4_CONST ASN1_OCTET_STRING *value = q_X509_EXTENSION_get_data(ext); Q_ASSERT(value); QByteArray result( reinterpret_cast(q_ASN1_STRING_get0_data(value)), q_ASN1_STRING_length(value)); @@ -418,9 +422,9 @@ * taken from RFC 5280, however we decided the capitalisation in the RFC * was too silly for the real world. */ -static QVariant x509ExtensionToValue(X509_EXTENSION *ext) +static QVariant x509ExtensionToValue(QT_OPENSSL4_CONST X509_EXTENSION *ext) { - ASN1_OBJECT *obj = q_X509_EXTENSION_get_object(ext); + QT_OPENSSL4_CONST ASN1_OBJECT *obj = q_X509_EXTENSION_get_object(ext); int nid = q_OBJ_obj2nid(obj); // We cast away the const-ness here because some versions of openssl @@ -511,8 +515,9 @@ // keyid if (auth_key->keyid) { - QByteArray keyid(reinterpret_cast(auth_key->keyid->data), - auth_key->keyid->length); + const unsigned char *data = q_ASN1_STRING_get0_data(auth_key->keyid); + int length = q_ASN1_STRING_length(auth_key->keyid); + QByteArray keyid(reinterpret_cast(data), length); result[QLatin1String("keyid")] = keyid.toHex(); } @@ -532,13 +537,13 @@ return {}; } -QSslCertificateExtension QSslCertificatePrivate::convertExtension(X509_EXTENSION *ext) +QSslCertificateExtension QSslCertificatePrivate::convertExtension(QT_OPENSSL4_CONST X509_EXTENSION *ext) { Q_ASSERT(ext); QSslCertificateExtension result; - ASN1_OBJECT *obj = q_X509_EXTENSION_get_object(ext); + QT_OPENSSL4_CONST ASN1_OBJECT *obj = q_X509_EXTENSION_get_object(ext); if (!obj) { qCWarning(lcSsl, "Invalid (nullptr) ASN1_OBJECT"); return result; @@ -586,7 +591,7 @@ result.reserve(count); for (int i = 0; i < count; i++) { - X509_EXTENSION *ext = q_X509_get_ext(d->x509, i); + QT_OPENSSL4_CONST X509_EXTENSION *ext = q_X509_get_ext(d->x509, i); if (!ext) { qCWarning(lcSsl) << "Invalid (nullptr) extension at index" << i; continue; @@ -699,7 +704,7 @@ return QString::fromLatin1(result); } -QByteArray QSslCertificatePrivate::asn1ObjectId(ASN1_OBJECT *object) +QByteArray QSslCertificatePrivate::asn1ObjectId(const ASN1_OBJECT *object) { char buf[80]; // The openssl docs a buffer length of 80 should be more than enough q_OBJ_obj2txt(buf, sizeof(buf), object, 1); // the 1 says always use the oid not the long name @@ -708,7 +713,7 @@ } -QByteArray QSslCertificatePrivate::asn1ObjectName(ASN1_OBJECT *object) +QByteArray QSslCertificatePrivate::asn1ObjectName(const ASN1_OBJECT *object) { int nid = q_OBJ_obj2nid(object); if (nid != NID_undef) @@ -717,11 +722,11 @@ return asn1ObjectId(object); } -static QMultiMap _q_mapFromX509Name(X509_NAME *name) +static QMultiMap _q_mapFromX509Name(const X509_NAME *name) { QMultiMap info; for (int i = 0; i < q_X509_NAME_entry_count(name); ++i) { - X509_NAME_ENTRY *e = q_X509_NAME_get_entry(name, i); + const X509_NAME_ENTRY *e = q_X509_NAME_get_entry(name, i); QByteArray name = QSslCertificatePrivate::asn1ObjectName(q_X509_NAME_ENTRY_get_object(e)); unsigned char *data = nullptr; diff -Naur a/src/network/ssl/qsslcertificate_p.h b/src/network/ssl/qsslcertificate_p.h --- a/src/network/ssl/qsslcertificate_p.h 2025-11-20 13:50:34.000000000 +0100 +++ b/src/network/ssl/qsslcertificate_p.h 2026-06-16 20:29:24.525901709 +0200 @@ -131,15 +131,15 @@ void init(const QByteArray &data, QSsl::EncodingFormat format); - static QByteArray asn1ObjectId(ASN1_OBJECT *object); - static QByteArray asn1ObjectName(ASN1_OBJECT *object); + static QByteArray asn1ObjectId(const ASN1_OBJECT *object); + static QByteArray asn1ObjectName(const ASN1_OBJECT *object); static QByteArray QByteArray_from_X509(X509 *x509, QSsl::EncodingFormat format); static QString text_from_X509(X509 *x509); static QSslCertificate QSslCertificate_from_X509(X509 *x509); static QList certificatesFromPem(const QByteArray &pem, int count = -1); static QList certificatesFromDer(const QByteArray &der, int count = -1); static bool isBlacklisted(const QSslCertificate &certificate); - static QSslCertificateExtension convertExtension(X509_EXTENSION *ext); + static QSslCertificateExtension convertExtension(QT_OPENSSL4_CONST X509_EXTENSION *ext); static QByteArray subjectInfoToString(QSslCertificate::SubjectInfo info); friend class QSslSocketBackendPrivate; diff -Naur a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp 2025-11-20 13:50:34.000000000 +0100 +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp 2026-06-16 20:34:59.810880865 +0200 @@ -75,6 +75,8 @@ #include "private/qcore_mac_p.h" #endif +#include +#include #include QT_BEGIN_NAMESPACE @@ -244,8 +246,8 @@ DEFINEFUNC(long, ASN1_INTEGER_get, ASN1_INTEGER *a, a, return 0, return) DEFINEFUNC2(int, ASN1_INTEGER_cmp, const ASN1_INTEGER *a, a, const ASN1_INTEGER *b, b, return 1, return) -DEFINEFUNC(int, ASN1_STRING_length, ASN1_STRING *a, a, return 0, return) -DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, ASN1_STRING *b, b, return 0, return) +DEFINEFUNC(int, ASN1_STRING_length, const ASN1_STRING *a, a, return 0, return) +DEFINEFUNC2(int, ASN1_STRING_to_UTF8, unsigned char **a, a, const ASN1_STRING *b, b, return 0, return) DEFINEFUNC4(long, BIO_ctrl, BIO *a, a, int b, b, long c, c, void *d, d, return -1, return) DEFINEFUNC(int, BIO_free, BIO *a, a, return 0, return) DEFINEFUNC2(BIO *, BIO_new_mem_buf, void *a, a, int b, b, return nullptr, return) @@ -309,7 +311,7 @@ DEFINEFUNC(int, OBJ_sn2nid, const char *s, s, return 0, return) DEFINEFUNC(int, OBJ_ln2nid, const char *s, s, return 0, return) DEFINEFUNC3(int, i2t_ASN1_OBJECT, char *a, a, int b, b, ASN1_OBJECT *c, c, return -1, return) -DEFINEFUNC4(int, OBJ_obj2txt, char *a, a, int b, b, ASN1_OBJECT *c, c, int d, d, return -1, return) +DEFINEFUNC4(int, OBJ_obj2txt, char *a, a, int b, b, const ASN1_OBJECT *c, c, int d, d, return -1, return) DEFINEFUNC(int, OBJ_obj2nid, const ASN1_OBJECT *a, a, return NID_undef, return) DEFINEFUNC4(EVP_PKEY *, PEM_read_bio_PrivateKey, BIO *a, a, EVP_PKEY **b, b, pem_password_cb *c, c, void *d, d, return nullptr, return) DEFINEFUNC4(DSA *, PEM_read_bio_DSAPrivateKey, BIO *a, a, DSA **b, b, pem_password_cb *c, c, void *d, d, return nullptr, return) @@ -408,31 +410,31 @@ DEFINEFUNC4(int, X509_digest, const X509 *x509, x509, const EVP_MD *type, type, unsigned char *md, md, unsigned int *len, len, return -1, return) DEFINEFUNC(X509 *, X509_dup, X509 *a, a, return nullptr, return) DEFINEFUNC2(void, X509_print, BIO *a, a, X509 *b, b, return, DUMMYARG); -DEFINEFUNC(ASN1_OBJECT *, X509_EXTENSION_get_object, X509_EXTENSION *a, a, return nullptr, return) +DEFINEFUNC(QT_OPENSSL4_CONST ASN1_OBJECT *, X509_EXTENSION_get_object, QT_OPENSSL4_CONST X509_EXTENSION *a, a, return nullptr, return) DEFINEFUNC(void, X509_free, X509 *a, a, return, DUMMYARG) //Q_AUTOTEST_EXPORT ASN1_TIME *q_X509_gmtime_adj(ASN1_TIME *s, long adj); DEFINEFUNC2(ASN1_TIME *, X509_gmtime_adj, ASN1_TIME *s, s, long adj, adj, return nullptr, return) DEFINEFUNC(void, ASN1_TIME_free, ASN1_TIME *t, t, return, DUMMYARG) -DEFINEFUNC2(X509_EXTENSION *, X509_get_ext, X509 *a, a, int b, b, return nullptr, return) +DEFINEFUNC2(QT_OPENSSL4_CONST X509_EXTENSION *, X509_get_ext, X509 *a, a, int b, b, return nullptr, return) DEFINEFUNC(int, X509_get_ext_count, X509 *a, a, return 0, return) DEFINEFUNC4(void *, X509_get_ext_d2i, X509 *a, a, int b, b, int *c, c, int *d, d, return nullptr, return) -DEFINEFUNC(const X509V3_EXT_METHOD *, X509V3_EXT_get, X509_EXTENSION *a, a, return nullptr, return) -DEFINEFUNC(void *, X509V3_EXT_d2i, X509_EXTENSION *a, a, return nullptr, return) -DEFINEFUNC(int, X509_EXTENSION_get_critical, X509_EXTENSION *a, a, return 0, return) -DEFINEFUNC(ASN1_OCTET_STRING *, X509_EXTENSION_get_data, X509_EXTENSION *a, a, return nullptr, return) +DEFINEFUNC(const X509V3_EXT_METHOD *, X509V3_EXT_get, QT_OPENSSL4_CONST X509_EXTENSION *a, a, return nullptr, return) +DEFINEFUNC(void *, X509V3_EXT_d2i, QT_OPENSSL4_CONST X509_EXTENSION *a, a, return nullptr, return) +DEFINEFUNC(int, X509_EXTENSION_get_critical, const X509_EXTENSION *a, a, return 0, return) +DEFINEFUNC(QT_OPENSSL4_CONST ASN1_OCTET_STRING *, X509_EXTENSION_get_data, QT_OPENSSL4_CONST X509_EXTENSION *a, a, return nullptr, return) DEFINEFUNC(void, BASIC_CONSTRAINTS_free, BASIC_CONSTRAINTS *a, a, return, DUMMYARG) DEFINEFUNC(void, AUTHORITY_KEYID_free, AUTHORITY_KEYID *a, a, return, DUMMYARG) DEFINEFUNC(void, GENERAL_NAME_free, GENERAL_NAME *a, a, return, DUMMYARG) DEFINEFUNC2(int, ASN1_STRING_print, BIO *a, a, const ASN1_STRING *b, b, return 0, return) DEFINEFUNC2(int, X509_check_issued, X509 *a, a, X509 *b, b, return -1, return) -DEFINEFUNC(X509_NAME *, X509_get_issuer_name, X509 *a, a, return nullptr, return) -DEFINEFUNC(X509_NAME *, X509_get_subject_name, X509 *a, a, return nullptr, return) +DEFINEFUNC(QT_OPENSSL4_CONST X509_NAME *, X509_get_issuer_name, X509 *a, a, return nullptr, return) +DEFINEFUNC(QT_OPENSSL4_CONST X509_NAME *, X509_get_subject_name, X509 *a, a, return nullptr, return) DEFINEFUNC(ASN1_INTEGER *, X509_get_serialNumber, X509 *a, a, return nullptr, return) DEFINEFUNC(int, X509_verify_cert, X509_STORE_CTX *a, a, return -1, return) DEFINEFUNC(int, X509_NAME_entry_count, X509_NAME *a, a, return 0, return) -DEFINEFUNC2(X509_NAME_ENTRY *, X509_NAME_get_entry, X509_NAME *a, a, int b, b, return nullptr, return) -DEFINEFUNC(ASN1_STRING *, X509_NAME_ENTRY_get_data, X509_NAME_ENTRY *a, a, return nullptr, return) -DEFINEFUNC(ASN1_OBJECT *, X509_NAME_ENTRY_get_object, X509_NAME_ENTRY *a, a, return nullptr, return) +DEFINEFUNC2(QT_OPENSSL4_CONST X509_NAME_ENTRY *, X509_NAME_get_entry, X509_NAME *a, a, int b, b, return nullptr, return) +DEFINEFUNC(QT_OPENSSL4_CONST ASN1_STRING *, X509_NAME_ENTRY_get_data, X509_NAME_ENTRY *a, a, return nullptr, return) +DEFINEFUNC(QT_OPENSSL4_CONST ASN1_OBJECT *, X509_NAME_ENTRY_get_object, X509_NAME_ENTRY *a, a, return nullptr, return) DEFINEFUNC(EVP_PKEY *, X509_PUBKEY_get, X509_PUBKEY *a, a, return nullptr, return) DEFINEFUNC(void, X509_STORE_free, X509_STORE *a, a, return, DUMMYARG) DEFINEFUNC(X509_STORE *, X509_STORE_new, DUMMYARG, DUMMYARG, return nullptr, return) @@ -656,9 +658,9 @@ #if (OPENSSL_VERSION_NUMBER >> 28) < 3 #define QT_OPENSSL_VERSION "1_1" -#elif OPENSSL_VERSION_MAJOR == 3 // Starting with 3.0 this define is available -#define QT_OPENSSL_VERSION "3" -#endif // > 3 intentionally left undefined +#elif OPENSSL_VERSION_MAJOR >= 3 +#define QT_OPENSSL_VERSION QT_STRINGIFY(OPENSSL_VERSION_MAJOR) +#endif #ifdef Q_OS_WIN @@ -1258,111 +1260,16 @@ //============================================================================== QDateTime q_getTimeFromASN1(const ASN1_TIME *aTime) { - size_t lTimeLength = aTime->length; - char *pString = (char *) aTime->data; - auto isValidPointer = [pString, lTimeLength](const char *const probe){ - return size_t(probe - pString) < lTimeLength; - }; - - if (aTime->type == V_ASN1_UTCTIME) { - - char lBuffer[24]; - char *pBuffer = lBuffer; - - if ((lTimeLength < 11) || (lTimeLength > 17)) - return QDateTime(); - - memcpy(pBuffer, pString, 10); - pBuffer += 10; - pString += 10; - - if ((*pString == 'Z') || (*pString == '-') || (*pString == '+')) { - *pBuffer++ = '0'; - *pBuffer++ = '0'; - } else { - *pBuffer++ = *pString++; - if (!isValidPointer(pString)) // Nah. - return {}; - *pBuffer++ = *pString++; - if (!isValidPointer(pString)) // Nah. - return {}; - // Skip any fractional seconds... - if (*pString == '.') { - pString++; - if (!isValidPointer(pString)) // Oh no, cannot dereference (see below). - return {}; - while ((*pString >= '0') && (*pString <= '9')) { - pString++; - if (!isValidPointer(pString)) // No and no. - return {}; - } - } - } - - *pBuffer++ = 'Z'; - *pBuffer++ = '\0'; - - time_t lSecondsFromUCT; - if (*pString == 'Z') { - lSecondsFromUCT = 0; - } else { - if ((*pString != '+') && (*pString != '-')) - return QDateTime(); - - if (!isValidPointer(pString + 4)) { - // What kind of input parameters we were provided with? To hell with them! - return {}; - } - lSecondsFromUCT = ((pString[1] - '0') * 10 + (pString[2] - '0')) * 60; - lSecondsFromUCT += (pString[3] - '0') * 10 + (pString[4] - '0'); - lSecondsFromUCT *= 60; - if (*pString == '-') - lSecondsFromUCT = -lSecondsFromUCT; - } - - tm lTime; - lTime.tm_sec = ((lBuffer[10] - '0') * 10) + (lBuffer[11] - '0'); - lTime.tm_min = ((lBuffer[8] - '0') * 10) + (lBuffer[9] - '0'); - lTime.tm_hour = ((lBuffer[6] - '0') * 10) + (lBuffer[7] - '0'); - lTime.tm_mday = ((lBuffer[4] - '0') * 10) + (lBuffer[5] - '0'); - lTime.tm_mon = (((lBuffer[2] - '0') * 10) + (lBuffer[3] - '0')) - 1; - lTime.tm_year = ((lBuffer[0] - '0') * 10) + (lBuffer[1] - '0'); - if (lTime.tm_year < 50) - lTime.tm_year += 100; // RFC 2459 + QDateTime result; + tm lTime; + if (q_ASN1_TIME_to_tm(aTime, &lTime)) { QDate resDate(lTime.tm_year + 1900, lTime.tm_mon + 1, lTime.tm_mday); QTime resTime(lTime.tm_hour, lTime.tm_min, lTime.tm_sec); - - QDateTime result(resDate, resTime, Qt::UTC); - result = result.addSecs(lSecondsFromUCT); - return result; - - } else if (aTime->type == V_ASN1_GENERALIZEDTIME) { - - if (lTimeLength < 15) - return QDateTime(); // hopefully never triggered - - // generalized time is always YYYYMMDDHHMMSSZ (RFC 2459, section 4.1.2.5.2) - tm lTime; - lTime.tm_sec = ((pString[12] - '0') * 10) + (pString[13] - '0'); - lTime.tm_min = ((pString[10] - '0') * 10) + (pString[11] - '0'); - lTime.tm_hour = ((pString[8] - '0') * 10) + (pString[9] - '0'); - lTime.tm_mday = ((pString[6] - '0') * 10) + (pString[7] - '0'); - lTime.tm_mon = (((pString[4] - '0') * 10) + (pString[5] - '0')); - lTime.tm_year = ((pString[0] - '0') * 1000) + ((pString[1] - '0') * 100) + - ((pString[2] - '0') * 10) + (pString[3] - '0'); - - QDate resDate(lTime.tm_year, lTime.tm_mon, lTime.tm_mday); - QTime resTime(lTime.tm_hour, lTime.tm_min, lTime.tm_sec); - - QDateTime result(resDate, resTime, Qt::UTC); - return result; - - } else { - qCWarning(lcSsl, "unsupported date format detected"); - return QDateTime(); + result = QDateTime(resDate, resTime, Qt::UTC); } + return result; } QT_END_NAMESPACE diff -Naur a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h 2025-11-20 13:50:34.000000000 +0100 +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h 2026-06-16 20:29:24.526333639 +0200 @@ -76,6 +76,13 @@ #include "qocsp_p.h" #endif +#if defined(OPENSSL_VERSION_MAJOR) && OPENSSL_VERSION_MAJOR >= 4 +#define QT_OPENSSL4_CONST const +#else +#define QT_OPENSSL4_CONST +#endif + + QT_BEGIN_NAMESPACE #define DUMMYARG @@ -373,8 +380,9 @@ bool q_resolveOpenSslSymbols(); long q_ASN1_INTEGER_get(ASN1_INTEGER *a); int q_ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y); -int q_ASN1_STRING_length(ASN1_STRING *a); -int q_ASN1_STRING_to_UTF8(unsigned char **a, ASN1_STRING *b); +int q_ASN1_STRING_length(const ASN1_STRING *a); +int q_ASN1_STRING_to_UTF8(unsigned char **a, const ASN1_STRING *b); +int q_ASN1_TIME_to_tm(const ASN1_TIME *s, struct tm *tm); long q_BIO_ctrl(BIO *a, int b, long c, void *d); Q_AUTOTEST_EXPORT int q_BIO_free(BIO *a); BIO *q_BIO_new_mem_buf(void *a, int b); @@ -457,7 +465,7 @@ int q_OBJ_sn2nid(const char *s); int q_OBJ_ln2nid(const char *s); int q_i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *obj); -int q_OBJ_obj2txt(char *buf, int buf_len, ASN1_OBJECT *obj, int no_name); +int q_OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *obj, int no_name); int q_OBJ_obj2nid(const ASN1_OBJECT *a); #define q_EVP_get_digestbynid(a) q_EVP_get_digestbyname(q_OBJ_nid2sn(a)) Q_AUTOTEST_EXPORT EVP_PKEY *q_PEM_read_bio_PrivateKey(BIO *a, EVP_PKEY **b, pem_password_cb *c, void *d); @@ -556,29 +564,29 @@ X509 *q_X509_dup(X509 *a); void q_X509_print(BIO *a, X509*b); int q_X509_digest(const X509 *x509, const EVP_MD *type, unsigned char *md, unsigned int *len); -ASN1_OBJECT *q_X509_EXTENSION_get_object(X509_EXTENSION *a); +QT_OPENSSL4_CONST ASN1_OBJECT *q_X509_EXTENSION_get_object(QT_OPENSSL4_CONST X509_EXTENSION *a); Q_AUTOTEST_EXPORT void q_X509_free(X509 *a); Q_AUTOTEST_EXPORT ASN1_TIME *q_X509_gmtime_adj(ASN1_TIME *s, long adj); Q_AUTOTEST_EXPORT void q_ASN1_TIME_free(ASN1_TIME *t); -X509_EXTENSION *q_X509_get_ext(X509 *a, int b); +QT_OPENSSL4_CONST X509_EXTENSION *q_X509_get_ext(X509 *a, int b); int q_X509_get_ext_count(X509 *a); void *q_X509_get_ext_d2i(X509 *a, int b, int *c, int *d); -const X509V3_EXT_METHOD *q_X509V3_EXT_get(X509_EXTENSION *a); -void *q_X509V3_EXT_d2i(X509_EXTENSION *a); -int q_X509_EXTENSION_get_critical(X509_EXTENSION *a); -ASN1_OCTET_STRING *q_X509_EXTENSION_get_data(X509_EXTENSION *a); +const X509V3_EXT_METHOD *q_X509V3_EXT_get(QT_OPENSSL4_CONST X509_EXTENSION *a); +void *q_X509V3_EXT_d2i(QT_OPENSSL4_CONST X509_EXTENSION *a); +int q_X509_EXTENSION_get_critical(const X509_EXTENSION *a); +QT_OPENSSL4_CONST ASN1_OCTET_STRING *q_X509_EXTENSION_get_data(QT_OPENSSL4_CONST X509_EXTENSION *a); void q_BASIC_CONSTRAINTS_free(BASIC_CONSTRAINTS *a); void q_AUTHORITY_KEYID_free(AUTHORITY_KEYID *a); int q_ASN1_STRING_print(BIO *a, const ASN1_STRING *b); int q_X509_check_issued(X509 *a, X509 *b); -X509_NAME *q_X509_get_issuer_name(X509 *a); -X509_NAME *q_X509_get_subject_name(X509 *a); +QT_OPENSSL4_CONST X509_NAME *q_X509_get_issuer_name(X509 *a); +QT_OPENSSL4_CONST X509_NAME *q_X509_get_subject_name(X509 *a); ASN1_INTEGER *q_X509_get_serialNumber(X509 *a); int q_X509_verify_cert(X509_STORE_CTX *ctx); -int q_X509_NAME_entry_count(X509_NAME *a); -X509_NAME_ENTRY *q_X509_NAME_get_entry(X509_NAME *a,int b); -ASN1_STRING *q_X509_NAME_ENTRY_get_data(X509_NAME_ENTRY *a); -ASN1_OBJECT *q_X509_NAME_ENTRY_get_object(X509_NAME_ENTRY *a); +int q_X509_NAME_entry_count(const X509_NAME *a); +QT_OPENSSL4_CONST X509_NAME_ENTRY *q_X509_NAME_get_entry(const X509_NAME *a,int b); +QT_OPENSSL4_CONST ASN1_STRING *q_X509_NAME_ENTRY_get_data(const X509_NAME_ENTRY *a); +QT_OPENSSL4_CONST ASN1_OBJECT *q_X509_NAME_ENTRY_get_object(const X509_NAME_ENTRY *a); EVP_PKEY *q_X509_PUBKEY_get(X509_PUBKEY *a); void q_X509_STORE_free(X509_STORE *store); X509_STORE *q_X509_STORE_new();