Make windows respect RUST_SEED. Closes #627.
This commit is contained in:
@@ -130,8 +130,15 @@ isaac_init(sched_or_kernel *sched, randctx *rctx)
|
|||||||
{
|
{
|
||||||
memset(rctx, 0, sizeof(randctx));
|
memset(rctx, 0, sizeof(randctx));
|
||||||
|
|
||||||
|
char *rust_seed = sched->env->rust_seed;
|
||||||
|
if (rust_seed != NULL) {
|
||||||
|
ub4 seed = (ub4) atoi(rust_seed);
|
||||||
|
for (size_t i = 0; i < RANDSIZ; i ++) {
|
||||||
|
memcpy(&rctx->randrsl[i], &seed, sizeof(ub4));
|
||||||
|
seed = (seed + 0x7ed55d16) + (seed << 12);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
#ifdef __WIN32__
|
#ifdef __WIN32__
|
||||||
{
|
|
||||||
HCRYPTPROV hProv;
|
HCRYPTPROV hProv;
|
||||||
sched->win32_require
|
sched->win32_require
|
||||||
(_T("CryptAcquireContext"),
|
(_T("CryptAcquireContext"),
|
||||||
@@ -144,24 +151,16 @@ isaac_init(sched_or_kernel *sched, randctx *rctx)
|
|||||||
sched->win32_require
|
sched->win32_require
|
||||||
(_T("CryptReleaseContext"),
|
(_T("CryptReleaseContext"),
|
||||||
CryptReleaseContext(hProv, 0));
|
CryptReleaseContext(hProv, 0));
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
char *rust_seed = sched->env->rust_seed;
|
|
||||||
if (rust_seed != NULL) {
|
|
||||||
ub4 seed = (ub4) atoi(rust_seed);
|
|
||||||
for (size_t i = 0; i < RANDSIZ; i ++) {
|
|
||||||
memcpy(&rctx->randrsl[i], &seed, sizeof(ub4));
|
|
||||||
seed = (seed + 0x7ed55d16) + (seed << 12);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
int fd = open("/dev/urandom", O_RDONLY);
|
int fd = open("/dev/urandom", O_RDONLY);
|
||||||
I(sched, fd > 0);
|
I(sched, fd > 0);
|
||||||
I(sched,
|
I(sched,
|
||||||
read(fd, (void*) &rctx->randrsl, sizeof(rctx->randrsl))
|
read(fd, (void*) &rctx->randrsl, sizeof(rctx->randrsl))
|
||||||
== sizeof(rctx->randrsl));
|
== sizeof(rctx->randrsl));
|
||||||
I(sched, close(fd) == 0);
|
I(sched, close(fd) == 0);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
randinit(rctx, 1);
|
randinit(rctx, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user