diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2013-04-06 12:09:33 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2013-04-06 12:23:48 +0200 |
commit | eb5299479d7784c78b704b3eead022af41c30353 (patch) | |
tree | 507bcbeb9a4f1fe2f86a7f7a5206c5c285fccb58 | |
parent | 6c72a173349217b72f20fa98315c879b2b58dee6 (diff) | |
download | gnutls-eb5299479d7784c78b704b3eead022af41c30353.tar.gz |
updates in range handling code.
-rw-r--r-- | lib/gnutls_range.c | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/lib/gnutls_range.c b/lib/gnutls_range.c index c710230211..dd2237dd66 100644 --- a/lib/gnutls_range.c +++ b/lib/gnutls_range.c @@ -47,6 +47,9 @@ _gnutls_range_max_lh_pad (gnutls_session_t session, ssize_t data_length, ssize_t max_pad; unsigned int fixed_pad; record_parameters_st *record_params; + ssize_t this_pad; + ssize_t block_size; + ssize_t tag_size, overflow; ret = _gnutls_epoch_get (session, EPOCH_WRITE_CURRENT, &record_params); if (ret < 0) @@ -65,13 +68,12 @@ _gnutls_range_max_lh_pad (gnutls_session_t session, ssize_t data_length, fixed_pad = 1; } - ssize_t this_pad = MIN (max_pad, max_frag - data_length); + this_pad = MIN (max_pad, max_frag - data_length); - ssize_t block_size = + block_size = gnutls_cipher_get_block_size (record_params->cipher_algorithm); - ssize_t tag_size = + tag_size = _gnutls_auth_cipher_tag_len (&record_params->write.cipher_state); - ssize_t overflow; switch (_gnutls_cipher_is_block (record_params->cipher_algorithm)) { case CIPHER_STREAM: @@ -97,9 +99,6 @@ _gnutls_range_max_lh_pad (gnutls_session_t session, ssize_t data_length, * gnutls_record_can_use_length_hiding: * @session: is a #gnutls_session_t structure. * - * Returns true (1) if the current session supports length-hiding - * padding, false (0) if the current session does not. Returns - * a negative value in case of error. * If the session supports length-hiding padding, you can * invoke gnutls_range_send_message() to send a message whose * length is hidden in the given range. If the session does not @@ -107,6 +106,9 @@ _gnutls_range_max_lh_pad (gnutls_session_t session, ssize_t data_length, * gnutls_record_send() function, or gnutls_range_send_message() * making sure that the range is the same as the length of the * message you are trying to send. + * + * Returns: true (1) if the current session supports length-hiding + * padding, false (0) if the current session does not. **/ int gnutls_record_can_use_length_hiding (gnutls_session_t session) @@ -114,26 +116,25 @@ gnutls_record_can_use_length_hiding (gnutls_session_t session) int ret; record_parameters_st *record_params; - ret = _gnutls_epoch_get (session, EPOCH_WRITE_CURRENT, &record_params); - if (ret < 0) - { - return gnutls_assert_val (GNUTLS_E_INVALID_REQUEST); - } - if (session->security_parameters.new_record_padding != 0) return 1; if (session->security_parameters.version == GNUTLS_SSL3) return 0; - switch (_gnutls_cipher_is_block (record_params->cipher_algorithm)) + ret = _gnutls_epoch_get (session, EPOCH_WRITE_CURRENT, &record_params); + if (ret < 0) { - case CIPHER_STREAM: return 0; + } + + switch (_gnutls_cipher_is_block (record_params->cipher_algorithm)) + { case CIPHER_BLOCK: return 1; + case CIPHER_STREAM: default: - return gnutls_assert_val (GNUTLS_E_INTERNAL_ERROR); + return 0; } } @@ -239,14 +240,15 @@ gnutls_record_send_range (gnutls_session_t session, const void *data, /* sanity check on range and data size */ if (range->low > range->high || - data_size < range->low || data_size > range->high) + data_size < range->low || + data_size > range->high) { return gnutls_assert_val (GNUTLS_E_INVALID_REQUEST); } ret = gnutls_record_can_use_length_hiding (session); - if (ret < 0) - return ret; /* already gnutls_assert_val'd */ + if (ret == 0) + return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST); if (ret == 0 && range->low != range->high) /* Cannot use LH, but a range was given */ @@ -294,7 +296,7 @@ gnutls_record_send_range (gnutls_session_t session, const void *data, if (ret < 0) { - return ret; /* already gnutls_assert_val'd */ + return gnutls_assert_val(ret); } if (ret != (ssize_t) next_fragment_length) { |