summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2018-08-17 17:21:25 +0200
committerKarsten Heimrich <karsten.heimrich@qt.io>2018-08-17 15:23:28 +0000
commitdd54d538874b8709fee997e527a429eee8bfdac2 (patch)
tree5fb92765041b22a3a4c49948ed5d40fbf2e9fbfa
parentd5a99075748ee8b664043964bcfe74f79f0eddbf (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.h22
-rw-r--r--src/knx/ssl/qknxcurve25519.cpp63
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())