summaryrefslogtreecommitdiffstats
path: root/src/network/ssl/qtlsbackend_p.h
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-07 16:10:18 +0100
commit405337ee7276be4b76e86745c0694c51283b6b07 (patch)
tree563beb2e35aa24edf8b6346ca42a42850cc0488f /src/network/ssl/qtlsbackend_p.h
parent137f5518b84439845aeb5d115341b32fee33bf10 (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.h47
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);