diff --git a/sys/random/Makefile b/sys/random/Makefile index 1068de18a3..4e66ead042 100644 --- a/sys/random/Makefile +++ b/sys/random/Makefile @@ -1,4 +1,4 @@ -SRC := seed.c +SRC := random.c BASE_MODULE := prng SUBMODULES := 1 diff --git a/sys/random/seed.c b/sys/random/random.c similarity index 71% rename from sys/random/seed.c rename to sys/random/random.c index b53d4ff814..dc5e6cf38d 100644 --- a/sys/random/seed.c +++ b/sys/random/random.c @@ -39,3 +39,18 @@ void auto_init_random(void) DEBUG("random: using seed value %u\n", (unsigned)seed); random_init(seed); } + +void random_bytes(uint8_t *target, size_t n) +{ + uint32_t random; + uint8_t *random_pos = (uint8_t*)&random; + unsigned _n = 0; + + while (n--) { + if (! (_n++ & 0x3)) { + random = random_uint32(); + random_pos = (uint8_t *) &random; + } + *target++ = *random_pos++; + } +} diff --git a/sys/random/tinymt32.c b/sys/random/tinymt32.c index 8442457e96..9537d7cd7d 100644 --- a/sys/random/tinymt32.c +++ b/sys/random/tinymt32.c @@ -44,36 +44,6 @@ uint32_t random_uint32(void) return tinymt32_generate_uint32(&_random); } -void random_bytes(uint8_t *buf, size_t size) -{ - size_t iter = size; - size_t diff = _align(buf) - buf; - uint32_t tmp; - - /* Fill first <4 unaligned bytes */ - if (diff) { - tmp = tinymt32_generate_uint32(&_random); - if (diff > size) { - diff = size; - } - memcpy(buf, &tmp, diff); - iter -= diff; - } - - /* Fill aligned bytes */ - while (iter >= sizeof(uint32_t)) { - *((uint32_t *) buf) = tinymt32_generate_uint32(&_random); - buf += sizeof(uint32_t); - iter -= sizeof(uint32_t); - } - - /* Fill last bytes */ - if (iter) { - tmp = tinymt32_generate_uint32(&_random); - memcpy(buf, &tmp, iter); - } -} - void random_init_by_array(uint32_t init_key[], int key_length) { tinymt32_init_by_array(&_random, init_key, key_length);