Small tweak to the key derivation function.
This commit is contained in:
parent
fe1398fdcb
commit
111c714c6a
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user