From ccf704bab83073b0094232f41a7839bc3754d23b Mon Sep 17 00:00:00 2001 From: Kaspar Schleiser <kaspar@schleiser.de> Date: Thu, 31 Aug 2017 00:50:25 +0200 Subject: [PATCH] sys: random: use luid to generate random seed --- Makefile.dep | 2 ++ sys/auto_init/auto_init.c | 7 ++----- sys/random/Makefile | 2 ++ sys/random/seed.c | 41 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 sys/random/seed.c diff --git a/Makefile.dep b/Makefile.dep index 47f9d795bb..b5012a6f42 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -656,6 +656,8 @@ ifneq (,$(filter random,$(USEMODULE))) ifneq (,$(filter prng_tinymt32,$(USEMODULE))) USEMODULE += tinymt32 endif + + USEMODULE += luid endif ifneq (,$(filter openthread_contrib,$(USEMODULE))) diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c index 726b673ab7..fa1248e3a6 100644 --- a/sys/auto_init/auto_init.c +++ b/sys/auto_init/auto_init.c @@ -80,10 +80,6 @@ #include "net/fib.h" #endif -#ifdef MODULE_PRNG -#include "random.h" -#endif - #ifdef MODULE_GCOAP #include "net/gcoap.h" #endif @@ -99,7 +95,8 @@ void auto_init(void) { #ifdef MODULE_PRNG - random_init(0); + void auto_init_random(void); + auto_init_random(); #endif #ifdef MODULE_XTIMER DEBUG("Auto init xtimer module.\n"); diff --git a/sys/random/Makefile b/sys/random/Makefile index 372beceac5..1068de18a3 100644 --- a/sys/random/Makefile +++ b/sys/random/Makefile @@ -1,3 +1,5 @@ +SRC := seed.c + BASE_MODULE := prng SUBMODULES := 1 diff --git a/sys/random/seed.c b/sys/random/seed.c new file mode 100644 index 0000000000..b60f1285c7 --- /dev/null +++ b/sys/random/seed.c @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2017 Kaspar Schleiser <kaspar@schleiser.de> + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + + /** + * @ingroup sys_random + * @{ + * @file + * + * @brief PRNG seeding + * + * @author Kaspar Schleiser <kaspar@schleiser.de> + * @} + */ + +#include <stdint.h> + +#include "log.h" +#include "luid.h" +#include "periph/cpuid.h" +#include "random.h" + +#define ENABLE_DEBUG (0) +#include "debug.h" + +void auto_init_random(void) +{ + uint32_t seed; +#ifdef MODULE_PERIPH_CPUID + luid_get(&seed, 4); +#else + LOG_WARNING("random: NO SEED AVAILABLE!\n"); + seed = 1; +#endif + DEBUG("random: using seed value %u\n", (unsigned)seed); + random_init(seed); +} -- GitLab