mirror of
https://github.com/jedisct1/libsodium.git
synced 2026-08-27 04:07:12 +09:00
fill_memory_blocks() cannot possibly fail
This commit is contained in:
@@ -155,9 +155,15 @@ static void
|
||||
clear_memory(argon2_instance_t *instance, int clear)
|
||||
{
|
||||
/* LCOV_EXCL_START */
|
||||
if (instance->region != NULL && clear) {
|
||||
sodium_memzero(instance->region->memory,
|
||||
sizeof(block) * instance->memory_blocks);
|
||||
if (clear) {
|
||||
if (instance->region != NULL) {
|
||||
sodium_memzero(instance->region->memory,
|
||||
sizeof(block) * instance->memory_blocks);
|
||||
}
|
||||
if (instance->pseudo_rands != NULL) {
|
||||
sodium_memzero(instance->region->memory,
|
||||
sizeof(uint64_t) * instance->segment_length);
|
||||
}
|
||||
}
|
||||
/* LCOV_EXCL_STOP */
|
||||
}
|
||||
@@ -301,14 +307,14 @@ index_alpha(const argon2_instance_t *instance,
|
||||
return absolute_position;
|
||||
}
|
||||
|
||||
int
|
||||
void
|
||||
fill_memory_blocks(argon2_instance_t *instance)
|
||||
{
|
||||
int result;
|
||||
uint32_t r, s;
|
||||
|
||||
if (instance == NULL || instance->lanes == 0) {
|
||||
return ARGON2_OK; /* LCOV_EXCL_LINE */
|
||||
return; /* LCOV_EXCL_LINE */
|
||||
}
|
||||
|
||||
for (r = 0; r < instance->passes; ++r) {
|
||||
@@ -322,14 +328,10 @@ fill_memory_blocks(argon2_instance_t *instance)
|
||||
position.lane = l;
|
||||
position.slice = (uint8_t) s;
|
||||
position.index = 0;
|
||||
result = fill_segment(instance, position);
|
||||
if (ARGON2_OK != result) {
|
||||
return result; /* LCOV_EXCL_LINE */
|
||||
}
|
||||
fill_segment(instance, position);
|
||||
}
|
||||
}
|
||||
}
|
||||
return ARGON2_OK;
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -188,15 +188,15 @@ void finalize(const argon2_context *context, argon2_instance_t *instance);
|
||||
* @param position Current position
|
||||
* @pre all block pointers must be valid
|
||||
*/
|
||||
typedef int (*fill_segment_fn)(const argon2_instance_t *instance,
|
||||
argon2_position_t position);
|
||||
typedef void (*fill_segment_fn)(const argon2_instance_t *instance,
|
||||
argon2_position_t position);
|
||||
int argon2_pick_best_implementation(void);
|
||||
int fill_segment_avx2(const argon2_instance_t *instance,
|
||||
argon2_position_t position);
|
||||
int fill_segment_ssse3(const argon2_instance_t *instance,
|
||||
void fill_segment_avx2(const argon2_instance_t *instance,
|
||||
argon2_position_t position);
|
||||
int fill_segment_ref(const argon2_instance_t *instance,
|
||||
argon2_position_t position);
|
||||
void fill_segment_ssse3(const argon2_instance_t *instance,
|
||||
argon2_position_t position);
|
||||
void fill_segment_ref(const argon2_instance_t *instance,
|
||||
argon2_position_t position);
|
||||
|
||||
/*
|
||||
* Function that fills the entire memory t_cost times based on the first two
|
||||
@@ -204,6 +204,6 @@ int fill_segment_ref(const argon2_instance_t *instance,
|
||||
* @param instance Pointer to the current instance
|
||||
* @return Zero if successful, -1 if memory failed to allocate
|
||||
*/
|
||||
int fill_memory_blocks(argon2_instance_t *instance);
|
||||
void fill_memory_blocks(argon2_instance_t *instance);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -140,7 +140,7 @@ generate_addresses(const argon2_instance_t *instance,
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
void
|
||||
fill_segment_avx2(const argon2_instance_t *instance,
|
||||
argon2_position_t position)
|
||||
{
|
||||
@@ -155,7 +155,7 @@ fill_segment_avx2(const argon2_instance_t *instance,
|
||||
uint64_t *pseudo_rands = NULL;
|
||||
|
||||
if (instance == NULL) {
|
||||
return ARGON2_OK;
|
||||
return;
|
||||
}
|
||||
|
||||
if (instance->type == Argon2_id &&
|
||||
@@ -235,7 +235,5 @@ fill_segment_avx2(const argon2_instance_t *instance,
|
||||
(uint8_t *) curr_block->v);
|
||||
}
|
||||
}
|
||||
|
||||
return ARGON2_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -140,7 +140,7 @@ generate_addresses(const argon2_instance_t *instance,
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
void
|
||||
fill_segment_ref(const argon2_instance_t *instance, argon2_position_t position)
|
||||
{
|
||||
block *ref_block = NULL, *curr_block = NULL;
|
||||
@@ -153,7 +153,7 @@ fill_segment_ref(const argon2_instance_t *instance, argon2_position_t position)
|
||||
int data_independent_addressing = 1;
|
||||
|
||||
if (instance == NULL) {
|
||||
return ARGON2_OK;
|
||||
return;
|
||||
}
|
||||
|
||||
if (instance->type == Argon2_id &&
|
||||
@@ -230,6 +230,4 @@ fill_segment_ref(const argon2_instance_t *instance, argon2_position_t position)
|
||||
curr_block);
|
||||
}
|
||||
}
|
||||
|
||||
return ARGON2_OK;
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ generate_addresses(const argon2_instance_t *instance,
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
void
|
||||
fill_segment_ssse3(const argon2_instance_t *instance,
|
||||
argon2_position_t position)
|
||||
{
|
||||
@@ -154,7 +154,7 @@ fill_segment_ssse3(const argon2_instance_t *instance,
|
||||
uint64_t *pseudo_rands = NULL;
|
||||
|
||||
if (instance == NULL) {
|
||||
return ARGON2_OK;
|
||||
return;
|
||||
}
|
||||
|
||||
if (instance->type == Argon2_id &&
|
||||
@@ -234,7 +234,5 @@ fill_segment_ssse3(const argon2_instance_t *instance,
|
||||
(uint8_t *) curr_block->v);
|
||||
}
|
||||
}
|
||||
|
||||
return ARGON2_OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -70,12 +70,7 @@ argon2_ctx(argon2_context *context, argon2_type type)
|
||||
}
|
||||
|
||||
/* 4. Filling memory */
|
||||
result = fill_memory_blocks(&instance);
|
||||
|
||||
if (ARGON2_OK != result) {
|
||||
free_instance(&instance, context->flags);
|
||||
return result;
|
||||
}
|
||||
fill_memory_blocks(&instance);
|
||||
|
||||
/* 5. Finalization */
|
||||
finalize(context, &instance);
|
||||
|
||||
Reference in New Issue
Block a user