Skip to content
Snippets Groups Projects
Commit caabc153 authored by Kaspar Schleiser's avatar Kaspar Schleiser
Browse files

sys/random: provide generic random_bytes()

parent b378bd4e
No related branches found
No related tags found
No related merge requests found
SRC := seed.c
SRC := random.c
BASE_MODULE := prng
SUBMODULES := 1
......
......@@ -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++;
}
}
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment