From 52d4b1a1aae176745dba871f0b01c06f081ab1ca Mon Sep 17 00:00:00 2001 From: Patric Mueller Date: Fri, 11 Jan 2019 19:23:01 +0100 Subject: [PATCH] reseed during level change to prevent deduction of rng state For platforms that read from the system's random number generator, reseed during level change, before the map of a new level is created and after level creation has finished. --- src/do.c | 1 + src/hacklib.c | 11 +++++++++++ src/mklev.c | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/src/do.c b/src/do.c index e069c3ac6..ad2e3045d 100644 --- a/src/do.c +++ b/src/do.c @@ -1420,6 +1420,7 @@ boolean at_stairs, falling, portal; /* we'll reach here if running in wizard mode */ error("Cannot continue this game."); } + reseed_random(); minit(); /* ZEROCOMP */ getlev(fd, hackpid, new_ledger, FALSE); (void) nhclose(fd); diff --git a/src/hacklib.c b/src/hacklib.c index 8ceb9fcde..409c34007 100644 --- a/src/hacklib.c +++ b/src/hacklib.c @@ -917,6 +917,17 @@ init_random() set_random(seed); } +/* Reshuffles the random number generator. */ +void +reseed_random() +{ + /* only reseed if we are certain that the seed generation is unguessable + * by the players. */ +#ifdef DEV_RANDOM + init_random(); +#endif +} + time_t getnow() { diff --git a/src/mklev.c b/src/mklev.c index 16cc32bde..4cf5b9000 100644 --- a/src/mklev.c +++ b/src/mklev.c @@ -982,6 +982,8 @@ mklev() struct mkroom *croom; int ridx; + reseed_random(); + init_mapseen(&u.uz); if (getbones()) return; @@ -1009,6 +1011,8 @@ mklev() entered; rooms[].orig_rtype always retains original rtype value */ for (ridx = 0; ridx < SIZE(rooms); ridx++) rooms[ridx].orig_rtype = rooms[ridx].rtype; + + reseed_random(); } void -- 2.40.0