Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qsslcontext_openssl_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// Copyright (C) 2014 BlackBerry Limited. All rights reserved.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5
6#ifndef QSSLCONTEXT_OPENSSL_P_H
7#define QSSLCONTEXT_OPENSSL_P_H
8
9//
10// W A R N I N G
11// -------------
12//
13// This file is not part of the Qt API. It exists purely as an
14// implementation detail. This header file may change from version to
15// version without notice, or even be removed.
16//
17// We mean it.
18//
19
20#include <QtNetwork/private/qtnetworkglobal_p.h>
21#include <QtCore/qvariant.h>
22#include <QtNetwork/qsslcertificate.h>
23#include <QtNetwork/qsslconfiguration.h>
24#include <openssl/ssl.h>
25
27
28#ifndef QT_NO_SSL
29
31{
32public:
33 Q_DISABLE_COPY_MOVE(QSslContext)
34
36
37 static std::shared_ptr<QSslContext> sharedFromConfiguration(QSslSocket::SslMode mode, const QSslConfiguration &configuration,
38 bool allowRootCertOnDemandLoading);
39 static std::shared_ptr<QSslContext> sharedFromPrivateConfiguration(QSslSocket::SslMode mode, QSslConfigurationPrivate *privConfiguration,
40 bool allowRootCertOnDemandLoading);
41
42 static qssloptions setupOpenSslOptions(QSsl::SslProtocol protocol, QSsl::SslOptions sslOptions);
43
45 QString errorString() const;
46
47 SSL* createSsl();
48 bool cacheSession(SSL*); // should be called when handshake completed
49
50 QByteArray sessionASN1() const;
52 int sessionTicketLifeTimeHint() const;
53
54 static void forceAutoTestSecurityLevel();
55
56#ifndef OPENSSL_NO_NEXTPROTONEG
57 // must be public because we want to use it from an OpenSSL callback
58 struct NPNContext {
60 len(0),
61 status(QSslConfiguration::NextProtocolNegotiationNone)
62 { }
63 unsigned char *data;
64 unsigned short len;
66 };
67 NPNContext npnContext() const;
68#endif // !OPENSSL_NO_NEXTPROTONEG
69
70protected:
72
73private:
74 static void initSslContext(QSslContext* sslContext, QSslSocket::SslMode mode, const QSslConfiguration &configuration,
75 bool allowRootCertOnDemandLoading);
76 static void applyBackendConfig(QSslContext *sslContext);
77
78private:
79 SSL_CTX* ctx;
80 EVP_PKEY *pkey;
81 SSL_SESSION *session;
82 QByteArray m_sessionASN1;
83 int m_sessionTicketLifeTimeHint;
84 QSslError::SslError errorCode;
85 QString errorStr;
86 QSslConfiguration sslConfiguration;
87#ifndef OPENSSL_NO_NEXTPROTONEG
88 QByteArray m_supportedNPNVersions;
89 NPNContext m_npnContext;
90#endif // !OPENSSL_NO_NEXTPROTONEG
91};
92
93#endif // QT_NO_SSL
94
96
97#endif // QSSLCONTEXT_OPENSSL_P_H
\inmodule QtCore
Definition qbytearray.h:57
The QSslConfiguration class holds the configuration and state of an SSL connection.
NextProtocolNegotiationStatus
Describes the status of the Next Protocol Negotiation (NPN) or Application-Layer Protocol Negotiation...
QByteArray sessionASN1() const
static std::shared_ptr< QSslContext > sharedFromPrivateConfiguration(QSslSocket::SslMode mode, QSslConfigurationPrivate *privConfiguration, bool allowRootCertOnDemandLoading)
int sessionTicketLifeTimeHint() const
NPNContext npnContext() const
QString errorString() const
static void forceAutoTestSecurityLevel()
void setSessionASN1(const QByteArray &sessionASN1)
bool cacheSession(SSL *)
static qssloptions setupOpenSslOptions(QSsl::SslProtocol protocol, QSsl::SslOptions sslOptions)
QSslError::SslError error() const
static std::shared_ptr< QSslContext > sharedFromConfiguration(QSslSocket::SslMode mode, const QSslConfiguration &configuration, bool allowRootCertOnDemandLoading)
SslError
Describes all recognized errors that can occur during an SSL handshake.
Definition qsslerror.h:24
SslMode
Describes the connection modes available for QSslSocket.
Definition qsslsocket.h:33
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
EGLContext ctx
SslProtocol
Describes the protocol of the cipher.
Definition qssl.h:50
Combined button and popup list for selecting options.
GLenum mode
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLsizei len
unsigned long qssloptions
QObject::connect nullptr
QSslConfiguration::NextProtocolNegotiationStatus status