[glib-networking/mcatanzaro/gnutls-ciphersuite-name] gnutls: use new ciphersuite name functions, when available




commit da0481fa2500a958db3b1078c510ccfea4697d2f
Author: Michael Catanzaro <mcatanzaro redhat com>
Date:   Sat Jan 15 13:32:48 2022 -0600

    gnutls: use new ciphersuite name functions, when available
    
    This allows us to return IANA-style ciphersuite names instead of the
    custom GnuTLS ciphersuite names.
    
    See: https://gitlab.com/gnutls/gnutls/-/merge_requests/1513

 tls/gnutls/gtlsconnection-gnutls.c | 51 ++++++++++++++++++++++++++++++--------
 1 file changed, 41 insertions(+), 10 deletions(-)
---
diff --git a/tls/gnutls/gtlsconnection-gnutls.c b/tls/gnutls/gtlsconnection-gnutls.c
index 387f14d3..6219ee69 100644
--- a/tls/gnutls/gtlsconnection-gnutls.c
+++ b/tls/gnutls/gtlsconnection-gnutls.c
@@ -1096,20 +1096,36 @@ glib_protocol_version_from_gnutls (gnutls_protocol_t protocol_version)
 }
 
 static gchar *
-get_ciphersuite_name (gnutls_session_t session)
+get_ciphersuite_name_tls_1_2_or_older (gnutls_session_t session)
 {
-  gnutls_protocol_t protocol_version = gnutls_protocol_get_version (session);
+  const char *cipher_name;
+
+  cipher_name = gnutls_cipher_suite_get_name (gnutls_kx_get (session),
+                                              gnutls_cipher_get (session),
+                                              gnutls_mac_get (session));
+
+#if GTLS_GNUTLS_CHECK_VERSION(3, 7, 3)
+  return gnutls_cipher_suite_name_to_iana (cipher_name);
+#else
+  return g_strdup (cipher_name);
+#endif
+}
+
+static gchar *
+get_ciphersuite_name_tls_1_3_or_newer (gnutls_session_t session)
+{
+#if GTLS_GNUTLS_CHECK_VERSION(3, 7, 3)
+  const char *cipher_name;
+
+  cipher_name = gnutls_cipher_suite_get_name2 (GNUTLS_KX_UNKNOWN,
+                                               gnutls_cipher_get (session),
+                                               gnutls_mac_get (session),
+                                               gnutls_prf_hash_get (session));
+  return g_strdup (gnutls_cipher_suite_name_to_iana (cipher_name));
+#else
   char *cipher_name;
   char *result;
 
-  if (protocol_version <= GNUTLS_TLS1_2 ||
-      (protocol_version >= GNUTLS_DTLS0_9 && protocol_version <= GNUTLS_DTLS1_2))
-    {
-      return g_strdup (gnutls_cipher_suite_get_name (gnutls_kx_get (session),
-                                                     gnutls_cipher_get (session),
-                                                     gnutls_mac_get (session)));
-    }
-
   cipher_name = g_strdup (gnutls_cipher_get_name (gnutls_cipher_get (session)));
   for (char *c = cipher_name; *c != '\0'; c++)
     {
@@ -1123,6 +1139,21 @@ get_ciphersuite_name (gnutls_session_t session)
   g_free (cipher_name);
 
   return result;
+#endif
+}
+
+static gchar *
+get_ciphersuite_name (gnutls_session_t session)
+{
+  gnutls_protocol_t protocol_version = gnutls_protocol_get_version (session);
+
+  if (protocol_version <= GNUTLS_TLS1_2 ||
+      (protocol_version >= GNUTLS_DTLS0_9 && protocol_version <= GNUTLS_DTLS1_2))
+    {
+      return get_ciphersuite_name_tls_1_2_or_older (session);
+    }
+
+  return get_ciphersuite_name_tls_1_3_or_newer (session);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]