]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Added gnutls_set_default_priority2() and deprecated gnutls_set_default_priority().
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 24 Oct 2007 13:50:59 +0000 (16:50 +0300)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 24 Oct 2007 13:50:59 +0000 (16:50 +0300)
15 files changed:
NEWS
doc/examples/ex-client-resume.c
doc/examples/ex-client-srp.c
doc/examples/ex-client-tlsia.c
doc/examples/ex-client1.c
doc/examples/ex-client2.c
doc/examples/ex-serv-anon.c
doc/examples/ex-serv-export.c
doc/examples/ex-serv-pgp.c
doc/examples/ex-serv-srp.c
doc/examples/ex-serv1.c
includes/gnutls/gnutls.h.in
lib/gnutls_priority.c
src/cli.c
src/serv.c

diff --git a/NEWS b/NEWS
index e257a93013a61ef6a071bbeb34ef3387c2af06b8..5d6e644eac4b3949d2b4a1a89800fe89ccda7559 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,9 @@ of using /dev/random to generate keys.
 
 ** Added priority functions that accept strings.
 
+** Added gnutls_set_default_priority2() which accepts a flag to indicate
+priorities preferences.
+
 ** Added gnutls_record_disable_padding() to allow servers talking to 
 buggy clients that complain if the TLS 1.0 record protocol padding is
 used.
@@ -21,6 +24,9 @@ used.
 all supported compatibility options (like disabling padding).
 
 ** API and ABI modifications:
+gnutls_set_default_priority: DEPRECATED
+gnutls_set_default_priority_export: DEPRECATED
+gnutls_set_default_priority2: ADDED
 gnutls_session_enable_compatibility_mode: ADDED
 gnutls_record_disable_padding: ADDED
 gnutls_mac_convert_priority: ADDED
index 3002a0c630201c884ad04c1935094502c4c63295..0e739019121cf3dce529274a6a676f8ec463baac 100644 (file)
@@ -54,7 +54,7 @@ main (void)
 
       gnutls_init (&session, GNUTLS_CLIENT);
 
-      gnutls_set_default_priority (session);
+      gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_PERFORMANCE);
 
       gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE, xcred);
 
index dde39bb105a7ce2fb3663526166065c6c912a5e3..ea09c2f82e5b4f1bb52596218c4b0e3eaaecf7bb 100644 (file)
@@ -69,7 +69,7 @@ main (void)
 
   /* Set the priorities.
    */
-  gnutls_set_default_priority (session);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_SECURITY);
   gnutls_kx_set_priority( session, kx_priorities);
 
   /* put the SRP credentials to the current session
index d07953dc9effb4d649776b5714b61e6f47a2863c..40a5670ad6874a3a3271019332c53242036f47d5 100644 (file)
@@ -79,7 +79,7 @@ main (void)
   gnutls_init (&session, GNUTLS_CLIENT);
 
   /* Use default priorities */
-  gnutls_set_default_priority (session);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_SECURITY);
   gnutls_kx_set_priority (session, kx_prio);
 
   /* put the anonymous and TLS/IA credentials to the current session
index 150c714dc70b7396cdc978949b919434f950f489..6aeceec83b085facbb9b98015ac27ae2856ecb1c 100644 (file)
@@ -47,7 +47,7 @@ main (void)
   gnutls_init (&session, GNUTLS_CLIENT);
 
   /* Use default priorities */
-  gnutls_set_default_priority (session);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_PERFORMANCE);
   gnutls_kx_set_priority (session, kx_prio);
 
   /* put the anonymous credentials to the current session
index 858f6955c1c6dc6f5f56b2b38cc3104cf557369e..37b074489b2ce480e61252c0ac3a2372e5fba478 100644 (file)
@@ -50,7 +50,7 @@ main (void)
   gnutls_init (&session, GNUTLS_CLIENT);
 
   /* Use default priorities */
-  gnutls_set_default_priority (session);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_PERFORMANCE);
 
   /* put the x509 credentials to the current session
    */
index 96b8c642627846b876ee6418ea8fdeb3251b6248..22ca9d2933a41202b4f9f02205d64298d3ee0b9a 100644 (file)
@@ -44,7 +44,7 @@ initialize_tls_session (void)
   /* avoid calling all the priority functions, since the defaults
    * are adequate.
    */
-  gnutls_set_default_priority (session);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_SECURITY);
   gnutls_kx_set_priority (session, kx_prio);
 
   gnutls_credentials_set (session, GNUTLS_CRD_ANON, anoncred);
index f8c80cf9b60ee83178535af153f50f29f4ca6f8f..e457ecff5d66f96a4de496697b6d859ff742fa3e 100644 (file)
@@ -56,7 +56,7 @@ initialize_tls_session (void)
 
   /* Use the default priorities, plus, export cipher suites.
    */
-  gnutls_set_default_export_priority (session);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_EXPORT);
 
   gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE, cert_cred);
 
index 27906744f69be5f9558ca192a95ccbb026438326..be79e3e980eabb7c9a63c75869d24f981b31afb0 100644 (file)
@@ -68,7 +68,7 @@ initialize_tls_session (void)
    */
   gnutls_set_default_priority (session);
 
-  gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE, cred);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_SECURITY);
 
   /* request client certificate if any.
    */
index 32a63c3374627af8a8bc479d85fb8e81854ee01a..b49b965293c0f33ed8e3e28cf30ab8941509ca8a 100644 (file)
@@ -50,7 +50,7 @@ initialize_tls_session (void)
 
   gnutls_init (&session, GNUTLS_SERVER);
 
-  gnutls_set_default_priority (session);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_SECURITY);
   gnutls_kx_set_priority (session, kx_priority);
 
   gnutls_credentials_set (session, GNUTLS_CRD_SRP, srp_cred);
index e0327e7f27b096eca18a5f982ccda38d6dfb7132..b1ed81cd0611c7f26345f3b3dc9973b0164560c4 100644 (file)
@@ -47,9 +47,10 @@ initialize_tls_session (void)
   gnutls_init (&session, GNUTLS_SERVER);
 
   /* avoid calling all the priority functions, since the defaults
-   * are adequate.
+   * are adequate. Depending on the needs it could also be 
+   * GNUTLS_PRIORITIES_PERFORMANCE.
    */
-  gnutls_set_default_priority (session);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_SECURITY);
 
   gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE, x509_cred);
 
index 345752474b436b49a55f7fa1f609ca543945e2c0..70ef5c6183f67e134066538f225d0e17682817a3 100644 (file)
@@ -165,6 +165,13 @@ extern "C"
     GNUTLS_CLIENT
   } gnutls_connection_end_t;
 
+  typedef enum 
+  {
+    GNUTLS_PRIORITIES_PERFORMANCE,
+    GNUTLS_PRIORITIES_SECURITY,
+    GNUTLS_PRIORITIES_EXPORT
+  } gnutls_priority_t;
+
   typedef enum
   {
     GNUTLS_AL_WARNING = 1,
@@ -516,10 +523,26 @@ extern "C"
   int gnutls_cipher_convert_priority (int* out_priority, int out_priority_len, const char *prio, char sep);
   int gnutls_certificate_type_convert_priority (int* out_priority, int out_priority_len, const char *prio, char sep);
 
+#ifdef __GNUC__
+
+#define _GNUTLS_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)  
+                                                          
+#if _GNUTLS_GCC_VERSION >= 30100
+#define _GNUTLS_GCC_ATTR_DEPRECATED __attribute__ ((__deprecated__))
+#endif
+
+#endif /* __GNUC__ */
+
+#ifndef _GNUTLS_GCC_ATTR_DEPRECATED
+#define _GNUTLS_GCC_ATTR_DEPRECATED
+#endif
+                                                          
+                                                          
 /* if you just want some defaults, use the following.
  */
-  int gnutls_set_default_priority (gnutls_session_t session);
-  int gnutls_set_default_export_priority (gnutls_session_t session);
+  void gnutls_set_default_priority2 (gnutls_session_t session, gnutls_priority_t flag);
+  int gnutls_set_default_priority (gnutls_session_t session) _GNUTLS_GCC_ATTR_DEPRECATED;
+  int gnutls_set_default_export_priority (gnutls_session_t session) _GNUTLS_GCC_ATTR_DEPRECATED;
 
 /* Returns the name of a cipher suite */
   const char *gnutls_cipher_suite_get_name (gnutls_kx_algorithm_t
index b65afa710e948740943ba5cc6ca7442b807c3319..52dba9a93ab91473ed713eb022d9de054264e01f 100644 (file)
@@ -275,65 +275,179 @@ gnutls_certificate_type_set_priority (gnutls_session_t session,
 int
 gnutls_set_default_priority (gnutls_session_t session)
 {
-  static const int protocol_priority[] = {
-    /* GNUTLS_TLS1_2, -- not finalized yet! */
-    GNUTLS_TLS1_1,
-    GNUTLS_TLS1_0,
-    GNUTLS_SSL3,
-    0
-  };
-  static const int kx_priority[] = {
-    GNUTLS_KX_DHE_PSK,
-    GNUTLS_KX_PSK,
-    GNUTLS_KX_SRP_RSA,
-    GNUTLS_KX_SRP_DSS,
-    GNUTLS_KX_SRP,
-    GNUTLS_KX_DHE_RSA,
-    GNUTLS_KX_DHE_DSS,
-    GNUTLS_KX_RSA,
-    /* GNUTLS_KX_ANON_DH: Man-in-the-middle prone, don't add!
-     * GNUTLS_KX_RSA_EXPORT: Deprecated, don't add!
-     */
-    0
-  };
-  static const int cipher_priority[] = {
-    GNUTLS_CIPHER_AES_256_CBC,
-    GNUTLS_CIPHER_AES_128_CBC,
-    GNUTLS_CIPHER_3DES_CBC,
+
+  gnutls_set_default_priority2( session, GNUTLS_PRIORITIES_SECURITY);
+
+  return 0;
+}
+
+static const int protocol_priority[] = {
+ /* GNUTLS_TLS1_2, -- not finalized yet! */
+ GNUTLS_TLS1_1,
+ GNUTLS_TLS1_0,
+ GNUTLS_SSL3,
+ 0
+};
+
+static const int kx_priority_performance[] = {
+  GNUTLS_KX_RSA,
+  GNUTLS_KX_DHE_RSA,
+  GNUTLS_KX_DHE_DSS,
+  GNUTLS_KX_PSK,
+  GNUTLS_KX_DHE_PSK,
+  GNUTLS_KX_SRP_RSA,
+  GNUTLS_KX_SRP_DSS,
+  GNUTLS_KX_SRP,
+  /* GNUTLS_KX_ANON_DH: Man-in-the-middle prone, don't add!
+   * GNUTLS_KX_RSA_EXPORT: Deprecated, don't add!
+   */
+  0
+};
+
+static const int kx_priority_export[] = {
+  GNUTLS_KX_RSA,
+  GNUTLS_KX_DHE_RSA,
+  GNUTLS_KX_DHE_DSS,
+  GNUTLS_KX_PSK,
+  GNUTLS_KX_DHE_PSK,
+  GNUTLS_KX_SRP_RSA,
+  GNUTLS_KX_SRP_DSS,
+  GNUTLS_KX_SRP,
+  GNUTLS_KX_RSA_EXPORT,
+  0
+};
+
+static const int kx_priority_security[] = {
+  /* The ciphersuites that offer forward secrecy take
+   * precendance
+   */
+  GNUTLS_KX_DHE_RSA,
+  GNUTLS_KX_DHE_DSS,
+  GNUTLS_KX_DHE_PSK,
+  GNUTLS_KX_SRP_RSA,
+  GNUTLS_KX_SRP_DSS,
+  GNUTLS_KX_RSA,
+  GNUTLS_KX_PSK,
+  GNUTLS_KX_SRP,
+  /* GNUTLS_KX_ANON_DH: Man-in-the-middle prone, don't add!
+   * GNUTLS_KX_RSA_EXPORT: Deprecated, don't add!
+   */
+  0
+};
+
+static const int cipher_priority_performance[] = {
+  GNUTLS_CIPHER_ARCFOUR_128,
+  GNUTLS_CIPHER_AES_128_CBC,
 #ifdef ENABLE_CAMELLIA
     GNUTLS_CIPHER_CAMELLIA_128_CBC,
 #endif
-    GNUTLS_CIPHER_ARCFOUR_128,
-    /* GNUTLS_CIPHER_ARCFOUR_40: Insecure, don't add! */
-    0
-  };
-  static const int comp_priority[] = {
-    /* GNUTLS_COMP_LZO: Not standardized, don't add! */
-    GNUTLS_COMP_DEFLATE,
-    GNUTLS_COMP_NULL,
-    0
-  };
-  static const int mac_priority[] = {
-    GNUTLS_MAC_SHA1,
-    GNUTLS_MAC_MD5,
-    0
-  };
-  static int cert_type_priority[] = {
-    GNUTLS_CRT_X509,
-    GNUTLS_CRT_OPENPGP,
-    0
-  };
-
-  gnutls_cipher_set_priority (session, cipher_priority);
-  gnutls_compression_set_priority (session, comp_priority);
-  gnutls_kx_set_priority (session, kx_priority);
+  GNUTLS_CIPHER_AES_256_CBC,
+  GNUTLS_CIPHER_3DES_CBC,
+  /* GNUTLS_CIPHER_ARCFOUR_40: Insecure, don't add! */
+  0
+};
+
+
+static const int cipher_priority_security[] = {
+  GNUTLS_CIPHER_AES_256_CBC,
+  GNUTLS_CIPHER_AES_128_CBC,
+#ifdef ENABLE_CAMELLIA
+    GNUTLS_CIPHER_CAMELLIA_128_CBC,
+#endif
+  GNUTLS_CIPHER_3DES_CBC,
+  GNUTLS_CIPHER_ARCFOUR_128,
+  /* GNUTLS_CIPHER_ARCFOUR_40: Insecure, don't add! */
+  0
+};
+
+static const int cipher_priority_export[] = {
+  GNUTLS_CIPHER_ARCFOUR_128,
+  GNUTLS_CIPHER_AES_128_CBC,
+#ifdef ENABLE_CAMELLIA
+    GNUTLS_CIPHER_CAMELLIA_128_CBC,
+#endif
+  GNUTLS_CIPHER_AES_256_CBC,
+  GNUTLS_CIPHER_3DES_CBC,
+  GNUTLS_CIPHER_ARCFOUR_40,
+  0
+};
+
+static const int comp_priority[] = {
+  /* compression should be explicitely requested to be enabled */
+  GNUTLS_COMP_NULL,
+  0
+};
+
+
+static const int mac_priority_performance[] = {
+  GNUTLS_MAC_MD5,
+  GNUTLS_MAC_SHA1,
+  0
+};
+
+static const int mac_priority_security[] = {
+  GNUTLS_MAC_SHA1,
+  GNUTLS_MAC_MD5,
+  0
+};
+
+#define mac_priority_export mac_priority_security
+
+static int cert_type_priority[] = {
+  GNUTLS_CRT_X509,
+  GNUTLS_CRT_OPENPGP,
+  0
+};
+
+
+/**
+  * gnutls_set_default_priority2 - Sets some default priority on the cipher suites supported by gnutls.
+  * @session: is a #gnutls_session_t structure.
+  *
+  * Sets some default priority on the ciphers, key exchange methods,
+  * macs and compression methods. This is to avoid using the
+  * gnutls_*_priority() functions, if these defaults are ok.  You may
+  * override any of the following priorities by calling the
+  * appropriate functions.
+  *
+  * The default order is:
+  * Protocols: TLS 1.1, TLS 1.0, and SSL3.
+  * Compression: NULL.
+  * Certificate types: X.509, OpenPGP
+  *
+  * When performance is requested the fastest ciphers and key exchange
+  * methods are used, whilst in security, the most conservative options
+  * are set.
+  *
+  * Returns 0 on success.
+  *
+  **/
+void
+gnutls_set_default_priority2 (gnutls_session_t session, gnutls_priority_t flag)
+{
+
+  if (flag == GNUTLS_PRIORITIES_PERFORMANCE) {
+    gnutls_cipher_set_priority (session, cipher_priority_performance);
+    gnutls_kx_set_priority (session, kx_priority_performance);
+    gnutls_mac_set_priority (session, mac_priority_performance);
+  } else if (flag == GNUTLS_PRIORITIES_SECURITY) {
+    gnutls_cipher_set_priority (session, cipher_priority_security);
+    gnutls_kx_set_priority (session, kx_priority_security);
+    gnutls_mac_set_priority (session, mac_priority_security);
+  } else if (flag == GNUTLS_PRIORITIES_EXPORT) {
+    gnutls_cipher_set_priority (session, cipher_priority_export);
+    gnutls_kx_set_priority (session, kx_priority_export);
+    gnutls_mac_set_priority (session, mac_priority_export);
+  }
+
   gnutls_protocol_set_priority (session, protocol_priority);
-  gnutls_mac_set_priority (session, mac_priority);
+  gnutls_compression_set_priority (session, comp_priority);
   gnutls_certificate_type_set_priority (session, cert_type_priority);
 
-  return 0;
+  return;
 }
 
+
 /**
   * gnutls_set_default_export_priority - Sets some default priority on the cipher suites supported by gnutls.
   * @session: is a #gnutls_session_t structure.
@@ -353,32 +467,7 @@ gnutls_set_default_priority (gnutls_session_t session)
 int
 gnutls_set_default_export_priority (gnutls_session_t session)
 {
-  static const int protocol_priority[] = {
-    GNUTLS_TLS1, GNUTLS_SSL3, 0
-  };
-  static const int kx_priority[] = {
-    GNUTLS_KX_RSA, GNUTLS_KX_DHE_DSS, GNUTLS_KX_DHE_RSA,
-    GNUTLS_KX_RSA_EXPORT, 0
-  };
-  static const int cipher_priority[] = {
-    GNUTLS_CIPHER_AES_256_CBC,
-    GNUTLS_CIPHER_AES_128_CBC,
-    GNUTLS_CIPHER_3DES_CBC,
-#ifdef ENABLE_CAMELLIA
-    GNUTLS_CIPHER_CAMELLIA_128_CBC,
-#endif
-    GNUTLS_CIPHER_ARCFOUR_128,
-    GNUTLS_CIPHER_ARCFOUR_40, 0
-  };
-  static const int comp_priority[] = { GNUTLS_COMP_NULL, 0 };
-  static const int mac_priority[] =
-    { GNUTLS_MAC_SHA1, GNUTLS_MAC_MD5, 0 };
-
-  gnutls_cipher_set_priority (session, cipher_priority);
-  gnutls_compression_set_priority (session, comp_priority);
-  gnutls_kx_set_priority (session, kx_priority);
-  gnutls_protocol_set_priority (session, protocol_priority);
-  gnutls_mac_set_priority (session, mac_priority);
+  gnutls_set_default_priority2( session, GNUTLS_PRIORITIES_EXPORT);
 
   return 0;
 }
index 6307f789e8d0a3e83985f4f9f5b1ce6eb8645b5b..5640030ddbda74b6c107c48348cf734c7f70faa8 100644 (file)
--- a/src/cli.c
+++ b/src/cli.c
@@ -378,7 +378,7 @@ init_tls_session (const char *hostname)
 
   gnutls_init (&session, GNUTLS_CLIENT);
 
-  gnutls_set_default_priority (session);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_PERFORMANCE);
 
   /* allow the use of private ciphersuites.
    */
index f4d687cba6db1523104e180a55a36fea09e18132..9ab93d475546f6a17b6735c8f1b07cb210775a97 100644 (file)
@@ -380,7 +380,7 @@ initialize_session (void)
       gnutls_db_set_ptr (session, NULL);
     }
 
-  gnutls_set_default_priority (session);
+  gnutls_set_default_priority2 (session, GNUTLS_PRIORITIES_PERFORMANCE);
 
   if (cipher_priority[0])
     gnutls_cipher_set_priority (session, cipher_priority);