]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
OpenSSL: Implement tls_connection_get_keys() for OpenSSL 1.1.0
authorJouni Malinen <j@w1.fi>
Mon, 27 Jul 2015 21:58:39 +0000 (00:58 +0300)
committerJouni Malinen <j@w1.fi>
Tue, 28 Jul 2015 15:56:45 +0000 (18:56 +0300)
This needs to use the new accessor functions since the SSL session
details are not directly accessible anymore.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/crypto/tls_openssl.c

index 85bea7209cf4d6c2660002d9d6cf51e2205cad85..fb8e01e406197989853303954551e1d76e38ac81 100644 (file)
@@ -116,6 +116,11 @@ struct tls_connection {
        X509 *peer_cert;
        X509 *peer_issuer;
        X509 *peer_issuer_issuer;
+
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+       unsigned char client_random[SSL3_RANDOM_SIZE];
+       unsigned char server_random[SSL3_RANDOM_SIZE];
+#endif
 };
 
 
@@ -2646,6 +2651,7 @@ int tls_connection_get_keys(void *ssl_ctx, struct tls_connection *conn,
        if (conn == NULL || keys == NULL)
                return -1;
        ssl = conn->ssl;
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
        if (ssl == NULL || ssl->s3 == NULL || ssl->session == NULL)
                return -1;
 
@@ -2654,6 +2660,18 @@ int tls_connection_get_keys(void *ssl_ctx, struct tls_connection *conn,
        keys->client_random_len = SSL3_RANDOM_SIZE;
        keys->server_random = ssl->s3->server_random;
        keys->server_random_len = SSL3_RANDOM_SIZE;
+#else
+       if (ssl == NULL)
+               return -1;
+
+       os_memset(keys, 0, sizeof(*keys));
+       keys->client_random = conn->client_random;
+       keys->client_random_len = SSL_get_client_random(
+               ssl, conn->client_random, sizeof(conn->client_random));
+       keys->server_random = conn->server_random;
+       keys->server_random_len = SSL_get_server_random(
+               ssl, conn->server_random, sizeof(conn->server_random));
+#endif
 
        return 0;
 #endif /* CONFIG_FIPS */