Coverage Report

Created: 2026-01-25 07:18

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/qtbase/src/network/ssl/qsslconfiguration.h
Line
Count
Source
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
// Qt-Security score:significant reason:default
5
6
/****************************************************************************
7
**
8
** In addition, as a special exception, the copyright holders listed above give
9
** permission to link the code of its release of Qt with the OpenSSL project's
10
** "OpenSSL" library (or modified versions of the "OpenSSL" library that use the
11
** same license as the original version), and distribute the linked executables.
12
**
13
** You must comply with the GNU General Public License version 2 in all
14
** respects for all of the code used other than the "OpenSSL" code.  If you
15
** modify this file, you may extend this exception to your version of the file,
16
** but you are not obligated to do so.  If you do not wish to do so, delete
17
** this exception statement from your version of this file.
18
**
19
****************************************************************************/
20
21
#ifndef QSSLCONFIGURATION_H
22
#define QSSLCONFIGURATION_H
23
24
#include <QtNetwork/qtnetworkglobal.h>
25
#include <QtCore/qmap.h>
26
#include <QtCore/qshareddata.h>
27
#include <QtNetwork/qsslsocket.h>
28
#include <QtNetwork/qssl.h>
29
30
#ifndef QT_NO_SSL
31
32
QT_BEGIN_NAMESPACE
33
34
class QSslCertificate;
35
class QSslCipher;
36
class QSslKey;
37
class QSslEllipticCurve;
38
class QSslDiffieHellmanParameters;
39
40
class QSslConfigurationPrivate;
41
class Q_NETWORK_EXPORT QSslConfiguration
42
{
43
public:
44
    QSslConfiguration();
45
    QSslConfiguration(const QSslConfiguration &other);
46
    ~QSslConfiguration();
47
0
    QSslConfiguration &operator=(QSslConfiguration &&other) noexcept { swap(other); return *this; }
48
    QSslConfiguration &operator=(const QSslConfiguration &other);
49
50
    void swap(QSslConfiguration &other) noexcept
51
0
    { d.swap(other.d); }
52
53
    bool operator==(const QSslConfiguration &other) const;
54
    inline bool operator!=(const QSslConfiguration &other) const
55
0
    { return !(*this == other); }
56
57
    bool isNull() const;
58
59
    QSsl::SslProtocol protocol() const;
60
    void setProtocol(QSsl::SslProtocol protocol);
61
62
    // Verification
63
    QSslSocket::PeerVerifyMode peerVerifyMode() const;
64
    void setPeerVerifyMode(QSslSocket::PeerVerifyMode mode);
65
66
    int peerVerifyDepth() const;
67
    void setPeerVerifyDepth(int depth);
68
69
    // Certificate & cipher configuration
70
    QList<QSslCertificate> localCertificateChain() const;
71
    void setLocalCertificateChain(const QList<QSslCertificate> &localChain);
72
73
    QSslCertificate localCertificate() const;
74
    void setLocalCertificate(const QSslCertificate &certificate);
75
76
    QSslCertificate peerCertificate() const;
77
    QList<QSslCertificate> peerCertificateChain() const;
78
    QSslCipher sessionCipher() const;
79
    QSsl::SslProtocol sessionProtocol() const;
80
81
    // Private keys, for server sockets
82
    QSslKey privateKey() const;
83
    void setPrivateKey(const QSslKey &key);
84
85
    // Cipher settings
86
    QList<QSslCipher> ciphers() const;
87
    void setCiphers(const QList<QSslCipher> &ciphers);
88
    void setCiphers(const QString &ciphers);
89
    static QList<QSslCipher> supportedCiphers();
90
91
    // Certificate Authority (CA) settings
92
    QList<QSslCertificate> caCertificates() const;
93
    void setCaCertificates(const QList<QSslCertificate> &certificates);
94
    bool addCaCertificates(
95
            const QString &path, QSsl::EncodingFormat format = QSsl::Pem,
96
            QSslCertificate::PatternSyntax syntax = QSslCertificate::PatternSyntax::FixedString);
97
    void addCaCertificate(const QSslCertificate &certificate);
98
    void addCaCertificates(const QList<QSslCertificate> &certificates);
99
100
    static QList<QSslCertificate> systemCaCertificates();
101
102
    void setSslOption(QSsl::SslOption option, bool on);
103
    bool testSslOption(QSsl::SslOption option) const;
104
105
    QByteArray sessionTicket() const;
106
    void setSessionTicket(const QByteArray &sessionTicket);
107
    int sessionTicketLifeTimeHint() const;
108
109
    QSslKey ephemeralServerKey() const;
110
111
    // EC settings
112
    QList<QSslEllipticCurve> ellipticCurves() const;
113
    void setEllipticCurves(const QList<QSslEllipticCurve> &curves);
114
    static QList<QSslEllipticCurve> supportedEllipticCurves();
115
116
    QByteArray preSharedKeyIdentityHint() const;
117
    void setPreSharedKeyIdentityHint(const QByteArray &hint);
118
119
    QSslDiffieHellmanParameters diffieHellmanParameters() const;
120
    void setDiffieHellmanParameters(const QSslDiffieHellmanParameters &dhparams);
121
122
    QMap<QByteArray, QVariant> backendConfiguration() const;
123
    void setBackendConfigurationOption(const QByteArray &name, const QVariant &value);
124
    void setBackendConfiguration(const QMap<QByteArray, QVariant> &backendConfiguration = QMap<QByteArray, QVariant>());
125
126
    static QSslConfiguration defaultConfiguration();
127
    static void setDefaultConfiguration(const QSslConfiguration &configuration);
128
129
#if QT_CONFIG(dtls) || defined(Q_QDOC)
130
    bool dtlsCookieVerificationEnabled() const;
131
    void setDtlsCookieVerificationEnabled(bool enable);
132
133
    static QSslConfiguration defaultDtlsConfiguration();
134
    static void setDefaultDtlsConfiguration(const QSslConfiguration &configuration);
135
#endif // dtls
136
137
    bool handshakeMustInterruptOnError() const;
138
    void setHandshakeMustInterruptOnError(bool interrupt);
139
140
    bool missingCertificateIsFatal() const;
141
    void setMissingCertificateIsFatal(bool cannotRecover);
142
143
    void setOcspStaplingEnabled(bool enable);
144
    bool ocspStaplingEnabled() const;
145
146
    enum NextProtocolNegotiationStatus {
147
        NextProtocolNegotiationNone,
148
        NextProtocolNegotiationNegotiated,
149
        NextProtocolNegotiationUnsupported
150
    };
151
152
    void setAllowedNextProtocols(const QList<QByteArray> &protocols);
153
    QList<QByteArray> allowedNextProtocols() const;
154
155
    QByteArray nextNegotiatedProtocol() const;
156
    NextProtocolNegotiationStatus nextProtocolNegotiationStatus() const;
157
158
    static const char ALPNProtocolHTTP2[];
159
    static const char NextProtocolHttp1_1[];
160
161
private:
162
    friend class QSslSocket;
163
    friend class QSslConfigurationPrivate;
164
    friend class QSslContext;
165
    friend class QTlsBackend;
166
    QSslConfiguration(QSslConfigurationPrivate *dd);
167
    QSharedDataPointer<QSslConfigurationPrivate> d;
168
};
169
170
0
Q_DECLARE_SHARED(QSslConfiguration)
171
0
172
0
QT_END_NAMESPACE
173
0
174
QT_DECL_METATYPE_EXTERN(QSslConfiguration, Q_NETWORK_EXPORT)
Unexecuted instantiation: int qRegisterNormalizedMetaType<QSslConfiguration>(QByteArray const&)
Unexecuted instantiation: QMetaTypeId<QSslConfiguration>::qt_metatype_id()
175
176
#endif  // QT_NO_SSL
177
178
#endif