diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2013-01-29 21:53:57 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2013-01-29 21:53:57 +0100 |
commit | f0b33487f574f04c18d770175c7c0f9396326138 (patch) | |
tree | cab4cf4c0eaf796bf78f7e97b0522baf01316a3d | |
parent | 3b222117c04e59aef0617c3b7ec3c220ba556c70 (diff) | |
download | gnutls-f0b33487f574f04c18d770175c7c0f9396326138.tar.gz |
small fixes
-rw-r--r-- | lib/gnutls_range.c | 43 | ||||
-rw-r--r-- | lib/includes/gnutls/gnutls.h.in | 2 |
2 files changed, 24 insertions, 21 deletions
diff --git a/lib/gnutls_range.c b/lib/gnutls_range.c index 536f077dce..422fc996d9 100644 --- a/lib/gnutls_range.c +++ b/lib/gnutls_range.c @@ -141,23 +141,25 @@ gnutls_record_can_use_length_hiding (gnutls_session_t session) * gnutls_range_split: * @session: is a #gnutls_session_t structure * @orig: is the original range provided by the user - * @small_range: is the returned range that can be conveyed in a TLS record - * @rem_range: is the returned remaining range + * @next: is the returned range that can be conveyed in a TLS record + * @remainder: is the returned remaining range * - * Use this function to split an arbitrary range into a smaller range - * that can be conveyed into a single TLS record fragment, and - * a remaining range, on which this function can be invoked again. - * When the returned #rem_range is (0,0) the splitting process can terminate. + * This function should be used when it is required to hide the length + * of very long data that cannot be directly provided to gnutls_record_send_range(). + * In that case this function should be called with the desired length + * hiding range in @orig. The returned @next value should then be used in + * the next call to gnutls_record_send_range() with the partial data. + * That process should be repeated until @remainder is (0,0). * * Returns: 0 in case splitting succeeds, non zero in case of error. - * Note that #orig is not changed, while the values of #small_range - * and #rem_range are modified to store the resulting values. + * Note that @orig is not changed, while the values of @next + * and @remainder are modified to store the resulting values. */ -ssize_t +int gnutls_range_split (gnutls_session_t session, const gnutls_range_st *orig, - gnutls_range_st * small_range, - gnutls_range_st * rem_range) + gnutls_range_st * next, + gnutls_range_st * remainder) { int ret; ssize_t max_frag = MAX_USER_SEND_SIZE (session); @@ -168,31 +170,32 @@ gnutls_range_split (gnutls_session_t session, { int length = MIN (orig_high, max_frag); int rem = orig_high - length; - _gnutls_set_range (small_range, length, length); - _gnutls_set_range (rem_range, rem, rem); + _gnutls_set_range (next, length, length); + _gnutls_set_range (remainder, rem, rem); + return 0; } else { if (orig_low >= max_frag) { - _gnutls_set_range (small_range, max_frag, max_frag); - _gnutls_set_range (rem_range, orig_low - max_frag, + _gnutls_set_range (next, max_frag, max_frag); + _gnutls_set_range (remainder, orig_low - max_frag, orig_high - max_frag); } else { ret = _gnutls_range_max_lh_pad (session, orig_low, max_frag); if (ret < 0) - { - return ret; /* already gnutls_assert_val'd */ - } + return gnutls_assert_val(ret); + ssize_t this_pad = MIN (ret, orig_high - orig_low); - _gnutls_set_range (small_range, orig_low, orig_low + this_pad); - _gnutls_set_range (rem_range, 0, + _gnutls_set_range (next, orig_low, orig_low + this_pad); + _gnutls_set_range (remainder, 0, orig_high - (orig_low + this_pad)); } + return 0; } } diff --git a/lib/includes/gnutls/gnutls.h.in b/lib/includes/gnutls/gnutls.h.in index 38182880e1..e9670401d6 100644 --- a/lib/includes/gnutls/gnutls.h.in +++ b/lib/includes/gnutls/gnutls.h.in @@ -901,7 +901,7 @@ gnutls_ecc_curve_t gnutls_ecc_curve_get(gnutls_session_t session); size_t high; } gnutls_range_st; - ssize_t gnutls_range_split (gnutls_session_t session, + int gnutls_range_split (gnutls_session_t session, const gnutls_range_st *orig, gnutls_range_st * small_range, gnutls_range_st * rem_range); |