Revert "random: Change testing random generator"
This reverts commit d6881de3b3
.
Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
This commit is contained in:
parent
d6881de3b3
commit
11aa8454f0
8 changed files with 21 additions and 44 deletions
|
@ -47,9 +47,9 @@ An override of the default value can be specified in the SOC or board
|
|||
|
||||
The random number generators available include:
|
||||
|
||||
:kconfig:option:`CONFIG_RANDOM_TEST_GENERATOR`
|
||||
This number generator is not random and used for testing only.
|
||||
This generator does not depend on entropy.
|
||||
:kconfig:option:`CONFIG_TIMER_RANDOM_GENERATOR`
|
||||
enables number generator based on system timer clock. This number
|
||||
generator is not random and used for testing only.
|
||||
|
||||
:kconfig:option:`CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR`
|
||||
enables a random number generator that uses the enabled hardware
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
CONFIG_TEST_RANDOM_GENERATOR=y
|
||||
CONFIG_RANDOM_TEST_GENERATOR=y
|
||||
CONFIG_TIMER_RANDOM_GENERATOR=y
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
if (CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR OR
|
||||
CONFIG_RANDOM_TEST_GENERATOR OR
|
||||
CONFIG_TIMER_RANDOM_GENERATOR OR
|
||||
CONFIG_XOSHIRO_RANDOM_GENERATOR)
|
||||
zephyr_library()
|
||||
zephyr_library_sources_ifdef(CONFIG_USERSPACE rand32_handlers.c)
|
||||
|
@ -17,10 +17,10 @@ endif()
|
|||
# XOROSHIRO builds the XOSHIRO implementation because a Kconfig choice cannot
|
||||
# select another choice as a means of deprecating the symbol. Swapping out the
|
||||
# implementation lets out-of-tree users still build until the symbol is removed.
|
||||
zephyr_library_sources_ifdef(CONFIG_TIMER_RANDOM_GENERATOR rand32_timer.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_XOROSHIRO_RANDOM_GENERATOR rand32_xoshiro128.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_XOSHIRO_RANDOM_GENERATOR rand32_xoshiro128.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_CTR_DRBG_CSPRNG_GENERATOR rand32_ctr_drbg.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_RANDOM_TEST_GENERATOR rand32_test.c)
|
||||
|
||||
if (CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR OR CONFIG_HARDWARE_DEVICE_CS_GENERATOR)
|
||||
zephyr_library_sources(rand32_entropy_device.c)
|
||||
|
|
|
@ -40,12 +40,13 @@ choice RNG_GENERATOR_CHOICE
|
|||
to support random request then select that. Otherwise, select the
|
||||
XOSHIRO algorithm
|
||||
|
||||
config RANDOM_TEST_GENERATOR
|
||||
config TIMER_RANDOM_GENERATOR
|
||||
bool "System timer clock based number generator"
|
||||
depends on TEST_RANDOM_GENERATOR
|
||||
help
|
||||
This number generator is not random and used only for testing.
|
||||
Does not rely on an entropy driver, so can be used without entropy.
|
||||
This options enables number generator based on system timer
|
||||
clock. This number generator is not random and used for
|
||||
testing only.
|
||||
|
||||
config ENTROPY_DEVICE_RANDOM_GENERATOR
|
||||
bool "Use entropy driver to generate random numbers"
|
||||
|
|
|
@ -14,44 +14,21 @@
|
|||
* provide a random number generator.
|
||||
*/
|
||||
|
||||
#include <zephyr/init.h>
|
||||
#include <zephyr/random/rand32.h>
|
||||
#include <zephyr/drivers/timer/system_timer.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/sys/atomic.h>
|
||||
#include <string.h>
|
||||
#include <zephyr/device.h>
|
||||
|
||||
#if defined(__GNUC__)
|
||||
|
||||
/* seed the state with pseudo-random data */
|
||||
static uint32_t state[4] = {0, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278};
|
||||
/*
|
||||
* Symbols used to ensure a rapid series of calls to random number generator
|
||||
* return different values.
|
||||
*/
|
||||
static atomic_val_t _rand32_counter;
|
||||
|
||||
static struct k_spinlock rand_state_lock;
|
||||
|
||||
static inline uint32_t rotl(const uint32_t x, int k)
|
||||
{
|
||||
return (x << k) | (x >> (32 - k));
|
||||
}
|
||||
|
||||
static uint32_t xoshiro128_next(void)
|
||||
{
|
||||
const uint32_t result = rotl(state[0] + state[3], 7) + state[0];
|
||||
const uint32_t t = state[1] << 9;
|
||||
|
||||
k_spinlock_key_t lock_key = k_spin_lock(&rand_state_lock);
|
||||
|
||||
state[2] ^= state[0];
|
||||
state[3] ^= state[1];
|
||||
state[1] ^= state[2];
|
||||
state[0] ^= state[3];
|
||||
|
||||
state[2] ^= t;
|
||||
state[3] = rotl(state[3], 11);
|
||||
|
||||
k_spin_unlock(&rand_state_lock, lock_key);
|
||||
|
||||
return result;
|
||||
}
|
||||
#define _RAND32_INC 1000000003U
|
||||
|
||||
/**
|
||||
* @brief Get a 32 bit random number
|
||||
|
@ -64,7 +41,7 @@ static uint32_t xoshiro128_next(void)
|
|||
*/
|
||||
uint32_t z_impl_sys_rand32_get(void)
|
||||
{
|
||||
return xoshiro128_next();
|
||||
return k_cycle_get_32() + atomic_add(&_rand32_counter, _RAND32_INC);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -91,5 +68,4 @@ void z_impl_sys_rand_get(void *dst, size_t outlen)
|
|||
outlen -= blocksize;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* __GNUC__ */
|
|
@ -3,4 +3,4 @@ CONFIG_ZTEST_NEW_API=y
|
|||
CONFIG_LOG=y
|
||||
CONFIG_ENTROPY_GENERATOR=y
|
||||
CONFIG_TEST_RANDOM_GENERATOR=y
|
||||
CONFIG_RANDOM_TEST_GENERATOR=y
|
||||
CONFIG_TIMER_RANDOM_GENERATOR=y
|
||||
|
|
|
@ -2,7 +2,7 @@ CONFIG_NETWORKING=y
|
|||
CONFIG_NET_TCP=y
|
||||
CONFIG_ENTROPY_GENERATOR=y
|
||||
CONFIG_TEST_RANDOM_GENERATOR=y
|
||||
CONFIG_RANDOM_TEST_GENERATOR=y
|
||||
CONFIG_TIMER_RANDOM_GENERATOR=y
|
||||
|
||||
CONFIG_NET_ARP=y
|
||||
CONFIG_NET_L2_ETHERNET=y
|
||||
|
|
|
@ -4,7 +4,7 @@ CONFIG_ZTEST_ASSERT_VERBOSE=0
|
|||
|
||||
CONFIG_ENTROPY_GENERATOR=y
|
||||
CONFIG_TEST_RANDOM_GENERATOR=y
|
||||
CONFIG_RANDOM_TEST_GENERATOR=y
|
||||
CONFIG_TIMER_RANDOM_GENERATOR=y
|
||||
|
||||
CONFIG_ZTEST_SHUFFLE=y
|
||||
CONFIG_ZTEST_SHUFFLE_SUITE_REPEAT_COUNT=2
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue