From 458b911ecd29611967586b02ceaf777ef8f14a6d Mon Sep 17 00:00:00 2001 From: ac-stef Date: Sat, 13 May 2017 20:02:18 +0200 Subject: [PATCH] fix initialisation of entropy pool have to know home dir before loading entropy.dat add dummy screenshots on keypress events during first run to get entropy --- source/src/crypto.cpp | 8 ++++++++ source/src/main.cpp | 6 ++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/source/src/crypto.cpp b/source/src/crypto.cpp index 4d5db616..8fd54867 100644 --- a/source/src/crypto.cpp +++ b/source/src/crypto.cpp @@ -366,6 +366,14 @@ void entropy_init(uint seed) int len = 0; char *buf = loadfile(ENTROPYSAVEFILE, &len); if(buf && len) entropy_add_block((uchar*)buf, len); +#ifndef STANDALONE + else + { + extern int bootstrapentropy; + bootstrapentropy += 7 + rnd(13); + clientlogf(ENTROPYSAVEFILE " not found."); + } +#endif DELETEA(buf); entropy_get((uchar*)mt_state, MT_N * sizeof(uint)); } diff --git a/source/src/main.cpp b/source/src/main.cpp index 12d57dc2..188a223f 100644 --- a/source/src/main.cpp +++ b/source/src/main.cpp @@ -736,7 +736,7 @@ static void checkmousemotion(int &dx, int &dy) } } -static int ignoremouse = 5; +int ignoremouse = 5, bootstrapentropy = 0; void checkinput() { @@ -760,6 +760,7 @@ void checkinput() #endif case SDL_KEYDOWN: + if(bootstrapentropy > 0 && (--bootstrapentropy & 2)) mapscreenshot(NULL, false, -1); case SDL_KEYUP: entropy_add_byte(event.key.keysym.sym ^ totalmillis); keypress(event.key.keysym.sym, event.key.state==SDL_PRESSED, event.key.keysym.unicode, event.key.keysym.mod); @@ -1005,7 +1006,6 @@ int main(int argc, char **argv) crosshairnames[CROSSHAIR_SCOPE] = "scope"; crosshairnames[CROSSHAIR_EDIT] = "edit"; crosshairnames[CROSSHAIR_NUM] = gunnames[NUMGUNS] = ""; - entropy_init(time(NULL) + (uint)(size_t)&serverport + (uint)(size_t)entropy_init); pushscontext(IEXC_CFG); persistidents = false; @@ -1080,6 +1080,7 @@ int main(int argc, char **argv) else conoutf("\f3unknown commandline argument: %c", argv[i][0]); } } + entropy_init(time(NULL) + (uint)(size_t)&serverport + (uint)(size_t)entropy_init); initclientlog(); if(quitdirectly) return EXIT_SUCCESS; @@ -1218,6 +1219,7 @@ int main(int argc, char **argv) if(!execfile("config/saved.cfg")) { exec("config/defaults.cfg"); + bootstrapentropy += 5 + rnd(7); } autostartscripts("_aftersaved_"); exechook(HOOK_SP_MP, "afterinit", "");