9#include <QtNetwork/private/qsslsocket_p.h>
11#include <QtCore/qscopeguard.h>
12#include <QtCore/qbytearray.h>
13#include <QtCore/qiodevice.h>
14#include <QtCore/qdebug.h>
16#include <openssl/bn.h>
17#include <openssl/dh.h>
21#ifndef OPENSSL_NO_DEPRECATED_3_0
32 QSslSocketPrivate::ensureInitialized();
52 const BIGNUM *p =
nullptr;
53 const BIGNUM *q =
nullptr;
54 const BIGNUM *g =
nullptr;
59 if (residue == 11 || residue == 23)
60 status &= ~DH_NOT_SUITABLE_GENERATOR;
63 bad |= DH_CHECK_P_NOT_PRIME;
64 bad |= DH_CHECK_P_NOT_SAFE_PRIME;
65 bad |= DH_NOT_SUITABLE_GENERATOR;
67 return !(status & bad);
76#ifndef OPENSSL_NO_DEPRECATED_3_0
80 return DHParams::InvalidInputDataError;
82 const unsigned char *data =
reinterpret_cast<
const unsigned char *>(der.data());
83 const int len = der.size();
87 QSslSocketPrivate::ensureInitialized();
91 const auto dhRaii = qScopeGuard([dh] {
q_DH_free(dh
);});
96 return DHParams::UnsafeParametersError;
98 return DHParams::InvalidInputDataError;
103 qCWarning(lcTlsBackend,
"Diffie-Hellman parameters are not supported, because OpenSSL v3 was built with deprecated API removed");
105 return DHParams::NoError;
110#ifndef OPENSSL_NO_DEPRECATED_3_0
114 return DHParams::InvalidInputDataError;
118 QSslSocketPrivate::ensureInitialized();
120 BIO *bio = q_BIO_new_mem_buf(
const_cast<
char *>(pem.data()), pem.size());
122 return DHParams::InvalidInputDataError;
124 const auto bioRaii = qScopeGuard([bio]
133 const auto dhGuard = qScopeGuard([dh]
143 data->assign({buf, len});
145 return DHParams::InvalidInputDataError;
147 return DHParams::UnsafeParametersError;
150 return DHParams::InvalidInputDataError;
155 qCWarning(lcTlsBackend,
"Diffie-Hellman parameters are not supported, because OpenSSL v3 was built with deprecated API removed");
157 return DHParams::NoError;
int dhParametersFromDer(const QByteArray &derData, QByteArray *data) const override
int dhParametersFromPem(const QByteArray &pemData, QByteArray *data) const override
DH * q_d2i_DHparams(DH **a, const unsigned char **pp, long length)
int q_DH_check(DH *dh, int *codes)
BN_ULONG q_BN_mod_word(const BIGNUM *a, BN_ULONG w)
int q_i2d_DHparams(DH *a, unsigned char **p)
int q_BN_is_word(BIGNUM *a, BN_ULONG w)
DH * q_PEM_read_bio_DHparams(BIO *a, DH **b, pem_password_cb *c, void *d)
void q_DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g)
#define q_OPENSSL_free(addr)