diff options
author | Karsten Heimrich <karsten.heimrich@qt.io> | 2018-08-17 17:21:25 +0200 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@qt.io> | 2018-08-17 15:23:28 +0000 |
commit | dd54d538874b8709fee997e527a429eee8bfdac2 (patch) | |
tree | 5fb92765041b22a3a4c49948ed5d40fbf2e9fbfa | |
parent | d5a99075748ee8b664043964bcfe74f79f0eddbf (diff) |
Make the OpenSSL object a global static, add some more methods
Change-Id: I343bfa6288b3f20508ce4b3eab65516f2ad28bf7
Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r-- | src/knx/ssl/qknxcryptographicdata_p.h | 22 | ||||
-rw-r--r-- | src/knx/ssl/qknxcurve25519.cpp | 63 |
2 files changed, 65 insertions, 20 deletions
diff --git a/src/knx/ssl/qknxcryptographicdata_p.h b/src/knx/ssl/qknxcryptographicdata_p.h index a9c5779..36a8226 100644 --- a/src/knx/ssl/qknxcryptographicdata_p.h +++ b/src/knx/ssl/qknxcryptographicdata_p.h @@ -47,23 +47,19 @@ QT_BEGIN_NAMESPACE -struct QKnxOpenSsl +class Q_AUTOTEST_EXPORT QKnxOpenSsl { - Q_AUTOTEST_EXPORT static bool supportsSsl() - { - return ensureLibraryLoaded(); - } - - Q_AUTOTEST_EXPORT static long sslLibraryVersionNumber() - { - if (!supportsSsl()) - return 0; - return q_OpenSSL_version_num(); - } +public: + static bool supportsSsl(); + static long sslLibraryVersionNumber(); + static QString sslLibraryVersionString(); + static long sslLibraryBuildVersionNumber(); + static QString sslLibraryBuildVersionString(); -private: +protected: static bool ensureLibraryLoaded(); +private: static bool s_libraryLoaded; static bool s_libraryEnabled; }; diff --git a/src/knx/ssl/qknxcurve25519.cpp b/src/knx/ssl/qknxcurve25519.cpp index dda5215..26f6f77 100644 --- a/src/knx/ssl/qknxcurve25519.cpp +++ b/src/knx/ssl/qknxcurve25519.cpp @@ -34,11 +34,60 @@ QT_BEGIN_NAMESPACE bool QKnxOpenSsl::s_libraryLoaded = false; bool QKnxOpenSsl::s_libraryEnabled = false; + +Q_GLOBAL_STATIC(QKnxOpenSsl, qt_QKnxOpenSsl) Q_GLOBAL_STATIC_WITH_ARGS(QMutex, qt_knxOpenSslInitMutex, (QMutex::Recursive)) /*! \internal */ +bool QKnxOpenSsl::supportsSsl() +{ + return ensureLibraryLoaded(); +} + +/*! + \internal +*/ +long QKnxOpenSsl::sslLibraryVersionNumber() +{ + if (!supportsSsl()) + return 0; + return q_OpenSSL_version_num(); +} + +/*! + \internal +*/ +QString QKnxOpenSsl::sslLibraryVersionString() +{ + if (!supportsSsl()) + return QString(); + + const char *versionString = q_OpenSSL_version(OPENSSL_VERSION); + if (!versionString) + return QString(); + + return QString::fromLatin1(versionString); +} + +/*! + \internal +*/ +long QKnxOpenSsl::sslLibraryBuildVersionNumber() +{ + return OPENSSL_VERSION_NUMBER; +} + + +QString QKnxOpenSsl::sslLibraryBuildVersionString() +{ + return QStringLiteral(OPENSSL_VERSION_TEXT); +} + +/*! + \internal +*/ bool QKnxOpenSsl::ensureLibraryLoaded() { if (!q_resolveOpenSslSymbols()) @@ -107,7 +156,7 @@ QKnxCurve25519PublicKey::QKnxCurve25519PublicKey(const QKnxCurve25519PrivateKey if (!key.d_ptr->m_evpPKey) return; - if (!QKnxOpenSsl::supportsSsl()) + if (!qt_QKnxOpenSsl->supportsSsl()) return; q_EVP_PKEY_up_ref(key.d_ptr->m_evpPKey); @@ -130,7 +179,7 @@ bool QKnxCurve25519PublicKey::isNull() const */ bool QKnxCurve25519PublicKey::isValid() const { - return QKnxOpenSsl::supportsSsl() && !isNull(); + return qt_QKnxOpenSsl->supportsSsl() && !isNull(); } /*! @@ -160,7 +209,7 @@ QKnxByteArray QKnxCurve25519PublicKey::bytes() const QKnxCurve25519PublicKey QKnxCurve25519PublicKey::fromBytes(const QKnxByteArray &data, quint16 index) { auto ba = data.mid(index, 32); - if (!QKnxOpenSsl::supportsSsl() || ba.size() < 32) + if (!qt_QKnxOpenSsl->supportsSsl() || ba.size() < 32) return {}; QKnxCurve25519PublicKey key; @@ -217,7 +266,7 @@ QKnxCurve25519PublicKey &QKnxCurve25519PublicKey::operator=(const QKnxCurve25519 QKnxCurve25519PrivateKey::QKnxCurve25519PrivateKey() : d_ptr(new QKnxCurve25519KeyData) { - if (!QKnxOpenSsl::supportsSsl()) + if (!qt_QKnxOpenSsl->supportsSsl()) return; if (auto *pctx = q_EVP_PKEY_CTX_new_id(NID_X25519, nullptr)) { @@ -248,7 +297,7 @@ bool QKnxCurve25519PrivateKey::isNull() const */ bool QKnxCurve25519PrivateKey::isValid() const { - return QKnxOpenSsl::supportsSsl() && !isNull(); + return qt_QKnxOpenSsl->supportsSsl() && !isNull(); } /*! @@ -274,7 +323,7 @@ QKnxByteArray QKnxCurve25519PrivateKey::bytes() const QKnxCurve25519PrivateKey QKnxCurve25519PrivateKey::fromBytes(const QKnxByteArray &data, quint16 index) { auto ba = data.mid(index, 32); - if (!QKnxOpenSsl::supportsSsl() || ba.size() < 32) + if (!qt_QKnxOpenSsl->supportsSsl() || ba.size() < 32) return {}; QKnxCurve25519PrivateKey key; @@ -343,7 +392,7 @@ QKnxCurve25519PrivateKey &QKnxCurve25519PrivateKey::operator=(const QKnxCurve255 QKnxByteArray QKnxCryptographicEngine::sharedSecret(const QKnxCurve25519PublicKey &pub, const QKnxCurve25519PrivateKey &priv) { - if (!QKnxOpenSsl::supportsSsl()) + if (!qt_QKnxOpenSsl->supportsSsl()) return {}; if (pub.isNull() || priv.isNull()) |