diff --git a/src/network/ssl/qsslkey_openssl.cpp b/src/network/ssl/qsslkey_openssl.cpp index a6dab2ba38f..14559d66187 100644 --- a/src/network/ssl/qsslkey_openssl.cpp +++ b/src/network/ssl/qsslkey_openssl.cpp @@ -109,6 +109,12 @@ bool QSslKeyPrivate::fromEVP_PKEY(EVP_PKEY *pkey) return false; } +void QSslKeyPrivate::decodeDer(const QByteArray &der, const QByteArray &passPhrase, + bool deepClear) +{ + decodePem(pemFromDer(der), passPhrase, deepClear); +} + void QSslKeyPrivate::decodePem(const QByteArray &pem, const QByteArray &passPhrase, bool deepClear) { diff --git a/src/network/ssl/qsslkey_p.cpp b/src/network/ssl/qsslkey_p.cpp index c6e873dc49c..991b29792e8 100644 --- a/src/network/ssl/qsslkey_p.cpp +++ b/src/network/ssl/qsslkey_p.cpp @@ -189,9 +189,10 @@ QSslKey::QSslKey(const QByteArray &encoded, QSsl::KeyAlgorithm algorithm, { d->type = type; d->algorithm = algorithm; - d->decodePem((encoding == QSsl::Der) - ? d->pemFromDer(encoded) : encoded, - passPhrase); + if (encoding == QSsl::Der) + d->decodeDer(encoded, passPhrase); + else + d->decodePem(encoded, passPhrase); } /*! diff --git a/src/network/ssl/qsslkey_p.h b/src/network/ssl/qsslkey_p.h index fd5f97c2915..e12bbadc06b 100644 --- a/src/network/ssl/qsslkey_p.h +++ b/src/network/ssl/qsslkey_p.h @@ -86,6 +86,8 @@ public: void clear(bool deep = true); bool fromEVP_PKEY(EVP_PKEY *pkey); + void decodeDer(const QByteArray &der, const QByteArray &passPhrase, + bool deepClear = true); void decodePem(const QByteArray &pem, const QByteArray &passPhrase, bool deepClear = true); QByteArray pemHeader() const;