]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
Do not free the SRP (n/g) parameters from the callback if they are the static ones...
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 29 Jun 2004 09:28:53 +0000 (09:28 +0000)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Tue, 29 Jun 2004 09:28:53 +0000 (09:28 +0000)
libextra/auth_srp.c
libextra/auth_srp.h
libextra/auth_srp_passwd.c
libextra/gnutls_srp.c

index 750e25bcb48aaf374cad9ace64311eb99aece86e..6ca3bd155c9e533459da22020c2486c22de94e95 100644 (file)
@@ -407,7 +407,9 @@ int _gnutls_proc_srp_client_kx(gnutls_session_t session, opaque * data,
 
 
 
-/* Static parameters according to draft-ietf-tls-srp-05
+/* Static parameters according to draft-ietf-tls-srp-07
+ * Note that if more parameters are added check_g_n()
+ * and _gnutls_srp_entry_free() should be changed.
  */
 static const unsigned char srp_params_1024[] = {
     0xEE, 0xAF, 0x0A, 0xB9, 0xAD, 0xB3, 0x8D, 0xD6,
index 7060277204e4c016d133c75014c6998c05de03dd..992cf9247ca785610aa1170d2c3b1bc90d66333e 100644 (file)
@@ -36,6 +36,14 @@ typedef struct srp_server_auth_info_st {
    char username[MAX_SRP_USERNAME];
 } *srp_server_auth_info_t;
 
+extern const gnutls_datum_t gnutls_srp_1024_group_prime;
+extern const gnutls_datum_t gnutls_srp_1024_group_generator;
+extern const gnutls_datum_t gnutls_srp_1536_group_prime;
+extern const gnutls_datum_t gnutls_srp_1536_group_generator;
+extern const gnutls_datum_t gnutls_srp_2048_group_prime;
+extern const gnutls_datum_t gnutls_srp_2048_group_generator;
+
+
 #ifdef ENABLE_SRP
 
 int _gnutls_proc_srp_server_hello(gnutls_session_t state,
index 037b1cb232ed183e4355ff65cc3cb4b0667f2883..26021c581b55dec5d046ed8fa7d3cc3b4efd3071 100644 (file)
@@ -253,7 +253,7 @@ int _gnutls_srp_pwd_read_entry(gnutls_session_t state, char *username,
        ret = cred->pwd_callback(state, username, &entry->salt,
                                 &entry->v, &entry->g, &entry->n);
 
-       if (ret == 1) {         /* the user does not exist */
+       if (ret == 1) { /* the user does not exist */
            if (entry->g.size != 0 && entry->n.size != 0) {
                ret = _randomize_pwd_entry(entry);
                if (ret < 0) {
@@ -384,13 +384,22 @@ static int _randomize_pwd_entry(SRP_PWD_ENTRY * entry)
     return 0;
 }
 
+/* Free all the entry parameters, except if g and n are
+ * the static ones defined in extra.h
+ */
 void _gnutls_srp_entry_free(SRP_PWD_ENTRY * entry)
 {
     _gnutls_free_datum(&entry->v);
-    _gnutls_free_datum(&entry->g);
-    _gnutls_free_datum(&entry->n);
     _gnutls_free_datum(&entry->salt);
 
+    if (entry->g.data != gnutls_srp_1024_group_generator.data)
+        _gnutls_free_datum(&entry->g);
+
+    if (entry->n.data != gnutls_srp_1024_group_prime.data &&
+       entry->n.data != gnutls_srp_1536_group_prime.data &&
+       entry->n.data != gnutls_srp_2048_group_prime.data)
+        _gnutls_free_datum(&entry->n);
+
     gnutls_free(entry->username);
     gnutls_free(entry);
 }
index 1336cd542aba52d9e4341cb138ff825c1c6f92c2..cc4a097deef512c920c90e099ccb6ad73b7fdf07 100644 (file)
@@ -544,7 +544,8 @@ int gnutls_srp_set_server_credentials_file(gnutls_srp_server_credentials_t
   *
   * @username contains the actual username. 
   * The @salt, @verifier, @generator and @prime must be filled
-  * in using the gnutls_malloc().
+  * in using the gnutls_malloc(). For convenience @prime and @generator 
+  * may also be one of the static parameters defined in extra.h.
   *
   * In case the callback returned a negative number then gnutls will
   * assume that the username does not exist.
@@ -561,9 +562,7 @@ int gnutls_srp_set_server_credentials_file(gnutls_srp_server_credentials_t
   **/
 void
 gnutls_srp_set_server_credentials_function(gnutls_srp_server_credentials_t
-                                          cred,
-                                          gnutls_srp_server_credentials_function
-                                          * func)
+    cred, gnutls_srp_server_credentials_function * func)
 {
     cred->pwd_callback = func;
 }