From fb739acd7b0423f42886317ac84bb67db5b96178 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Fri, 28 Jul 2017 18:07:45 +0200 Subject: [PATCH] fill_memory_blocks() cannot possibly fail --- .../crypto_pwhash/argon2/argon2-core.c | 22 ++++++++++--------- .../crypto_pwhash/argon2/argon2-core.h | 16 +++++++------- .../argon2/argon2-fill-block-avx2.c | 6 ++--- .../argon2/argon2-fill-block-ref.c | 6 ++--- .../argon2/argon2-fill-block-ssse3.c | 6 ++--- src/libsodium/crypto_pwhash/argon2/argon2.c | 7 +----- 6 files changed, 27 insertions(+), 36 deletions(-) diff --git a/src/libsodium/crypto_pwhash/argon2/argon2-core.c b/src/libsodium/crypto_pwhash/argon2/argon2-core.c index 4140e087..af7cf482 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2-core.c +++ b/src/libsodium/crypto_pwhash/argon2/argon2-core.c @@ -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 diff --git a/src/libsodium/crypto_pwhash/argon2/argon2-core.h b/src/libsodium/crypto_pwhash/argon2/argon2-core.h index 454296ea..c14d8465 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2-core.h +++ b/src/libsodium/crypto_pwhash/argon2/argon2-core.h @@ -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 diff --git a/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx2.c b/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx2.c index 84dabf5b..e10a5073 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx2.c +++ b/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx2.c @@ -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 diff --git a/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c b/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c index bc1a7795..75e8d8f5 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c +++ b/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c @@ -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; } diff --git a/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.c b/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.c index 6b3a1a06..778302e5 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.c +++ b/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.c @@ -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 diff --git a/src/libsodium/crypto_pwhash/argon2/argon2.c b/src/libsodium/crypto_pwhash/argon2/argon2.c index c9e48e75..3eb4b97e 100644 --- a/src/libsodium/crypto_pwhash/argon2/argon2.c +++ b/src/libsodium/crypto_pwhash/argon2/argon2.c @@ -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);