⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uxnoise.c

📁 大名鼎鼎的远程登录软件putty的Symbian版源码
💻 C
字号:
/* * Noise generation for PuTTY's cryptographic random number * generator. */#include <stdio.h>#include <fcntl.h>#include <unistd.h>#include <sys/time.h>#include <sys/resource.h>#include "putty.h"#include "ssh.h"#include "storage.h"static int read_dev_urandom(char *buf, int len){    int fd;    int ngot, ret;    fd = open("/dev/urandom", O_RDONLY);    if (fd < 0)	return 0;    ngot = 0;    while (ngot < len) {	ret = read(fd, buf+ngot, len-ngot);	if (ret < 0) {	    close(fd);	    return 0;	}	ngot += ret;    }    return 1;}/* * This function is called once, at PuTTY startup. It will do some * slightly silly things such as fetching an entire process listing * and scanning /tmp, load the saved random seed from disk, and * also read 32 bytes out of /dev/urandom. */void noise_get_heavy(void (*func) (void *, int)){    char buf[512];    FILE *fp;    int ret;    if (read_dev_urandom(buf, 32))	func(buf, 32);    fp = popen("ps -axu 2>/dev/null", "r");    while ( (ret = fread(buf, 1, sizeof(buf), fp)) > 0)	func(buf, ret);    pclose(fp);    fp = popen("ls -al /tmp 2>/dev/null", "r");    while ( (ret = fread(buf, 1, sizeof(buf), fp)) > 0)	func(buf, ret);    pclose(fp);    read_random_seed(func);    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)){    struct timeval tv;    gettimeofday(&tv, NULL);    func(&tv, sizeof(tv));}/* * This function is called on a timer, and grabs as much changeable * system data as it can quickly get its hands on. */void noise_regular(void){    int fd;    int ret;    char buf[512];    struct rusage rusage;    if ((fd = open("/proc/meminfo", O_RDONLY)) >= 0) {	while ( (ret = read(fd, buf, sizeof(buf))) > 0)	    random_add_noise(buf, ret);	close(fd);    }    if ((fd = open("/proc/stat", O_RDONLY)) >= 0) {	while ( (ret = read(fd, buf, sizeof(buf))) > 0)	    random_add_noise(buf, ret);	close(fd);    }    getrusage(RUSAGE_SELF, &rusage);    random_add_noise(&rusage, sizeof(rusage));}/* * 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){    struct timeval tv;    gettimeofday(&tv, NULL);    random_add_noise(&tv, sizeof(tv));    random_add_noise(&data, sizeof(data));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -