summaryrefslogtreecommitdiffstats
path: root/src/network/ssl/qsslsocket_schannel.cpp
diff options
context:
space:
mode:
authorTimur Pocheptsov <timur.pocheptsov@qt.io>2021-01-26 17:20:29 +0100
committerTimur Pocheptsov <timur.pocheptsov@qt.io>2021-02-18 17:13:30 +0000
commit64a878e36b178ddb3834c6ca782a6ebefed6aed8 (patch)
tree71b972c44c9b309abc2892b2f53ea044ee9ebb33 /src/network/ssl/qsslsocket_schannel.cpp
parent0d4fb41e8c00263a0d385b70cc066776cbf6cc37 (diff)
Introduce QSsl::X509Certificate interface and its implementations
To enable QSslCertificate to use TLS plugins. All backend-specific code is to be moved from QSslCertificate(Private) making them backend-neutral. Task-number: QTBUG-90954 Task-number: QTBUG-65922 Change-Id: Ic9d5abf91e42ce81fe56239f95ae97b64035e950 Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io> (cherry picked from commit 405337ee7276be4b76e86745c0694c51283b6b07) Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/network/ssl/qsslsocket_schannel.cpp')
-rw-r--r--src/network/ssl/qsslsocket_schannel.cpp109
1 files changed, 62 insertions, 47 deletions
diff --git a/src/network/ssl/qsslsocket_schannel.cpp b/src/network/ssl/qsslsocket_schannel.cpp
index 4b94d10d97..223e4b0dab 100644
--- a/src/network/ssl/qsslsocket_schannel.cpp
+++ b/src/network/ssl/qsslsocket_schannel.cpp
@@ -46,8 +46,9 @@
#include "qsslcertificateextension.h"
#include "qsslcertificate_p.h"
#include "qsslcipher_p.h"
-#include "qtlsbackend_p.h"
+#include "qtlsbackend_schannel_p.h"
#include "qtlskey_schannel_p.h"
+#include "qx509_schannel_p.h"
#include <QtCore/qscopeguard.h>
#include <QtCore/qoperatingsystemversion.h>
@@ -159,65 +160,79 @@
QT_BEGIN_NAMESPACE
namespace {
-
bool supportsTls13();
-class SchannelBackend : public QTlsBackend
+}
+
+QString QSchannelBackend::backendName() const
{
-private:
- QString backendName() const override
- {
- return builtinBackendNames[nameIndexSchannel];
- }
+ return builtinBackendNames[nameIndexSchannel];
+}
- QSsl::TlsKey *createKey() const override
- {
- return new QSsl::TlsKeySchannel;
- }
+QList<QSsl::SslProtocol> QSchannelBackend::supportedProtocols() const
+{
+ QList<QSsl::SslProtocol> protocols;
- QList<QSsl::SslProtocol> supportedProtocols() const override
- {
- QList<QSsl::SslProtocol> protocols;
-
- protocols << QSsl::AnyProtocol;
- protocols << QSsl::SecureProtocols;
- protocols << QSsl::TlsV1_0;
- protocols << QSsl::TlsV1_0OrLater;
- protocols << QSsl::TlsV1_1;
- protocols << QSsl::TlsV1_1OrLater;
- protocols << QSsl::TlsV1_2;
- protocols << QSsl::TlsV1_2OrLater;
-
- if (supportsTls13()) {
- protocols << QSsl::TlsV1_3;
- protocols << QSsl::TlsV1_3OrLater;
- }
+ protocols << QSsl::AnyProtocol;
+ protocols << QSsl::SecureProtocols;
+ protocols << QSsl::TlsV1_0;
+ protocols << QSsl::TlsV1_0OrLater;
+ protocols << QSsl::TlsV1_1;
+ protocols << QSsl::TlsV1_1OrLater;
+ protocols << QSsl::TlsV1_2;
+ protocols << QSsl::TlsV1_2OrLater;
- return protocols;
+ if (supportsTls13()) {
+ protocols << QSsl::TlsV1_3;
+ protocols << QSsl::TlsV1_3OrLater;
}
- QList<QSsl::SupportedFeature> supportedFeatures() const override
- {
- QList<QSsl::SupportedFeature> features;
+ return protocols;
+}
- features << QSsl::SupportedFeature::ClientSideAlpn;
- features << QSsl::SupportedFeature::ServerSideAlpn;
+QList<QSsl::SupportedFeature> QSchannelBackend::supportedFeatures() const
+{
+ QList<QSsl::SupportedFeature> features;
- return features;
- }
+ features << QSsl::SupportedFeature::ClientSideAlpn;
+ features << QSsl::SupportedFeature::ServerSideAlpn;
- QList<QSsl::ImplementedClass> implementedClasses() const override
- {
- QList<QSsl::ImplementedClass> classes;
+ return features;
+}
- classes << QSsl::ImplementedClass::Socket;
- classes << QSsl::ImplementedClass::Certificate;
- classes << QSsl::ImplementedClass::Key;
+QList<QSsl::ImplementedClass> QSchannelBackend::implementedClasses() const
+{
+ QList<QSsl::ImplementedClass> classes;
- return classes;
- }
-};
+ classes << QSsl::ImplementedClass::Socket;
+ classes << QSsl::ImplementedClass::Certificate;
+ classes << QSsl::ImplementedClass::Key;
+
+ return classes;
+}
+
+QSsl::TlsKey *QSchannelBackend::createKey() const
+{
+ return new QSsl::TlsKeySchannel;
+}
+
+QSsl::X509Certificate *QSchannelBackend::createCertificate() const
+{
+ return new QSsl::X509CertificateSchannel;
+}
-Q_GLOBAL_STATIC(SchannelBackend, backend)
+QSsl::X509PemReaderPtr QSchannelBackend::X509PemReader() const
+{
+ return QSsl::X509CertificateGeneric::certificatesFromPem;
+}
+
+QSsl::X509DerReaderPtr QSchannelBackend::X509DerReader() const
+{
+ return QSsl::X509CertificateGeneric::certificatesFromDer;
+}
+
+Q_GLOBAL_STATIC(QSchannelBackend, backend)
+
+namespace {
SecBuffer createSecBuffer(void *ptr, unsigned long length, unsigned long bufferType)
{