diff --git a/ChangeLog b/ChangeLog index 776597a639ef93319509a1c0040b73dae7e707fe..145376c051508bc96d8037a1200b5076c86879f1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-09-06 Niels Möller <nisse@lysator.liu.se> + + * hkdf.c (hkdf_expand): Eliminate a (signed) ssize_t variable, use + break rather than return at loop termination. + 2017-09-06 Niels Möller <nisse@lysator.liu.se> HKDF implementation, contributed by Nikos Mavrogiannopoulos. diff --git a/hkdf.c b/hkdf.c index 73b106655de7374dec4f9ad5265785802b9c0d60..c55c42fd4a29d2c3b6525af30972d767611ca2e7 100644 --- a/hkdf.c +++ b/hkdf.c @@ -63,23 +63,20 @@ hkdf_expand(void *mac_ctx, size_t length, uint8_t *dst) { uint8_t i = 1; - ssize_t left = length; - if (!left) + if (!length) return; - for (;; dst += digest_size, left -= digest_size, i++) { - update(mac_ctx, info_size, info); - update(mac_ctx, 1, &i); - if (left <= digest_size) { - if (left > 0) - digest(mac_ctx, left, dst); - return; - } + for (;; dst += digest_size, length -= digest_size, i++) + { + update(mac_ctx, info_size, info); + update(mac_ctx, 1, &i); + if (length <= digest_size) + break; - digest(mac_ctx, digest_size, dst); - update(mac_ctx, digest_size, dst); - } + digest(mac_ctx, digest_size, dst); + update(mac_ctx, digest_size, dst); + } - return; + digest(mac_ctx, length, dst); }