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-07 16:10:18 +0100 |
commit | 405337ee7276be4b76e86745c0694c51283b6b07 (patch) | |
tree | 563beb2e35aa24edf8b6346ca42a42850cc0488f /src/network/ssl/qtlsbackend_p.h | |
parent | 137f5518b84439845aeb5d115341b32fee33bf10 (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.
Pick-to: dev
Task-number: QTBUG-90954
Task-number: QTBUG-65922
Change-Id: Ic9d5abf91e42ce81fe56239f95ae97b64035e950
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'src/network/ssl/qtlsbackend_p.h')
-rw-r--r-- | src/network/ssl/qtlsbackend_p.h | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/src/network/ssl/qtlsbackend_p.h b/src/network/ssl/qtlsbackend_p.h index b0a54ecf59..b09c631108 100644 --- a/src/network/ssl/qtlsbackend_p.h +++ b/src/network/ssl/qtlsbackend_p.h @@ -60,6 +60,7 @@ #include <QtNetwork/qsslkey.h> #include <QtNetwork/qssl.h> +#include <QtCore/qloggingcategory.h> #include <QtCore/qnamespace.h> #include <QtCore/qobject.h> #include <QtCore/qglobal.h> @@ -123,12 +124,48 @@ public: QByteArray pemFooter() const; }; -// Abstraction above OpenSSL's X509, or our generic +// An abstraction hiding OpenSSL's X509 or our generic // 'derData'-based code. -class X509Certificate; +class X509Certificate +{ +public: + virtual ~X509Certificate(); + + virtual bool isEqual(const X509Certificate &rhs) const = 0; + virtual bool isNull() const = 0; + virtual bool isSelfSigned() const = 0; + virtual QByteArray version() const = 0; + virtual QByteArray serialNumber() const = 0; + virtual QStringList issuerInfo(QSslCertificate::SubjectInfo info) const = 0; + virtual QStringList issuerInfo(const QByteArray &attribute) const = 0; + virtual QStringList subjectInfo(QSslCertificate::SubjectInfo info) const = 0; + virtual QStringList subjectInfo(const QByteArray &attribute) const = 0; + + virtual QList<QByteArray> subjectInfoAttributes() const = 0; + virtual QList<QByteArray> issuerInfoAttributes() const = 0; + virtual QMultiMap<QSsl::AlternativeNameEntryType, QString> subjectAlternativeNames() const = 0; + virtual QDateTime effectiveDate() const = 0; + virtual QDateTime expiryDate() const = 0; + virtual TlsKey *publicKey() const = 0; + + // Extensions. Plugins do not expose internal representation + // and cannot rely on QSslCertificate's internals. + virtual qsizetype numberOfExtensions() const = 0; + virtual QString oidForExtension(qsizetype index) const = 0; + virtual QString nameForExtension(qsizetype index) const = 0; + virtual QVariant valueForExtension(qsizetype index) const = 0; + virtual bool isExtensionCritical(qsizetype index) const = 0; + virtual bool isExtensionSupported(qsizetype index) const = 0; + + virtual QByteArray toPem() const = 0; + virtual QByteArray toDer() const = 0; + virtual QString toText() const = 0; + + virtual Qt::HANDLE handle() const = 0; + + virtual size_t hash(size_t seed) const noexcept = 0; +}; -// X509-related auxiliary functions, previously static -// member-functions in different classes. using X509ChainVerifyPtr = QList<QSslError> (*)(const QList<QSslCertificate> &chain, const QString &hostName); using X509PemReaderPtr = QList<QSslCertificate> (*)(const QByteArray &pem, int count); @@ -201,6 +238,8 @@ public: Q_DISABLE_COPY_MOVE(QTlsBackend) }; +Q_DECLARE_LOGGING_CATEGORY(lcTlsBackend) + #define QTlsBackend_iid "org.qt-project.Qt.QTlsBackend" Q_DECLARE_INTERFACE(QTlsBackend, QTlsBackend_iid); |