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:
parent
4b24d77b2c
commit
e65716f6ee
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user