Revert "random: Change testing random generator"

This reverts commit d6881de3b3.

Signed-off-by: Henrik Brix Andersen <hebad@vestas.com>
This commit is contained in:
Henrik Brix Andersen 2023-01-09 10:54:44 +01:00 committed by Stephanos Ioannidis
commit 11aa8454f0
8 changed files with 21 additions and 44 deletions

View file

@ -47,9 +47,9 @@ An override of the default value can be specified in the SOC or board
The random number generators available include: The random number generators available include:
:kconfig:option:`CONFIG_RANDOM_TEST_GENERATOR` :kconfig:option:`CONFIG_TIMER_RANDOM_GENERATOR`
This number generator is not random and used for testing only. enables number generator based on system timer clock. This number
This generator does not depend on entropy. generator is not random and used for testing only.
:kconfig:option:`CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR` :kconfig:option:`CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR`
enables a random number generator that uses the enabled hardware enables a random number generator that uses the enabled hardware

View file

@ -1,2 +1,2 @@
CONFIG_TEST_RANDOM_GENERATOR=y CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_RANDOM_TEST_GENERATOR=y CONFIG_TIMER_RANDOM_GENERATOR=y

View file

@ -1,7 +1,7 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
if (CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR OR if (CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR OR
CONFIG_RANDOM_TEST_GENERATOR OR CONFIG_TIMER_RANDOM_GENERATOR OR
CONFIG_XOSHIRO_RANDOM_GENERATOR) CONFIG_XOSHIRO_RANDOM_GENERATOR)
zephyr_library() zephyr_library()
zephyr_library_sources_ifdef(CONFIG_USERSPACE rand32_handlers.c) zephyr_library_sources_ifdef(CONFIG_USERSPACE rand32_handlers.c)
@ -17,10 +17,10 @@ endif()
# XOROSHIRO builds the XOSHIRO implementation because a Kconfig choice cannot # XOROSHIRO builds the XOSHIRO implementation because a Kconfig choice cannot
# select another choice as a means of deprecating the symbol. Swapping out the # 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. # 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_XOROSHIRO_RANDOM_GENERATOR rand32_xoshiro128.c)
zephyr_library_sources_ifdef(CONFIG_XOSHIRO_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_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) if (CONFIG_ENTROPY_DEVICE_RANDOM_GENERATOR OR CONFIG_HARDWARE_DEVICE_CS_GENERATOR)
zephyr_library_sources(rand32_entropy_device.c) zephyr_library_sources(rand32_entropy_device.c)

View file

@ -40,12 +40,13 @@ choice RNG_GENERATOR_CHOICE
to support random request then select that. Otherwise, select the to support random request then select that. Otherwise, select the
XOSHIRO algorithm XOSHIRO algorithm
config RANDOM_TEST_GENERATOR config TIMER_RANDOM_GENERATOR
bool "System timer clock based number generator" bool "System timer clock based number generator"
depends on TEST_RANDOM_GENERATOR depends on TEST_RANDOM_GENERATOR
help help
This number generator is not random and used only for testing. This options enables number generator based on system timer
Does not rely on an entropy driver, so can be used without entropy. clock. This number generator is not random and used for
testing only.
config ENTROPY_DEVICE_RANDOM_GENERATOR config ENTROPY_DEVICE_RANDOM_GENERATOR
bool "Use entropy driver to generate random numbers" bool "Use entropy driver to generate random numbers"

View file

@ -14,44 +14,21 @@
* provide a random number generator. * provide a random number generator.
*/ */
#include <zephyr/init.h>
#include <zephyr/random/rand32.h> #include <zephyr/random/rand32.h>
#include <zephyr/drivers/timer/system_timer.h> #include <zephyr/drivers/timer/system_timer.h>
#include <zephyr/kernel.h> #include <zephyr/kernel.h>
#include <zephyr/sys/atomic.h>
#include <string.h> #include <string.h>
#include <zephyr/device.h>
#if defined(__GNUC__) #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; #define _RAND32_INC 1000000003U
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;
}
/** /**
* @brief Get a 32 bit random number * @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) 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; outlen -= blocksize;
} }
} }
#endif /* __GNUC__ */ #endif /* __GNUC__ */

View file

@ -3,4 +3,4 @@ CONFIG_ZTEST_NEW_API=y
CONFIG_LOG=y CONFIG_LOG=y
CONFIG_ENTROPY_GENERATOR=y CONFIG_ENTROPY_GENERATOR=y
CONFIG_TEST_RANDOM_GENERATOR=y CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_RANDOM_TEST_GENERATOR=y CONFIG_TIMER_RANDOM_GENERATOR=y

View file

@ -2,7 +2,7 @@ CONFIG_NETWORKING=y
CONFIG_NET_TCP=y CONFIG_NET_TCP=y
CONFIG_ENTROPY_GENERATOR=y CONFIG_ENTROPY_GENERATOR=y
CONFIG_TEST_RANDOM_GENERATOR=y CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_RANDOM_TEST_GENERATOR=y CONFIG_TIMER_RANDOM_GENERATOR=y
CONFIG_NET_ARP=y CONFIG_NET_ARP=y
CONFIG_NET_L2_ETHERNET=y CONFIG_NET_L2_ETHERNET=y

View file

@ -4,7 +4,7 @@ CONFIG_ZTEST_ASSERT_VERBOSE=0
CONFIG_ENTROPY_GENERATOR=y CONFIG_ENTROPY_GENERATOR=y
CONFIG_TEST_RANDOM_GENERATOR=y CONFIG_TEST_RANDOM_GENERATOR=y
CONFIG_RANDOM_TEST_GENERATOR=y CONFIG_TIMER_RANDOM_GENERATOR=y
CONFIG_ZTEST_SHUFFLE=y CONFIG_ZTEST_SHUFFLE=y
CONFIG_ZTEST_SHUFFLE_SUITE_REPEAT_COUNT=2 CONFIG_ZTEST_SHUFFLE_SUITE_REPEAT_COUNT=2