From 985ad65bfb1563ca69e0bc0248e15da4f5cf575f Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 9 Nov 2024 13:24:26 +0100 Subject: [PATCH] Remove a non-constant modulo operation in argon2 Adapted from a change originally written by @Sc00bz --- src/libsodium/crypto_pwhash/argon2/argon2-core.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libsodium/crypto_pwhash/argon2/argon2-core.h b/src/libsodium/crypto_pwhash/argon2/argon2-core.h index 22ec39d1..a4b3eafb 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2-core.h +++ b/src/libsodium/crypto_pwhash/argon2/argon2-core.h @@ -152,8 +152,8 @@ static uint32_t index_alpha(const argon2_instance_t *instance, * Other lanes : (SYNC_POINTS - 1) last segments */ uint32_t reference_area_size; - uint64_t relative_position; - uint32_t start_position, absolute_position; + uint64_t relative_position, absolute_position; + uint32_t start_position; if (position->pass == 0) { /* First pass */ @@ -203,9 +203,9 @@ static uint32_t index_alpha(const argon2_instance_t *instance, } /* 1.2.6. Computing absolute position */ - absolute_position = (start_position + relative_position) % - instance->lane_length; /* absolute position */ - return absolute_position; + absolute_position = start_position + relative_position - instance->lane_length; + absolute_position += instance->lane_length & (absolute_position >> 32); + return (uint32_t) absolute_position; } /*