File syn_random.c¶
File List > src > syntropic > util > syn_random.c
Go to the documentation of this file
#include "syn_random.h"
#include "../port/syn_port_system.h"
#include <string.h>
SYN_Status syn_random_fill(void *buf, size_t len)
{
if (!buf || len == 0)
return SYN_OK;
(void)memset(buf, 0, len);
return syn_port_random_fill(buf, len);
}
uint32_t syn_random_u32(void)
{
uint32_t val = 0;
syn_random_fill(&val, sizeof(val));
return val;
}
uint32_t syn_random_range(uint32_t min, uint32_t max)
{
if (min >= max)
return min;
uint32_t range = max - min + 1;
return min + (syn_random_u32() % range);
}
/* Weak fallback: NOT SECURE. Platform port must override this. */
SYN_WEAK SYN_Status syn_port_random_fill(void *buf, size_t len)
{
return syn_random_fallback_fill(buf, len);
}
SYN_Status syn_random_fallback_fill(void *buf, size_t len)
{
uint8_t *p = (uint8_t *)buf;
static uint32_t state = 0x87654321;
for (size_t i = 0; i < len; i++) {
/* Simple XOR-shift for fallback */
state ^= state << 13;
state ^= state >> 17;
state ^= state << 5;
p[i] = (uint8_t)(state ^ syn_port_get_tick_ms());
}
return SYN_OK;
}