diff options
Diffstat (limited to 'libar2_hash_buf_size.c')
-rw-r--r-- | libar2_hash_buf_size.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/libar2_hash_buf_size.c b/libar2_hash_buf_size.c index 109969f..3010a8a 100644 --- a/libar2_hash_buf_size.c +++ b/libar2_hash_buf_size.c @@ -3,13 +3,14 @@ size_t -libar2_hash_buf_size(struct libar2_argon2_parameters *params) +libar2_hash_buf_size(const struct libar2_argon2_parameters *params) { if (params->hashlen <= 64) return params->hashlen; - if (params->hashlen > SIZE_MAX / 128 * 64 - 31) { + if (params->hashlen > SIZE_MAX - 31 || + ((params->hashlen + 31) | 31) == SIZE_MAX) { errno = EOVERFLOW; return 0; } - return (params->hashlen + 31) / 64 * 128; + return ((params->hashlen + 31) | 31) + 1; } |