- 论坛徽章:
- 0
|
原帖由 JohnBull 于 2006-10-2 00:53 发表
不是的,是在用户态线性同余产生的。
这两天头脑不清楚,把glibc和openssl混一块儿了。别见怪啊。
file:/usr/src/lib/openssl/crypto/md/rand_win.c
#else /* Unix version */
#include <time.h>
int RAND_poll(void)
{
unsigned long l;
pid_t curr_pid = getpid();
#ifdef DEVRANDOM
FILE *fh;
#endif
#ifdef DEVRANDOM
/* Use a random entropy pool device. Linux, FreeBSD and OpenBSD
* have this. Use /dev/urandom if you can as /dev/random may block
* if it runs out of random entries. */
if ((fh = fopen(DEVRANDOM, "r")) != NULL)
{
unsigned char tmpbuf[ENTROPY_NEEDED];
int n;
setvbuf(fh, NULL, _IONBF, 0);
n=fread((unsigned char *)tmpbuf,1,ENTROPY_NEEDED,fh);
fclose(fh);
RAND_add(tmpbuf,sizeof tmpbuf,n);
memset(tmpbuf,0,n);
}
#endif
/* put in some default random data, we need more than just this */
l=curr_pid;
RAND_add(&l,sizeof(l),0);
#ifndef VXWORKS
l=getuid();
RAND_add(&l,sizeof(l),0);
#endif
l=time(NULL);
RAND_add(&l,sizeof(l),0);
#ifdef DEVRANDOM
return 1;
#else
return 0;
#endif
}
谢谢指正。
[ 本帖最后由 langue 于 2006-10-2 01:09 编辑 ] |
|