#define CPY_COMMON dst->entity = src->entity; \
dst->cs = src->cs; \
dst->grp = src->grp; \
+ dst->prf = src->prf; \
memcpy( dst->master_secret, src->master_secret, GNUTLS_MASTER_SIZE); \
memcpy( dst->client_random, src->client_random, GNUTLS_RANDOM_SIZE); \
memcpy( dst->server_random, src->server_random, GNUTLS_RANDOM_SIZE); \
* 1 byte the protocol version
*
* 2 bytes the cipher suite
+ * 4 bytes the PRF ID
*
* 48 bytes the master secret
*
BUFFER_APPEND_NUM(ps, session->security_parameters.entity);
BUFFER_APPEND(ps, session->security_parameters.cs->id, 2);
+ BUFFER_APPEND_NUM(ps, session->security_parameters.prf->id);
+
BUFFER_APPEND_NUM(ps, session->security_parameters.cert_type);
BUFFER_APPEND_NUM(ps, session->security_parameters.pversion->id);
if (session->internals.resumed_security_parameters.cs == NULL)
return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+ BUFFER_POP_NUM(ps, version);
+ session->internals.resumed_security_parameters.prf = mac_to_entry(version);
+ if (session->internals.resumed_security_parameters.prf == NULL)
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+
BUFFER_POP_NUM(ps,
session->internals.resumed_security_parameters.
cert_type);
session->internals.resumed_security_parameters.pversion =
version_to_entry(version);
+ if (session->internals.resumed_security_parameters.pversion->selectable_prf)
+ session->internals.resumed_security_parameters.prf = mac_to_entry(session->internals.resumed_security_parameters.cs->prf);
+ else
+ session->internals.resumed_security_parameters.prf = mac_to_entry(GNUTLS_MAC_MD5_SHA1);
+ if (session->internals.resumed_security_parameters.prf == NULL)
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+
if (session->internals.resumed_security_parameters.pversion ==
NULL)
return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);