]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
some more fixes for PSK.
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 16 Nov 2005 11:54:04 +0000 (11:54 +0000)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Wed, 16 Nov 2005 11:54:04 +0000 (11:54 +0000)
lib/gnutls_datum.c
lib/gnutls_session_pack.c
src/serv.c

index 66bc6fce6a2201dde61c4527340d3868a9310be4..367e0d2a2aa23542d4ac2d72ff8ed0c8087983f2 100644 (file)
@@ -37,28 +37,32 @@ void
 _gnutls_write_datum16 (opaque * dest, gnutls_datum_t dat)
 {
   _gnutls_write_uint16 (dat.size, dest);
-  memcpy (&dest[2], dat.data, dat.size);
+  if (dat.data != NULL)
+    memcpy (&dest[2], dat.data, dat.size);
 }
 
 void
 _gnutls_write_datum24 (opaque * dest, gnutls_datum_t dat)
 {
   _gnutls_write_uint24 (dat.size, dest);
-  memcpy (&dest[3], dat.data, dat.size);
+  if (dat.data != NULL)
+    memcpy (&dest[3], dat.data, dat.size);
 }
 
 void
 _gnutls_write_datum32 (opaque * dest, gnutls_datum_t dat)
 {
   _gnutls_write_uint32 (dat.size, dest);
-  memcpy (&dest[4], dat.data, dat.size);
+  if (dat.data != NULL)
+    memcpy (&dest[4], dat.data, dat.size);
 }
 
 void
 _gnutls_write_datum8 (opaque * dest, gnutls_datum_t dat)
 {
   dest[0] = (uint8) dat.size;
-  memcpy (&dest[1], dat.data, dat.size);
+  if (dat.data != NULL)
+    memcpy (&dest[1], dat.data, dat.size);
 }
 
 
index 1c4ec6971c1e1637ed4a8736a7aacd2c8cdbf42b..ecf24188d771516bc1df1e8d0c91fa1ba99a6e25 100644 (file)
@@ -769,8 +769,10 @@ error:
 static int
 pack_psk_auth_info (gnutls_session_t session, gnutls_datum * packed_session)
 {
-  psk_auth_info_t info = _gnutls_get_auth_info (session);
-  int pack_size, username_size, pos;
+  psk_auth_info_t info;
+  int pack_size, username_size = 0, pos;
+
+  info = _gnutls_get_auth_info (session);
 
   if (info == NULL && session->key->auth_info_size != 0)
     {
@@ -778,11 +780,11 @@ pack_psk_auth_info (gnutls_session_t session, gnutls_datum * packed_session)
       return GNUTLS_E_INVALID_REQUEST;
     }
 
-  username_size = strlen (info->username) + 1; /* include the terminating null */
-  if (info)
+  if (info) {
+    username_size = strlen (info->username) + 1; /* include the terminating null */
     pack_size = username_size +        
        2 + 4 * 3 + info->dh.prime.size + info->dh.generator.size + info->dh.public_key.size;
-  else
+  else
     pack_size = 0;
 
   packed_session->size = PACK_HEADER_SIZE + pack_size + sizeof (uint32);
index d47351aa04d1cafdd1b28a7b591786efb52a44d3..6c6bfc5fcc7113ef91f9ee25edd1be78ae299cc2 100644 (file)
@@ -282,7 +282,7 @@ int protocol_priority[PRI_MAX] =
   { GNUTLS_TLS1_1, GNUTLS_TLS1, GNUTLS_SSL3, 0 };
 int kx_priority[PRI_MAX] =
   { GNUTLS_KX_DHE_DSS, GNUTLS_KX_RSA, GNUTLS_KX_DHE_RSA, GNUTLS_KX_SRP,
-  GNUTLS_KX_PSK,
+  GNUTLS_KX_PSK, GNUTLS_KX_DHE_PSK,
   /* Do not use anonymous authentication, unless you know what that means */
   GNUTLS_KX_SRP_DSS, GNUTLS_KX_SRP_RSA, GNUTLS_KX_ANON_DH,
   GNUTLS_KX_RSA_EXPORT, 0