]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Added gnutls_session_get_desc()
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 12 Mar 2013 17:23:49 +0000 (18:23 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 12 Mar 2013 17:23:49 +0000 (18:23 +0100)
13 files changed:
NEWS
doc/examples/ex-cert-select-pkcs11.c
doc/examples/ex-cert-select.c
doc/examples/ex-client-anon.c
doc/examples/ex-client-dtls.c
doc/examples/ex-client-psk.c
doc/examples/ex-client-srp.c
doc/examples/ex-client-x509.c
lib/gnutls_int.h
lib/gnutls_ui.c
lib/includes/gnutls/gnutls.h.in
lib/libgnutls.map
src/common.c

diff --git a/NEWS b/NEWS
index c51ba998bb0202f9a696080e7a0d378b66b8db61..d692d31e1f1f5ced733faac58998406c3ceab80e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,7 @@ gnutls_x509_crq_get_dn2: Added
 gnutls_x509_trust_list_remove_trust_mem: Added
 gnutls_x509_trust_list_remove_trust_file: Added
 gnutls_x509_trust_list_remove_cas: Added
+gnutls_session_get_desc: Added
 
 
 * Version 3.1.9 (released 2013-02-27)
index a437a515072cf1d8db3f8cf7f528f2715a643380..fb902be891ecb56a3f9f0960f1c14c5e3b751df1 100644 (file)
@@ -128,7 +128,11 @@ main (void)
     }
   else
     {
-      printf ("- Handshake was completed\n");
+      char* desc;
+      
+      desc = gnutls_session_get_desc(session);
+      printf ("- Session info: %s\n", desc);
+      gnutls_free(desc);
     }
 
   gnutls_record_send (session, MSG, strlen (MSG));
index b4ec2b1605f64804ddbc43706124d691111bdebf..6e12a8d3a1f3976ebec5dddae9973848ffccaed6 100644 (file)
@@ -143,7 +143,11 @@ main (void)
     }
   else
     {
-      printf ("- Handshake was completed\n");
+      char* desc;
+      
+      desc = gnutls_session_get_desc(session);
+      printf ("- Session info: %s\n", desc);
+      gnutls_free(desc);
     }
 
   gnutls_record_send (session, MSG, strlen (MSG));
index 3d4d3afa08db5c3b55968365e350f81ab11f31f0..4cb804e65d105036896bc15b3523c0190a3c9a7d 100644 (file)
@@ -70,7 +70,11 @@ main (void)
     }
   else
     {
-      printf ("- Handshake was completed\n");
+      char* desc;
+      
+      desc = gnutls_session_get_desc(session);
+      printf ("- Session info: %s\n", desc);
+      gnutls_free(desc);
     }
 
   gnutls_record_send (session, MSG, strlen (MSG));
index 026cb7d0827632538a79305be63bc80ebb4ec750..9b8fd98c2117e73ffd0d960a5b94fe11dae68be7 100644 (file)
@@ -87,7 +87,11 @@ main (void)
     }
   else
     {
-      printf ("- Handshake was completed\n");
+      char* desc;
+      
+      desc = gnutls_session_get_desc(session);
+      printf ("- Session info: %s\n", desc);
+      gnutls_free(desc);
     }
 
   gnutls_record_send (session, MSG, strlen (MSG));
index 4ebff50dcd20a9faee5bab9b11e60229c787d40d..60da53e66b40e4a488ed3c28d5430bddd4e1c15d 100644 (file)
@@ -80,7 +80,11 @@ main (void)
     }
   else
     {
-      printf ("- Handshake was completed\n");
+      char* desc;
+      
+      desc = gnutls_session_get_desc(session);
+      printf ("- Session info: %s\n", desc);
+      gnutls_free(desc);
     }
 
   gnutls_record_send (session, MSG, strlen (MSG));
index 7b4989608c61a86e3d23512269e1a8221803250f..e828eb8eaabf4ab3bc356bbdfa0484dac1b781fe 100644 (file)
@@ -77,7 +77,11 @@ main (void)
     }
   else
     {
-      printf ("- Handshake was completed\n");
+      char* desc;
+      
+      desc = gnutls_session_get_desc(session);
+      printf ("- Session info: %s\n", desc);
+      gnutls_free(desc);
     }
 
   gnutls_record_send (session, MSG, strlen (MSG));
index acd6593d47d4136a65c4521217290271a598c7a1..bf8ae6bbef589b1225aae0251bf0c54b61d7a59e 100644 (file)
@@ -96,7 +96,11 @@ int main (void)
     }
   else
     {
-      printf ("- Handshake was completed\n");
+      char* desc;
+      
+      desc = gnutls_session_get_desc(session);
+      printf ("- Session info: %s\n", desc);
+      gnutls_free(desc);
     }
 
   gnutls_record_send (session, MSG, strlen (MSG));
index 8c58b4abd106ca09b2cf7bab80b1af1dd855a28d..305ecefcd7492ffe156a65185edafe944e521621 100644 (file)
@@ -536,7 +536,7 @@ typedef struct
   /* FIXME: The following are not saved in the session storage
    * for session resumption.
    */
-
+  
   /* Used by extensions that enable supplemental data: Which ones
    * do that? Do they belong in security parameters?
    */
index e8b12c379770bfa5544ad47d1bca563bc3f24454..d4cce95e078224f700c28a213d169b9ce78324dc 100644 (file)
@@ -836,5 +836,71 @@ gnutls_certificate_set_rsa_export_params (gnutls_certificate_credentials_t
 {
   res->rsa_params = rsa_params;
 }
-
 #endif
+
+#define DESC_SIZE 64
+
+/**
+ * gnutls_session_get_desc:
+ * @session: is a gnutls session
+ *
+ * This function returns a string describing the current session.
+ * The string is null terminated and allocated using gnutls_malloc().
+ *
+ * Returns: a description of the protocols and algorithms in the current session.
+ *
+ * Since: 3.1.10
+ **/
+char *
+gnutls_session_get_desc (gnutls_session_t session)
+{
+    gnutls_kx_algorithm_t kx;
+    unsigned type;
+    char kx_name[32];
+    char proto_name[32];
+    const char* curve_name = NULL;
+    unsigned dh_bits = 0;
+    char* desc;
+
+    kx = session->security_parameters.kx_algorithm;
+    
+    if (kx == GNUTLS_KX_ANON_ECDH || kx == GNUTLS_KX_ECDHE_PSK ||
+        kx == GNUTLS_KX_ECDHE_RSA || kx == GNUTLS_KX_ECDHE_ECDSA) 
+      {
+        curve_name = gnutls_ecc_curve_get_name(gnutls_ecc_curve_get(session));
+      }
+    else if (kx == GNUTLS_KX_ANON_DH || kx == GNUTLS_KX_DHE_PSK ||
+        kx == GNUTLS_KX_DHE_RSA || kx == GNUTLS_KX_DHE_DSS) 
+      {
+        dh_bits = gnutls_dh_get_prime_bits (session);
+      }
+      
+    if (curve_name != NULL)
+      snprintf(kx_name, sizeof(kx_name), "%s-%s", gnutls_kx_get_name(kx), curve_name);
+    else if (dh_bits != 0)
+      snprintf(kx_name, sizeof(kx_name), "%s-%u", gnutls_kx_get_name(kx), dh_bits);
+    else
+      snprintf(kx_name, sizeof(kx_name), "%s", gnutls_kx_get_name(kx));
+
+    type = gnutls_certificate_type_get (session);
+    if (type == GNUTLS_CRT_X509)
+      snprintf(proto_name, sizeof(proto_name), "%s-PKIX", gnutls_protocol_get_name(_gnutls_protocol_get_version(session)));
+    else
+      snprintf(proto_name, sizeof(proto_name), "%s-%s", gnutls_protocol_get_name(_gnutls_protocol_get_version(session)),
+                                                        gnutls_certificate_type_get_name(type));
+    
+    gnutls_protocol_get_name(_gnutls_protocol_get_version (session)),
+
+    desc = gnutls_malloc(DESC_SIZE);
+    if (desc == NULL)
+      return NULL;
+
+    snprintf(desc, DESC_SIZE,
+             "(%s)-(%s)-(%s)-(%s)",
+            proto_name,
+            kx_name,
+            gnutls_cipher_get_name (gnutls_cipher_get (session)),
+            gnutls_mac_get_name (gnutls_mac_get (session)));
+            
+    return desc;
+}
index 872e4fdca0106616c4819dbee35ba9369386cbbe..851d397ae388d090cf4a5cb66e4d56a75b012b11 100644 (file)
@@ -1090,6 +1090,7 @@ gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session);
                                 gnutls_datum_t * data);
   void gnutls_session_get_random (gnutls_session_t session, gnutls_datum_t* client, 
                                   gnutls_datum_t* server);
+  char * gnutls_session_get_desc (gnutls_session_t session);
 
   int gnutls_session_set_premaster (gnutls_session_t session, unsigned int entity,
                            gnutls_protocol_t version, 
index 3a793a1521bf2748f0d591c3e8b1a29bd87ee1a5..a762d189aaae6ab6cc66c31c49989df349dae7d3 100644 (file)
@@ -900,6 +900,7 @@ GNUTLS_3_1_0 {
        gnutls_x509_trust_list_remove_trust_mem;
        gnutls_x509_trust_list_remove_trust_file;
        gnutls_x509_trust_list_remove_cas;
+       gnutls_session_get_desc;
 } GNUTLS_3_0_0;
 
 GNUTLS_PRIVATE {
index 6a6ede25cfb487adb062319226bac20850ef94c5..8663fc7753e454f36168f67bdf6e10f419393ac3 100644 (file)
@@ -457,8 +457,13 @@ print_info (gnutls_session_t session, int verbose, int print_cert)
     unsigned char session_id[33];
     size_t session_id_size = sizeof (session_id);
     gnutls_srtp_profile_t srtp_profile;
+    char *desc;
     int rc;
 
+    desc = gnutls_session_get_desc(session);
+    printf ("- Description: %s\n", desc);
+    gnutls_free(desc);
+
     /* print session ID */
     gnutls_session_get_id (session, session_id, &session_id_size);
     printf ("- Session ID: %s\n",