From 259cf68e06bbcb8bd9bae5806f5911369cae3f2f Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Sat, 9 Aug 2014 11:15:42 +0300 Subject: SSL backend: Add a decodeDer() method to the private API This allows QSslKey to avoid converting to pem format if the backend supports native der decoding. Change-Id: I0822a21401ad0ca81c6eeb6c7d53c421e1e2e93a Reviewed-by: Richard J. Moore --- src/network/ssl/qsslkey_openssl.cpp | 6 ++++++ src/network/ssl/qsslkey_p.cpp | 7 ++++--- src/network/ssl/qsslkey_p.h | 2 ++ 3 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src/network') diff --git a/src/network/ssl/qsslkey_openssl.cpp b/src/network/ssl/qsslkey_openssl.cpp index a6dab2ba38..14559d6618 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 c6e873dc49..991b29792e 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 fd5f97c291..e12bbadc06 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; -- cgit v1.2.3