diff --git a/libslunkcrypt/src/slunkcrypt.c b/libslunkcrypt/src/slunkcrypt.c index 29f2d0a..bf041a5 100644 --- a/libslunkcrypt/src/slunkcrypt.c +++ b/libslunkcrypt/src/slunkcrypt.c @@ -151,22 +151,23 @@ static int initialize_state(crypt_data_t *const data, const size_t thread_count, { uint8_t temp[256U][256U]; size_t r, i; + rand_state_t *const rand_state = &data->thread_data[0].random; const int reverse_mode = BOOLIFY(mode); /* initialize state */ slunkcrypt_bzero(data, sizeof(crypt_data_t)); /* initialize counter */ - random_seed(&data->thread_data[0].random, nonce, legacy ? ((uint16_t)(-1)) : INITIALIZER_MIN, passwd, passwd_len, legacy); - data->thread_data[0].counter = random_next(&data->thread_data[0].random); + random_seed(rand_state, nonce, legacy ? ((uint16_t)(-1)) : INITIALIZER_MIN, passwd, passwd_len, legacy); + data->thread_data[0].counter = random_next(rand_state); /* set up the wheel permutations */ for (r = 0U; r < 256U; ++r) { - random_seed(&data->thread_data[0].random, nonce, legacy ? ((uint16_t)r) : INITIALIZER[r], passwd, passwd_len, legacy); + random_seed(rand_state, nonce, legacy ? ((uint16_t)r) : INITIALIZER[r], passwd, passwd_len, legacy); for (i = 0U; i < 256U; ++i) { - const size_t j = random_next(&data->thread_data[0].random) % (i + 1U); + const size_t j = random_next(rand_state) % (i + 1U); if (j != i) { data->wheel[r][i] = data->wheel[r][j]; @@ -195,25 +196,24 @@ static int initialize_state(crypt_data_t *const data, const size_t thread_count, } /* initialize thread state */ - data->thread_data[0].reverse_mode = reverse_mode; - data->thread_data[0].wheel = (const uint8_t(*)[256]) data->wheel; - data->thread_data[0].index_off = 0U; - random_seed(&data->thread_data[0].random, nonce, legacy ? 256U : INITIALIZER_MAX, passwd, passwd_len, legacy); - for (i = 1U; i < thread_count; ++i) + random_seed(rand_state, nonce, legacy ? 256U : INITIALIZER_MAX, passwd, passwd_len, legacy); + for (i = 0U; i < thread_count; ++i) { - data->thread_data[i].reverse_mode = data->thread_data[0].reverse_mode; - data->thread_data[i].wheel = data->thread_data[0].wheel; - data->thread_data[i].counter = data->thread_data[0].counter + ((uint32_t)i); - data->thread_data[i].index_off = data->thread_data[i - 1U].index_off + 1U; - memcpy(&data->thread_data[i].random, &data->thread_data[0].random, sizeof(rand_state_t)); - random_skip(&data->thread_data[i].random, i * 63U); + data->thread_data[i].reverse_mode = reverse_mode; + data->thread_data[i].wheel = (const uint8_t(*)[256]) data->wheel; + data->thread_data[i].index_off = i; + if (i > 0U) + { + data->thread_data[i].counter = data->thread_data[0].counter + ((uint32_t)i); + memcpy(&data->thread_data[i].random, &data->thread_data[0].random, sizeof(rand_state_t)); + random_skip(&data->thread_data[i].random, i * 63U); + } CHECK_ABORTED(); } /* dump the final configuration */ if (debug) { - const rand_state_t *const rand_state = &data->thread_data[0].random; slunkcrypt_debug_print("cntr = %08X", data->thread_data[0].counter); slunkcrypt_debug_print("drbg = %08X %08X %08X %08X %08X %08X", rand_state->d, rand_state->v, rand_state->w, rand_state->x, rand_state->y, rand_state->z); for (r = 0U; r < 256U; ++r)