1
0
mirror of https://github.com/janet-lang/janet synced 2024-11-25 17:57:17 +00:00

Add janet_rng_longseed to janet.h

This commit is contained in:
Calvin Rose 2019-11-21 23:26:31 -06:00
parent 4b24d77b2c
commit e65716f6ee
2 changed files with 3 additions and 2 deletions

View File

@ -77,14 +77,14 @@ void janet_rng_seed(JanetRNG *rng, uint32_t seed) {
void janet_rng_longseed(JanetRNG *rng, const uint8_t *bytes, int32_t len) { void janet_rng_longseed(JanetRNG *rng, const uint8_t *bytes, int32_t len) {
uint8_t state[16] = {0}; uint8_t state[16] = {0};
for (int32_t i = 0; i < len; i++) for (int32_t i = 0; i < len; i++)
state[i % 16] ^= bytes[i]; state[i & 0xF] ^= bytes[i];
rng->a = state[0] + (state[1] << 8) + (state[2] << 16) + (state[3] << 24); rng->a = state[0] + (state[1] << 8) + (state[2] << 16) + (state[3] << 24);
rng->b = state[4] + (state[5] << 8) + (state[6] << 16) + (state[7] << 24); rng->b = state[4] + (state[5] << 8) + (state[6] << 16) + (state[7] << 24);
rng->c = state[8] + (state[9] << 8) + (state[10] << 16) + (state[11] << 24); rng->c = state[8] + (state[9] << 8) + (state[10] << 16) + (state[11] << 24);
rng->d = state[12] + (state[13] << 8) + (state[14] << 16) + (state[15] << 24); rng->d = state[12] + (state[13] << 8) + (state[14] << 16) + (state[15] << 24);
rng->counter = 0u; rng->counter = 0u;
/* a, b, c, d can't all be 0 */ /* a, b, c, d can't all be 0 */
if (rng->a == 0) rng->a = 1; if (rng->a == 0) rng->a = 1u;
for (int i = 0; i < 16; i++) janet_rng_u32(rng); for (int i = 0; i < 16; i++) janet_rng_u32(rng);
} }

View File

@ -1112,6 +1112,7 @@ JANET_API void janet_debug_find(
/* RNG */ /* RNG */
JANET_API JanetRNG *janet_default_rng(void); JANET_API JanetRNG *janet_default_rng(void);
JANET_API void janet_rng_seed(JanetRNG *rng, uint32_t seed); JANET_API void janet_rng_seed(JanetRNG *rng, uint32_t seed);
JANET_API void janet_rng_longseed(JanetRNG *rng, const uint32_t *bytes, int32_t len);
JANET_API uint32_t janet_rng_u32(JanetRNG *rng); JANET_API uint32_t janet_rng_u32(JanetRNG *rng);
/* Array functions */ /* Array functions */