memcpy (&rrnd[GNUTLS_RANDOM_SIZE],
session->security_parameters.server_random, GNUTLS_RANDOM_SIZE);
- if (session->security_parameters.version == GNUTLS_SSL3)
+ if (get_num_version(session) == GNUTLS_SSL3)
{ /* SSL 3 */
ret =
_gnutls_ssl3_generate_random
security_parameters_st *dst = &session->security_parameters;
CPY_COMMON;
- _gnutls_set_current_version(session, src->version);
+ dst->pversion = src->pversion;
}
/* Sets the current connection session to conform with the
session->security_parameters.entity =
session->internals.resumed_security_parameters.entity;
- _gnutls_set_current_version (session,
- session->internals.resumed_security_parameters.
- version);
+ if (session->internals.resumed_security_parameters.pversion != NULL)
+ _gnutls_set_current_version (session,
+ session->internals.resumed_security_parameters.
+ pversion->id);
session->security_parameters.cert_type =
session->internals.resumed_security_parameters.cert_type;
else
{
/* we are resuming a session */
- hver = version_to_entry(session->internals.resumed_security_parameters.version);
+ hver = session->internals.resumed_security_parameters.pversion;
}
if (hver == NULL)
/* holds the negotiated certificate type */
gnutls_certificate_type_t cert_type;
gnutls_ecc_curve_t ecc_curve; /* holds the first supported ECC curve requested by client */
- gnutls_protocol_t version; /* moved here */
/* Holds the signature algorithm used in this session - If any */
gnutls_sign_algorithm_t server_sign_algo;
return session->security_parameters.pversion;
}
-#define get_num_version(session) \
- session->security_parameters.version
+inline static unsigned
+get_num_version (gnutls_session_t session)
+{
+ if (likely(session->security_parameters.pversion != NULL))
+ return session->security_parameters.pversion->id;
+ else
+ return GNUTLS_VERSION_UNKNOWN;
+}
#define _gnutls_set_current_version(s, v) { \
- s->security_parameters.version = v; \
s->security_parameters.pversion = version_to_entry(v); \
}
if (session->security_parameters.new_record_padding != 0)
return 1;
- if (session->security_parameters.version == GNUTLS_SSL3)
+ if (get_num_version(session) == GNUTLS_SSL3)
return 0;
ret = _gnutls_epoch_get (session, EPOCH_WRITE_CURRENT, &record_params);
session->security_parameters.cipher_suite, 2);
BUFFER_APPEND_NUM (ps, session->security_parameters.compression_method);
BUFFER_APPEND_NUM (ps, session->security_parameters.cert_type);
- BUFFER_APPEND_NUM (ps, session->security_parameters.version);
+ BUFFER_APPEND_NUM (ps, session->security_parameters.pversion->id);
BUFFER_APPEND (ps, session->security_parameters.master_secret,
GNUTLS_MASTER_SIZE);
{
size_t pack_size;
int ret;
+ unsigned version;
time_t timestamp;
BUFFER_POP_NUM (ps, pack_size);
resumed_security_parameters.cipher_suite, 2);
BUFFER_POP_NUM (ps, session->internals.resumed_security_parameters.compression_method);
BUFFER_POP_NUM (ps, session->internals.resumed_security_parameters.cert_type);
- BUFFER_POP_NUM (ps, session->internals.resumed_security_parameters.version);
+ BUFFER_POP_NUM (ps, version);
+ session->internals.resumed_security_parameters.pversion = version_to_entry(version);
+ if (session->internals.resumed_security_parameters.pversion == NULL)
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
BUFFER_POP (ps,
session->internals.resumed_security_parameters.master_secret,
session->internals.resumed_security_parameters.compression_method = comp;
session->internals.resumed_security_parameters.cert_type = DEFAULT_CERT_TYPE;
- session->internals.resumed_security_parameters.version = version;
+ session->internals.resumed_security_parameters.pversion = version_to_entry(version);
+
+ if (session->internals.resumed_security_parameters.pversion == NULL)
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
if (master->size != GNUTLS_MASTER_SIZE)
return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);