_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);
}
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)
{
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);
{ 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