diff options
Diffstat (limited to 'lib/tls13/session_ticket.c')
-rw-r--r-- | lib/tls13/session_ticket.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/lib/tls13/session_ticket.c b/lib/tls13/session_ticket.c index cd97f4bf7d..94990ea4cf 100644 --- a/lib/tls13/session_ticket.c +++ b/lib/tls13/session_ticket.c @@ -310,7 +310,7 @@ static int generate_session_ticket(gnutls_session_t session, struct tls13_nst_st struct ticket_st encrypted_ticket; /* This is the resumption master secret */ const uint8_t *rms = session->key.proto.tls13.ap_rms; - unsigned rms_len = MAX_HASH_SIZE; + unsigned rms_len = session->key.proto.tls13.temp_secret_size; gnutls_mac_algorithm_t kdf_id; struct tls13_ticket_data tdata; @@ -624,6 +624,7 @@ void _gnutls13_session_ticket_destroy(struct tls13_nst_st *ticket) if (ticket) { _gnutls_free_datum(&ticket->ticket); _gnutls_free_datum(&ticket->ticket_nonce); + _gnutls_free_datum(&ticket->rms); memset(ticket, 0, sizeof(struct tls13_nst_st)); } } @@ -710,10 +711,21 @@ int _gnutls13_session_ticket_get(gnutls_session_t session, struct tls13_nst_st * return gnutls_assert_val(ret); } - ret = session->internals.tls13_ticket_len; + if ((ret = _gnutls_set_datum(&dst->rms, + session->key.proto.tls13.ap_rms_original.data, + session->key.proto.tls13.ap_rms_original.size)) < 0) { + gnutls_assert(); + goto error; + } + + ret = session->internals.tls13_ticket_len + dst->rms.size; } return ret; + +error: + _gnutls13_session_ticket_destroy(dst); + return ret; } /* @@ -732,11 +744,19 @@ int _gnutls13_session_ticket_peek(gnutls_session_t session, struct tls13_nst_st if (!src) return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - if (dst) + if (dst) { memcpy(dst, src, sizeof(struct tls13_nst_st)); + memcpy(&dst->rms, &session->key.proto.tls13.ap_rms_original, sizeof(gnutls_datum_t)); + } - ret = session->internals.tls13_ticket_len; + ret = session->internals.tls13_ticket_len + session->key.proto.tls13.ap_rms_original.size; } return ret; } + +int _gnutls13_session_ticket_unset(gnutls_session_t session) +{ + /* TODO implement this */ + return 0; +} |