]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Allow quering available elliptic curves by adding gnutls_ecc_curve_list().
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 24 Jan 2012 19:27:57 +0000 (20:27 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 24 Jan 2012 19:27:57 +0000 (20:27 +0100)
NEWS
doc/printlist.c
lib/algorithms/ecc.c
lib/includes/gnutls/gnutls.h.in
lib/libgnutls.map
src/common.c

diff --git a/NEWS b/NEWS
index 6c78c4e3cbc47a406efb26305f9837e9a32b658a..6d82a68ef974d1fa5caaeefddeb2208f6eba54d3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,7 @@ a fork.
 gnutls_x509_crt_get_authority_key_gn_serial: Added
 gnutls_x509_crl_get_authority_key_gn_serial: Added
 gnutls_pkcs11_reinit: Added
+gnutls_ecc_list: Added
 
 * Version 3.0.12 (released 2012-01-20)
 
index d52b5c81eb258cf309b6de67cf5350f5fbcf8ec5..87d0ca349bc5395876dbd1765d51a084388a9239 100644 (file)
@@ -144,6 +144,18 @@ static void main_texinfo (void)
     printf ("@end table\n");
   }
 
+  {
+    const gnutls_ecc_curve_t *p = gnutls_ecc_curve_list ();
+
+    printf ("\n@heading Elliptic curves\n@table @code\n");
+    for (; *p; p++)
+      {
+        printf ("@item %s\n", gnutls_ecc_curve_get_name (*p));
+      }
+    printf ("@end table\n");
+  }
+
+
   {
     const gnutls_compression_method_t *p = gnutls_compression_list ();
 
index ea0b830d35fe1694b30fa4af6e99beaf90b4985a..0431450d02a1605dd8a12da4fc7a90b8b0ca5c0c 100644 (file)
@@ -121,6 +121,34 @@ _gnutls_tls_id_to_ecc_curve (int num)
   return ret;
 }
 
+/**
+ * gnutls_ecc_curve_list:
+ *
+ * Get the list of supported elliptic curves.
+ *
+ * This function is not thread safe.
+ *
+ * Returns: Return a (0)-terminated list of #gnutls_ecc_curve_t
+ *   integers indicating the available curves.
+ **/
+const gnutls_ecc_curve_t *
+gnutls_ecc_curve_list (void)
+{
+static gnutls_ecc_curve_t supported_curves[MAX_ALGOS] = { 0 };
+
+  if (supported_curves[0] == 0)
+    {
+      int i = 0;
+
+      GNUTLS_ECC_CURVE_LOOP ( 
+        supported_curves[i++]=p->id;
+      );
+      supported_curves[i++]=0;
+    }
+
+  return supported_curves;
+}
+
 /* Maps numbers to TLS NamedCurve IDs (RFC4492).
  * Returns a negative number on error.
  */
index 92acaaadbb956e28b0af49cf99d78b2b6d119c7e..344168a2e01194590d2eab7c7a4dcfea79f7ab0d 100644 (file)
@@ -797,6 +797,7 @@ gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session);
   gnutls_sign_algorithm_t gnutls_sign_get_id (const char *name);
 
   /* list supported algorithms */
+  const gnutls_ecc_curve_t * gnutls_ecc_curve_list (void);
   const gnutls_cipher_algorithm_t *gnutls_cipher_list (void);
   const gnutls_mac_algorithm_t *gnutls_mac_list (void);
   const gnutls_compression_method_t *gnutls_compression_list (void);
index cf3792c3af79de71fe5f296a2a30fc6f3532cfdc..229a65c4e26a114f3dec966ab030e51962b95f68 100644 (file)
@@ -765,6 +765,7 @@ GNUTLS_3_0_0 {
        gnutls_pkcs11_reinit;
        gnutls_x509_crt_get_authority_key_gn_serial;
        gnutls_x509_crl_get_authority_key_gn_serial;
+       gnutls_ecc_curve_list;
 } GNUTLS_2_12;
 
 GNUTLS_PRIVATE {
index bd03a54229bd176d1fde99140ae685ff491a1940..e01e9a07caa33afb5f116e73fa3972ae4075eb24 100644 (file)
@@ -702,6 +702,20 @@ print_list (const char* priorities, int verbose)
       }
   }
 
+  {
+    const gnutls_ecc_curve_t *p = gnutls_ecc_curve_list ();
+
+    printf ("Elliptic curves: ");
+    for (; *p; p++)
+      {
+        printf ("CURVE-%s", gnutls_ecc_curve_get_name (*p));
+        if (*(p + 1))
+          printf (", ");
+        else
+          printf ("\n");
+      }
+  }
+
   {
     const gnutls_pk_algorithm_t *p = gnutls_pk_list ();