diff options
author | Timur Pocheptsov <timur.pocheptsov@qt.io> | 2021-01-26 17:20:29 +0100 |
---|---|---|
committer | Timur Pocheptsov <timur.pocheptsov@qt.io> | 2021-02-18 17:13:30 +0000 |
commit | 64a878e36b178ddb3834c6ca782a6ebefed6aed8 (patch) | |
tree | 71b972c44c9b309abc2892b2f53ea044ee9ebb33 /src/network/ssl/qsslsocket_schannel.cpp | |
parent | 0d4fb41e8c00263a0d385b70cc066776cbf6cc37 (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.cpp | 109 |
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) { |