SslServer: Add support for Elliptic Curve keys
[quassel.git] / src / core / sslserver.cpp
index 1daa770..5a5be5c 100644 (file)
@@ -25,7 +25,6 @@
 #endif
 
 #include <QDateTime>
-#include <QFile>
 
 #include "logger.h"
 #include "quassel.h"
@@ -182,10 +181,10 @@ bool SslServer::setCertificate(const QString &path, const QString &keyPath)
             return false;
         }
 
-        untestedKey = QSslKey(&keyFile, QSsl::Rsa);
+        untestedKey = loadKey(&keyFile);
         keyFile.close();
     } else {
-        untestedKey = QSslKey(&certFile, QSsl::Rsa);
+        untestedKey = loadKey(&certFile);
     }
 
     certFile.close();
@@ -227,4 +226,21 @@ bool SslServer::setCertificate(const QString &path, const QString &keyPath)
 }
 
 
+QSslKey SslServer::loadKey(QFile *keyFile)
+{
+    QSslKey key;
+    key = QSslKey(keyFile, QSsl::Rsa);
+#if QT_VERSION >= 0x050500
+    if (key.isNull()) {
+        if (!keyFile->reset()) {
+            quWarning() << "SslServer: IO error reading key file";
+            return key;
+        }
+        key = QSslKey(keyFile, QSsl::Ec);
+    }
+#endif
+    return key;
+}
+
+
 #endif // HAVE_SSL