Small tweak to the key derivation function.

This commit is contained in:
LoRd_MuldeR 2021-03-17 01:14:25 +01:00
parent fe1398fdcb
commit 111c714c6a
Signed by: mulder
GPG Key ID: 2B5913365F57E03F

View File

@ -31,7 +31,8 @@ const uint16_t SLUNKCRYPT_VERSION_PATCH = MY_VERSION_PATCH;
const char* const SLUNKCRYPT_BUILD = __DATE__ " " __TIME__; const char* const SLUNKCRYPT_BUILD = __DATE__ " " __TIME__;
/* Const */ /* Const */
#define MAGIC_PRIME 0x00000100000001B3ull #define HASH_MAGIC_PRIME 0x00000100000001B3ull
#define HASH_OFFSET_BASE 0xCBF29CE484222325ull
// ========================================================================== // ==========================================================================
// Data structures // Data structures
@ -112,7 +113,7 @@ static FORCE_INLINE void hash_update_str(uint64_t* const hash, const uint8_t* co
size_t i; size_t i;
for (i = 0U; i < data_len; ++i) for (i = 0U; i < data_len; ++i)
{ {
*hash = ((*hash) ^ data[i]) * MAGIC_PRIME; *hash = ((*hash) ^ data[i]) * HASH_MAGIC_PRIME;
} }
} }
@ -121,7 +122,7 @@ static FORCE_INLINE void hash_update_u64(uint64_t* const hash, const uint64_t va
size_t i; size_t i;
for (i = 0U; i < sizeof(uint64_t); ++i) for (i = 0U; i < sizeof(uint64_t); ++i)
{ {
*hash = ((*hash) ^ byte_u64(value, i)) * MAGIC_PRIME; *hash = ((*hash) ^ byte_u64(value, i)) * HASH_MAGIC_PRIME;
} }
} }
@ -130,15 +131,23 @@ static FORCE_INLINE void hash_update_u16(uint64_t* const hash, const uint16_t va
size_t i; size_t i;
for (i = 0U; i < sizeof(uint16_t); ++i) for (i = 0U; i < sizeof(uint16_t); ++i)
{ {
*hash = ((*hash) ^ byte_u16(value, i)) * MAGIC_PRIME; *hash = ((*hash) ^ byte_u16(value, i)) * HASH_MAGIC_PRIME;
} }
} }
static uint64_t hash_code(const uint64_t salt, const uint16_t pepper, const uint8_t* const data, const size_t data_len) static uint64_t hash_code_init(const uint64_t salt, const uint16_t i, const uint8_t* const data, const size_t data_len)
{ {
uint64_t hash = 0xCBF29CE484222325ull; uint64_t hash = HASH_OFFSET_BASE;
hash_update_u64(&hash, salt);
hash_update_u16(&hash, i);
hash_update_str(&hash, data, data_len);
return hash;
}
static uint64_t hash_code_next(const uint64_t salt, const uint8_t* const data, const size_t data_len)
{
uint64_t hash = HASH_OFFSET_BASE;
hash_update_u64(&hash, salt); hash_update_u64(&hash, salt);
hash_update_u16(&hash, pepper);
hash_update_str(&hash, data, data_len); hash_update_str(&hash, data, data_len);
return hash; return hash;
} }
@ -147,14 +156,15 @@ static uint64_t hash_code(const uint64_t salt, const uint16_t pepper, const uint
// Key derivation // Key derivation
// ========================================================================== // ==========================================================================
static FORCE_INLINE uint64_t keygen_loop(uint64_t value, const uint16_t pepper, const uint8_t* const passwd, const size_t passwd_len) static FORCE_INLINE uint64_t keygen_loop(uint64_t salt, const uint16_t pepper, const uint8_t* const passwd, const size_t passwd_len)
{ {
uint64_t result = salt = hash_code_init(salt, pepper, passwd, passwd_len);
size_t i; size_t i;
for (i = 0U; i < 99971U; ++i) for (i = 1U; i < 99971U; ++i)
{ {
value ^= hash_code(value, pepper, passwd, passwd_len); result ^= salt = hash_code_next(salt, passwd, passwd_len);
} }
return value; return result;
} }
static void generate_key(key_data_t *const key, const uint64_t salt, const uint16_t pepper, const uint8_t* const passwd, const size_t passwd_len) static void generate_key(key_data_t *const key, const uint64_t salt, const uint16_t pepper, const uint8_t* const passwd, const size_t passwd_len)