/* * Noise generation for PuTTY's cryptographic random number * generator. */ #include #include #include "putty.h" #include "ssh.h" #include "storage.h" /* * 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)) { read_random_seed(func); /* Update the seed immediately, in case another instance uses it. */ random_save_seed(); } void random_save_seed(void) { int len; void *data; if (random_active) { random_get_savedata(&data, &len); write_random_seed(data, len); sfree(data); } } /* * This function is called every time the random pool needs * stirring, and will acquire the system time. */ void noise_get_light(void (*func) (void *, int)) { UnsignedWide utc; Microseconds(&utc); func(&utc, sizeof(utc)); } /* * This function is called on every keypress or mouse move, and * will add the current time to the noise pool. It gets the scan * code or mouse position passed in, and adds that too. */ void noise_ultralight(unsigned long data) { UnsignedWide utc; Microseconds(&utc); random_add_noise(&utc, sizeof(utc)); random_add_noise(&data, sizeof(data)); } /* * Local Variables: * c-file-style: "simon" * End: */