]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
TLS: Add support for tls_get_version()
authorJouni Malinen <j@w1.fi>
Sun, 29 Nov 2015 17:41:37 +0000 (19:41 +0200)
committerJouni Malinen <j@w1.fi>
Sun, 29 Nov 2015 17:41:37 +0000 (19:41 +0200)
This allows wpa_supplicant to return eap_tls_version STATUS information
when using the internal TLS client implementation.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/crypto/tls_internal.c
src/tls/tlsv1_client.c
src/tls/tlsv1_client.h

index b91f181e2aae06e2f00f0d269d40b82f81a353a5..ff773fe78cae774742cd990f6ea46c482eb1cc4c 100644 (file)
@@ -635,7 +635,12 @@ int tls_connection_set_cipher_list(void *tls_ctx, struct tls_connection *conn,
 int tls_get_version(void *ssl_ctx, struct tls_connection *conn,
                    char *buf, size_t buflen)
 {
-       /* TODO */
+       if (conn == NULL)
+               return -1;
+#ifdef CONFIG_TLS_INTERNAL_CLIENT
+       if (conn->client)
+               return tlsv1_client_get_version(conn->client, buf, buflen);
+#endif /* CONFIG_TLS_INTERNAL_CLIENT */
        return -1;
 }
 
index 49ebf2ff32264e6af8faa380a28d17ae137b1d6c..26f055c1e1d9b6ee08f3653ba65b786b2fb57ac6 100644 (file)
@@ -838,3 +838,26 @@ void tlsv1_client_set_cb(struct tlsv1_client *conn,
        conn->cb_ctx = cb_ctx;
        conn->cert_in_cb = !!cert_in_cb;
 }
+
+
+int tlsv1_client_get_version(struct tlsv1_client *conn, char *buf,
+                            size_t buflen)
+{
+       if (!conn)
+               return -1;
+       switch (conn->rl.tls_version) {
+       case TLS_VERSION_1:
+               os_strlcpy(buf, "TLSv1", buflen);
+               break;
+       case TLS_VERSION_1_1:
+               os_strlcpy(buf, "TLSv1.1", buflen);
+               break;
+       case TLS_VERSION_1_2:
+               os_strlcpy(buf, "TLSv1.2", buflen);
+               break;
+       default:
+               return -1;
+       }
+
+       return 0;
+}
index bbfb8bdd99229ab86cf17062b9423f1663e6d602..95bd545feece244d2bb71eed9eeeaba79932376b 100644 (file)
@@ -56,5 +56,7 @@ void tlsv1_client_set_cb(struct tlsv1_client *conn,
                                          union tls_event_data *data),
                         void *cb_ctx,
                         int cert_in_cb);
+int tlsv1_client_get_version(struct tlsv1_client *conn, char *buf,
+                            size_t buflen);
 
 #endif /* TLSV1_CLIENT_H */