summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Heimrich <karsten.heimrich@qt.io>2018-08-14 16:17:20 +0200
committerKarsten Heimrich <karsten.heimrich@qt.io>2018-08-17 10:23:21 +0000
commit7e07f7f6961c7c2a32e954d3857885c060e85cf1 (patch)
tree08615f3d3fa2e1205f46dcdeaf0e5daa959b292f
parent8553650468e30579faba4ff97fafaf3b1cfea3c2 (diff)
Add missing OpenSSL symbols to support Curve25519 algorithm
Change-Id: Ic5d4f96051b76c423af525b9d416d9367a17cb6d Reviewed-by: Karsten Heimrich <karsten.heimrich@qt.io>
-rw-r--r--src/knx/ssl/qsslsocket_openssl11_symbols_p.h15
-rw-r--r--src/knx/ssl/qsslsocket_openssl_symbols.cpp53
-rw-r--r--src/knx/ssl/qsslsocket_openssl_symbols_p.h13
3 files changed, 81 insertions, 0 deletions
diff --git a/src/knx/ssl/qsslsocket_openssl11_symbols_p.h b/src/knx/ssl/qsslsocket_openssl11_symbols_p.h
index ac8d46c..73e6cad 100644
--- a/src/knx/ssl/qsslsocket_openssl11_symbols_p.h
+++ b/src/knx/ssl/qsslsocket_openssl11_symbols_p.h
@@ -135,4 +135,19 @@ unsigned long q_SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *session)
#define q_SSL_CTX_set_max_proto_version(ctx, version) \
q_SSL_CTX_ctrl(ctx, SSL_CTRL_SET_MAX_PROTO_VERSION, version, nullptr)
+int q_EVP_PKEY_set_type(EVP_PKEY *pkey, int type);
+int q_EVP_PKEY_up_ref(EVP_PKEY *pkey);
+int q_EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey,
+ const unsigned char *pt, size_t ptlen);
+
+EVP_PKEY *q_d2i_PrivateKey_bio(BIO *bp, EVP_PKEY **a);
+int q_i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey);
+int q_i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp);
+
+int q_EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub, size_t *len);
+EVP_PKEY *q_EVP_PKEY_new_raw_public_key(int type, ENGINE *e, const unsigned char *pub, size_t len);
+
+int q_EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, size_t *len);
+EVP_PKEY *q_EVP_PKEY_new_raw_private_key(int type, ENGINE *e, const unsigned char *priv, size_t len);
+
#endif
diff --git a/src/knx/ssl/qsslsocket_openssl_symbols.cpp b/src/knx/ssl/qsslsocket_openssl_symbols.cpp
index 466eba0..5caf7e8 100644
--- a/src/knx/ssl/qsslsocket_openssl_symbols.cpp
+++ b/src/knx/ssl/qsslsocket_openssl_symbols.cpp
@@ -179,6 +179,20 @@ DEFINEFUNC(unsigned long, SSL_SESSION_get_ticket_lifetime_hint, const SSL_SESSIO
DEFINEFUNC4(void, DH_get0_pqg, const DH *dh, dh, const BIGNUM **p, p, const BIGNUM **q, q, const BIGNUM **g, g, return, DUMMYARG)
DEFINEFUNC(int, DH_bits, DH *dh, dh, return 0, return)
+DEFINEFUNC2(int, EVP_PKEY_set_type, EVP_PKEY *pkey, pkey, int type, type, return 0, return)
+DEFINEFUNC3(int, EVP_PKEY_set1_tls_encodedpoint, EVP_PKEY *pkey, pkey, const unsigned char *pt, pt, size_t ptlen, ptlen, return 0, return)
+DEFINEFUNC(int, EVP_PKEY_up_ref, EVP_PKEY *pkey, pkey, return 0, return)
+
+DEFINEFUNC2(EVP_PKEY *, d2i_PrivateKey_bio, BIO *bp, bp, EVP_PKEY **a, a, return nullptr, return)
+DEFINEFUNC2(int, i2d_PUBKEY_bio, BIO *bp, bp, EVP_PKEY *pkey, pkey, return 0, return)
+DEFINEFUNC2(int, i2d_PUBKEY, EVP_PKEY *a, a, unsigned char **pp, pp, return 0, return)
+
+DEFINEFUNC3(int, EVP_PKEY_get_raw_public_key, const EVP_PKEY *pkey, pkey, unsigned char *pub, pub, size_t *len, len, return 0, return)
+DEFINEFUNC4(EVP_PKEY *, EVP_PKEY_new_raw_public_key, int type, type, ENGINE *e, e, const unsigned char *pub, pub, size_t len, len, return nullptr, return)
+
+DEFINEFUNC3(int, EVP_PKEY_get_raw_private_key, const EVP_PKEY *pkey, pkey, unsigned char *priv, priv, size_t *len, len, return 0, return)
+DEFINEFUNC4(EVP_PKEY *, EVP_PKEY_new_raw_private_key, int type, type, ENGINE *e, e, const unsigned char *priv, priv, size_t len, len, return nullptr, return)
+
#else // QT_CONFIG(opensslv11)
// Functions below are either deprecated or removed in OpenSSL >= 1.1:
@@ -545,6 +559,19 @@ DEFINEFUNC5(int, PKCS12_parse, PKCS12 *p12, p12, const char *pass, pass, EVP_PKE
DEFINEFUNC2(PKCS12 *, d2i_PKCS12_bio, BIO *bio, bio, PKCS12 **pkcs12, pkcs12, return 0, return);
DEFINEFUNC(void, PKCS12_free, PKCS12 *pkcs12, pkcs12, return, DUMMYARG)
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ DEFINEFUNC2(EVP_PKEY_CTX *, EVP_PKEY_CTX_new, EVP_PKEY *pkey, pkey, ENGINE *e, e, return nullptr, return)
+ DEFINEFUNC2(EVP_PKEY_CTX *, EVP_PKEY_CTX_new_id, int id, id, ENGINE *e, e, return nullptr, return)
+ DEFINEFUNC(void, EVP_PKEY_CTX_free, EVP_PKEY_CTX *ctx, ctx, return, DUMMYARG)
+
+ DEFINEFUNC(int, EVP_PKEY_derive_init, EVP_PKEY_CTX *ctx, ctx, return 0, return)
+ DEFINEFUNC2(int, EVP_PKEY_derive_set_peer, EVP_PKEY_CTX *ctx, ctx, EVP_PKEY *peer, peer, return 0, return)
+ DEFINEFUNC3(int, EVP_PKEY_derive, EVP_PKEY_CTX *ctx, ctx, unsigned char *key, key, size_t *keylen, keylen, return 0, return)
+
+ DEFINEFUNC(int, EVP_PKEY_keygen_init, EVP_PKEY_CTX *ctx, ctx, return 0, return)
+ DEFINEFUNC2(int, EVP_PKEY_keygen, EVP_PKEY_CTX *ctx, ctx, EVP_PKEY **ppkey, ppkey, return 0, return)
+#endif
+
#define RESOLVEFUNC(func) \
if (!(_q_##func = _q_PTR_##func(libs.first->resolve(#func))) \
&& !(_q_##func = _q_PTR_##func(libs.second->resolve(#func)))) \
@@ -923,6 +950,19 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(DH_bits)
RESOLVEFUNC(DSA_bits)
+ RESOLVEFUNC(EVP_PKEY_set_type)
+ RESOLVEFUNC(EVP_PKEY_up_ref)
+ RESOLVEFUNC(EVP_PKEY_set1_tls_encodedpoint)
+
+ RESOLVEFUNC(d2i_PrivateKey_bio)
+ RESOLVEFUNC(i2d_PUBKEY_bio)
+ RESOLVEFUNC(i2d_PUBKEY)
+
+ RESOLVEFUNC(EVP_PKEY_get_raw_public_key)
+ RESOLVEFUNC(EVP_PKEY_new_raw_public_key)
+ RESOLVEFUNC(EVP_PKEY_get_raw_private_key)
+ RESOLVEFUNC(EVP_PKEY_new_raw_private_key)
+
#else // !opensslv11
RESOLVEFUNC(ASN1_STRING_data)
@@ -1232,6 +1272,19 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(d2i_PKCS12_bio)
RESOLVEFUNC(PKCS12_free)
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ RESOLVEFUNC(EVP_PKEY_CTX_new)
+ RESOLVEFUNC(EVP_PKEY_CTX_new_id)
+ RESOLVEFUNC(EVP_PKEY_CTX_free)
+
+ RESOLVEFUNC(EVP_PKEY_derive_init)
+ RESOLVEFUNC(EVP_PKEY_derive_set_peer)
+ RESOLVEFUNC(EVP_PKEY_derive)
+
+ RESOLVEFUNC(EVP_PKEY_keygen_init)
+ RESOLVEFUNC(EVP_PKEY_keygen)
+#endif
+
symbolsResolved = true;
delete libs.first;
delete libs.second;
diff --git a/src/knx/ssl/qsslsocket_openssl_symbols_p.h b/src/knx/ssl/qsslsocket_openssl_symbols_p.h
index 7583a89..1efe31c 100644
--- a/src/knx/ssl/qsslsocket_openssl_symbols_p.h
+++ b/src/knx/ssl/qsslsocket_openssl_symbols_p.h
@@ -562,6 +562,19 @@ void q_SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
#endif
#endif // OPENSSL_VERSION_NUMBER >= 0x1000100fL ...
+#if OPENSSL_VERSION_NUMBER >= 0x10000000L
+ EVP_PKEY_CTX *q_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e);
+ EVP_PKEY_CTX *q_EVP_PKEY_CTX_new_id(int id, ENGINE *e);
+ void q_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx);
+
+ int q_EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx);
+ int q_EVP_PKEY_derive_set_peer(EVP_PKEY_CTX *ctx, EVP_PKEY *peer);
+ int q_EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen);
+
+ int q_EVP_PKEY_keygen_init(EVP_PKEY_CTX *ctx);
+ int q_EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey);
+#endif
+
// Helper function
class QDateTime;
QDateTime q_getTimeFromASN1(const ASN1_TIME *aTime);