summaryrefslogtreecommitdiffstats
path: root/src/network
diff options
context:
space:
mode:
Diffstat (limited to 'src/network')
-rw-r--r--src/network/ssl/qsslellipticcurve.cpp13
-rw-r--r--src/network/ssl/qsslellipticcurve.h1
-rw-r--r--src/network/ssl/qsslellipticcurve_dummy.cpp6
-rw-r--r--src/network/ssl/qsslellipticcurve_openssl.cpp20
-rw-r--r--src/network/ssl/qsslsocket_openssl_symbols.cpp2
-rw-r--r--src/network/ssl/qsslsocket_openssl_symbols_p.h1
6 files changed, 43 insertions, 0 deletions
diff --git a/src/network/ssl/qsslellipticcurve.cpp b/src/network/ssl/qsslellipticcurve.cpp
index 7e122557df..d70975591d 100644
--- a/src/network/ssl/qsslellipticcurve.cpp
+++ b/src/network/ssl/qsslellipticcurve.cpp
@@ -92,6 +92,19 @@ QT_BEGIN_NAMESPACE
\sa shortName()
*/
+/*!
+ \fn QSslEllipticCurve QSslEllipticCurve::fromLongName(const QString &name)
+
+ Returns an QSslEllipticCurve instance representing the named curve \a name.
+ The \a name is a long name for the curve, whose exact spelling depends on the
+ SSL implementation.
+
+ If the given \a name is not supported, returns an invalid QSslEllipticCurve instance.
+
+ \note The OpenSSL implementation of this function treats the name case-sensitively.
+
+ \sa longName()
+*/
/*!
\fn QString QSslEllipticCurve::shortName() const
diff --git a/src/network/ssl/qsslellipticcurve.h b/src/network/ssl/qsslellipticcurve.h
index 6d2a764d87..70bc3cb8cb 100644
--- a/src/network/ssl/qsslellipticcurve.h
+++ b/src/network/ssl/qsslellipticcurve.h
@@ -63,6 +63,7 @@ public:
}
Q_NETWORK_EXPORT static QSslEllipticCurve fromShortName(const QString &name);
+ Q_NETWORK_EXPORT static QSslEllipticCurve fromLongName(const QString &name);
Q_NETWORK_EXPORT QString shortName() const Q_REQUIRED_RESULT;
Q_NETWORK_EXPORT QString longName() const Q_REQUIRED_RESULT;
diff --git a/src/network/ssl/qsslellipticcurve_dummy.cpp b/src/network/ssl/qsslellipticcurve_dummy.cpp
index 64ac1514ab..1c76b56132 100644
--- a/src/network/ssl/qsslellipticcurve_dummy.cpp
+++ b/src/network/ssl/qsslellipticcurve_dummy.cpp
@@ -59,6 +59,12 @@ QSslEllipticCurve QSslEllipticCurve::fromShortName(const QString &name)
return QSslEllipticCurve();
}
+QSslEllipticCurve QSslEllipticCurve::fromLongName(const QString &name)
+{
+ Q_UNUSED(name);
+ return QSslEllipticCurve();
+}
+
bool QSslEllipticCurve::isTlsNamedCurve() const
{
return false;
diff --git a/src/network/ssl/qsslellipticcurve_openssl.cpp b/src/network/ssl/qsslellipticcurve_openssl.cpp
index d8d1307b2e..e8f6cfee9e 100644
--- a/src/network/ssl/qsslellipticcurve_openssl.cpp
+++ b/src/network/ssl/qsslellipticcurve_openssl.cpp
@@ -103,6 +103,26 @@ QSslEllipticCurve QSslEllipticCurve::fromShortName(const QString &name)
return result;
}
+QSslEllipticCurve QSslEllipticCurve::fromLongName(const QString &name)
+{
+ if (name.isEmpty())
+ return QSslEllipticCurve();
+
+ QSslSocketPrivate::ensureInitialized();
+
+ QSslEllipticCurve result;
+
+#ifndef OPENSSL_NO_EC
+ const QByteArray curveNameLatin1 = name.toLatin1();
+
+ int nid = q_OBJ_ln2nid(curveNameLatin1.data());
+ result.id = nid;
+#endif
+
+ return result;
+}
+
+
// The brainpool curve NIDs (RFC 7027) have been introduced in OpenSSL 1.0.2,
// redefine them here to make Qt compile with previous versions of OpenSSL
// (yet correctly recognize them as TLS named curves).
diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp
index ef87e77a3e..a2f8c7f592 100644
--- a/src/network/ssl/qsslsocket_openssl_symbols.cpp
+++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp
@@ -179,6 +179,7 @@ DEFINEFUNC2(int, i2d_X509, X509 *a, a, unsigned char **b, b, return -1, return)
DEFINEFUNC(const char *, OBJ_nid2sn, int a, a, return 0, return)
DEFINEFUNC(const char *, OBJ_nid2ln, int a, a, return 0, return)
DEFINEFUNC(int, OBJ_sn2nid, const char *s, s, return 0, return)
+DEFINEFUNC(int, OBJ_ln2nid, const char *s, s, return 0, return)
DEFINEFUNC3(int, i2t_ASN1_OBJECT, char *a, a, int b, b, ASN1_OBJECT *c, c, return -1, return)
DEFINEFUNC4(int, OBJ_obj2txt, char *a, a, int b, b, ASN1_OBJECT *c, c, int d, d, return -1, return)
@@ -774,6 +775,7 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(OBJ_nid2sn)
RESOLVEFUNC(OBJ_nid2ln)
RESOLVEFUNC(OBJ_sn2nid)
+ RESOLVEFUNC(OBJ_ln2nid)
RESOLVEFUNC(i2t_ASN1_OBJECT)
RESOLVEFUNC(OBJ_obj2txt)
RESOLVEFUNC(OBJ_obj2nid)
diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h
index 04cfd83de5..f2cc8a87fc 100644
--- a/src/network/ssl/qsslsocket_openssl_symbols_p.h
+++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h
@@ -259,6 +259,7 @@ int q_i2d_X509(X509 *a, unsigned char **b);
const char *q_OBJ_nid2sn(int a);
const char *q_OBJ_nid2ln(int a);
int q_OBJ_sn2nid(const char *s);
+int q_OBJ_ln2nid(const char *s);
int q_i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *obj);
int q_OBJ_obj2txt(char *buf, int buf_len, ASN1_OBJECT *obj, int no_name);
int q_OBJ_obj2nid(const ASN1_OBJECT *a);