X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/7d6ee6ff291302d003f6f6cc6d11cede050c1c87..e35fb54b2ce23c668414c0f5cd072c709374fc6d:/noise.c diff --git a/noise.c b/noise.c index c5966a71..5b82fa76 100644 --- a/noise.c +++ b/noise.c @@ -3,7 +3,6 @@ * generator. */ -#include #include #include "putty.h" @@ -11,22 +10,16 @@ #include "storage.h" /* - * GetSystemPowerStatus function. - */ -typedef BOOL (WINAPI *gsps_t)(LPSYSTEM_POWER_STATUS); -static gsps_t gsps; - -/* * This function is called once, at PuTTY startup, and will do some * seriously silly things like listing directories and getting disk * free space and a process snapshot. */ -void noise_get_heavy(void (*func) (void *, int)) { +void noise_get_heavy(void (*func) (void *, int)) +{ HANDLE srch; WIN32_FIND_DATA finddata; - char winpath[MAX_PATH+3]; - HMODULE mod; + char winpath[MAX_PATH + 3]; GetWindowsDirectory(winpath, sizeof(winpath)); strcat(winpath, "\\*"); @@ -39,20 +32,20 @@ void noise_get_heavy(void (*func) (void *, int)) { } read_random_seed(func); - - gsps = NULL; - mod = GetModuleHandle("KERNEL32"); - if (mod) { - gsps = (gsps_t)GetProcAddress(mod, "GetSystemPowerStatus"); - } + /* Update the seed immediately, in case another instance uses it. */ + random_save_seed(); } -void random_save_seed(void) { +void random_save_seed(void) +{ int len; void *data; - random_get_savedata(&data, &len); - write_random_seed(data, len); + if (random_active) { + random_get_savedata(&data, &len); + write_random_seed(data, len); + sfree(data); + } } /* @@ -60,7 +53,8 @@ void random_save_seed(void) { * stirring, and will acquire the system time in all available * forms and the battery status. */ -void noise_get_light(void (*func) (void *, int)) { +void noise_get_light(void (*func) (void *, int)) +{ SYSTEMTIME systime; DWORD adjust[2]; BOOL rubbish; @@ -71,14 +65,6 @@ void noise_get_light(void (*func) (void *, int)) { GetSystemTimeAdjustment(&adjust[0], &adjust[1], &rubbish); func(&adjust, sizeof(adjust)); - - /* - * Call GetSystemPowerStatus if present. - */ - if (gsps) { - if (gsps(&pwrstat)) - func(&pwrstat, sizeof(pwrstat)); - } } /* @@ -87,25 +73,34 @@ void noise_get_light(void (*func) (void *, int)) { * virtual memory, the state of the process's message queue, which * window is in the foreground, which owns the clipboard, etc. */ -void noise_regular(void) { +void noise_regular(void) +{ HWND w; DWORD z; POINT pt; MEMORYSTATUS memstat; FILETIME times[4]; - w = GetForegroundWindow(); random_add_noise(&w, sizeof(w)); - w = GetCapture(); random_add_noise(&w, sizeof(w)); - w = GetClipboardOwner(); random_add_noise(&w, sizeof(w)); - z = GetQueueStatus(QS_ALLEVENTS); random_add_noise(&z, sizeof(z)); + w = GetForegroundWindow(); + random_add_noise(&w, sizeof(w)); + w = GetCapture(); + random_add_noise(&w, sizeof(w)); + w = GetClipboardOwner(); + random_add_noise(&w, sizeof(w)); + z = GetQueueStatus(QS_ALLEVENTS); + random_add_noise(&z, sizeof(z)); - GetCursorPos(&pt); random_add_noise(&pt, sizeof(pt)); + GetCursorPos(&pt); + random_add_noise(&pt, sizeof(pt)); - GlobalMemoryStatus(&memstat); random_add_noise(&memstat, sizeof(memstat)); + GlobalMemoryStatus(&memstat); + random_add_noise(&memstat, sizeof(memstat)); - GetThreadTimes(GetCurrentThread(), times, times+1, times+2, times+3); + GetThreadTimes(GetCurrentThread(), times, times + 1, times + 2, + times + 3); random_add_noise(×, sizeof(times)); - GetProcessTimes(GetCurrentProcess(), times, times+1, times+2, times+3); + GetProcessTimes(GetCurrentProcess(), times, times + 1, times + 2, + times + 3); random_add_noise(×, sizeof(times)); } @@ -115,7 +110,8 @@ void noise_regular(void) { * counter to the noise pool. It gets the scan code or mouse * position passed in. */ -void noise_ultralight(DWORD data) { +void noise_ultralight(unsigned long data) +{ DWORD wintime; LARGE_INTEGER perftime;