summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Knight <andrew.knight@digia.com>2014-08-09 11:15:42 +0300
committerAndrew Knight <andrew.knight@digia.com>2014-08-11 23:29:22 +0200
commit259cf68e06bbcb8bd9bae5806f5911369cae3f2f (patch)
treef7a36c813bcfd17453ae1b466f1fe0d821c73c7f
parent2fe8efbefe07605d7cd59b08bce358b48580ca7c (diff)
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 <rich@kde.org>
-rw-r--r--src/network/ssl/qsslkey_openssl.cpp6
-rw-r--r--src/network/ssl/qsslkey_p.cpp7
-rw-r--r--src/network/ssl/qsslkey_p.h2
3 files changed, 12 insertions, 3 deletions
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;