diff options
author | Daiki Ueno <dueno@redhat.com> | 2017-12-21 17:02:22 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2018-02-19 15:29:37 +0100 |
commit | 60902e9d0818422fda74840d83cfe5604782a7d1 (patch) | |
tree | e7149b9be4da43081f1653c6781062e6db5348be /lib | |
parent | 64cd4f8081f05f7a7e14bb14545ab91e6d555a2e (diff) | |
download | gnutls-60902e9d0818422fda74840d83cfe5604782a7d1.tar.gz |
range: make length hiding always usable under TLS 1.3
This patch reintroduce the extended record padding mode removed in
commit 7df219f0. Under TLS 1.3, the padding mode can be implemented
in the record protocol.
Signed-off-by: Daiki Ueno <dueno@redhat.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/range.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/lib/range.c b/lib/range.c index c2e5da3960..e88f2a6a0b 100644 --- a/lib/range.c +++ b/lib/range.c @@ -50,6 +50,10 @@ _gnutls_range_max_lh_pad(gnutls_session_t session, ssize_t data_length, ssize_t this_pad; ssize_t block_size; ssize_t tag_size, overflow; + const version_entry_st *vers = get_version(session); + + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); ret = _gnutls_epoch_get(session, EPOCH_WRITE_CURRENT, @@ -58,11 +62,16 @@ _gnutls_range_max_lh_pad(gnutls_session_t session, ssize_t data_length, return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); } - if (record_params->write.is_aead) /* not yet ready */ + if (!vers->tls13_sem && record_params->write.is_aead) /* not yet ready */ return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); - max_pad = MAX_PAD_SIZE; - fixed_pad = 1; + if (vers->tls13_sem) { + max_pad = max_user_send_size(session, record_params); + fixed_pad = 2; + } else { + max_pad = MAX_PAD_SIZE; + fixed_pad = 1; + } this_pad = MIN(max_pad, max_frag - data_length); @@ -108,9 +117,16 @@ int gnutls_record_can_use_length_hiding(gnutls_session_t session) { int ret; record_parameters_st *record_params; + const version_entry_st *vers = get_version(session); + + if (unlikely(vers == NULL)) + return gnutls_assert_val(GNUTLS_E_INTERNAL_ERROR); + + if (vers->tls13_sem) + return 1; #ifdef ENABLE_SSL3 - if (get_num_version(session) == GNUTLS_SSL3) + if (vers->id == GNUTLS_SSL3) return 0; #endif |