diff options
Diffstat (limited to 'src/lib/libcrypto/rand/rand_win.c')
-rw-r--r-- | src/lib/libcrypto/rand/rand_win.c | 63 |
1 files changed, 11 insertions, 52 deletions
diff --git a/src/lib/libcrypto/rand/rand_win.c b/src/lib/libcrypto/rand/rand_win.c index 3d137badd0..c1b955b06f 100644 --- a/src/lib/libcrypto/rand/rand_win.c +++ b/src/lib/libcrypto/rand/rand_win.c | |||
@@ -113,7 +113,7 @@ | |||
113 | #include <openssl/rand.h> | 113 | #include <openssl/rand.h> |
114 | #include "rand_lcl.h" | 114 | #include "rand_lcl.h" |
115 | 115 | ||
116 | #if defined(WINDOWS) || defined(WIN32) | 116 | #if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32) |
117 | #include <windows.h> | 117 | #include <windows.h> |
118 | #ifndef _WIN32_WINNT | 118 | #ifndef _WIN32_WINNT |
119 | # define _WIN32_WINNT 0x0400 | 119 | # define _WIN32_WINNT 0x0400 |
@@ -254,6 +254,10 @@ int RAND_poll(void) | |||
254 | * at random times on Windows 2000. Reported by Jeffrey Altman. | 254 | * at random times on Windows 2000. Reported by Jeffrey Altman. |
255 | * Only use it on NT. | 255 | * Only use it on NT. |
256 | */ | 256 | */ |
257 | /* Wolfgang Marczy <WMarczy@topcall.co.at> reports that | ||
258 | * the RegQueryValueEx call below can hang on NT4.0 (SP6). | ||
259 | * So we don't use this at all for now. */ | ||
260 | #if 0 | ||
257 | if ( osverinfo.dwPlatformId == VER_PLATFORM_WIN32_NT && | 261 | if ( osverinfo.dwPlatformId == VER_PLATFORM_WIN32_NT && |
258 | osverinfo.dwMajorVersion < 5) | 262 | osverinfo.dwMajorVersion < 5) |
259 | { | 263 | { |
@@ -290,6 +294,7 @@ int RAND_poll(void) | |||
290 | if (buf) | 294 | if (buf) |
291 | free(buf); | 295 | free(buf); |
292 | } | 296 | } |
297 | #endif | ||
293 | 298 | ||
294 | if (advapi) | 299 | if (advapi) |
295 | { | 300 | { |
@@ -310,8 +315,8 @@ int RAND_poll(void) | |||
310 | { | 315 | { |
311 | if (gen(hProvider, sizeof(buf), buf) != 0) | 316 | if (gen(hProvider, sizeof(buf), buf) != 0) |
312 | { | 317 | { |
313 | RAND_add(buf, sizeof(buf), sizeof(buf)); | 318 | RAND_add(buf, sizeof(buf), 0); |
314 | #ifdef DEBUG | 319 | #if 0 |
315 | printf("randomness from PROV_RSA_FULL\n"); | 320 | printf("randomness from PROV_RSA_FULL\n"); |
316 | #endif | 321 | #endif |
317 | } | 322 | } |
@@ -324,7 +329,7 @@ int RAND_poll(void) | |||
324 | if (gen(hProvider, sizeof(buf), buf) != 0) | 329 | if (gen(hProvider, sizeof(buf), buf) != 0) |
325 | { | 330 | { |
326 | RAND_add(buf, sizeof(buf), sizeof(buf)); | 331 | RAND_add(buf, sizeof(buf), sizeof(buf)); |
327 | #ifdef DEBUG | 332 | #if 0 |
328 | printf("randomness from PROV_INTEL_SEC\n"); | 333 | printf("randomness from PROV_INTEL_SEC\n"); |
329 | #endif | 334 | #endif |
330 | } | 335 | } |
@@ -461,7 +466,7 @@ int RAND_poll(void) | |||
461 | hlist.th32ProcessID, | 466 | hlist.th32ProcessID, |
462 | hlist.th32HeapID)) | 467 | hlist.th32HeapID)) |
463 | { | 468 | { |
464 | int entrycnt = 50; | 469 | int entrycnt = 80; |
465 | do | 470 | do |
466 | RAND_add(&hentry, | 471 | RAND_add(&hentry, |
467 | hentry.dwSize, 5); | 472 | hentry.dwSize, 5); |
@@ -510,7 +515,7 @@ int RAND_poll(void) | |||
510 | FreeLibrary(kernel); | 515 | FreeLibrary(kernel); |
511 | } | 516 | } |
512 | 517 | ||
513 | #ifdef DEBUG | 518 | #if 0 |
514 | printf("Exiting RAND_poll\n"); | 519 | printf("Exiting RAND_poll\n"); |
515 | #endif | 520 | #endif |
516 | 521 | ||
@@ -685,50 +690,4 @@ static void readscreen(void) | |||
685 | DeleteDC(hScrDC); | 690 | DeleteDC(hScrDC); |
686 | } | 691 | } |
687 | 692 | ||
688 | #else /* Unix version */ | ||
689 | |||
690 | #include <time.h> | ||
691 | |||
692 | int RAND_poll(void) | ||
693 | { | ||
694 | unsigned long l; | ||
695 | pid_t curr_pid = getpid(); | ||
696 | #ifdef DEVRANDOM | ||
697 | FILE *fh; | ||
698 | #endif | ||
699 | |||
700 | #ifdef DEVRANDOM | ||
701 | /* Use a random entropy pool device. Linux, FreeBSD and OpenBSD | ||
702 | * have this. Use /dev/urandom if you can as /dev/random may block | ||
703 | * if it runs out of random entries. */ | ||
704 | |||
705 | if ((fh = fopen(DEVRANDOM, "r")) != NULL) | ||
706 | { | ||
707 | unsigned char tmpbuf[ENTROPY_NEEDED]; | ||
708 | int n; | ||
709 | |||
710 | setvbuf(fh, NULL, _IONBF, 0); | ||
711 | n=fread((unsigned char *)tmpbuf,1,ENTROPY_NEEDED,fh); | ||
712 | fclose(fh); | ||
713 | RAND_add(tmpbuf,sizeof tmpbuf,n); | ||
714 | memset(tmpbuf,0,n); | ||
715 | } | ||
716 | #endif | ||
717 | |||
718 | /* put in some default random data, we need more than just this */ | ||
719 | l=curr_pid; | ||
720 | RAND_add(&l,sizeof(l),0); | ||
721 | l=getuid(); | ||
722 | RAND_add(&l,sizeof(l),0); | ||
723 | |||
724 | l=time(NULL); | ||
725 | RAND_add(&l,sizeof(l),0); | ||
726 | |||
727 | #ifdef DEVRANDOM | ||
728 | return 1; | ||
729 | #else | ||
730 | return 0; | ||
731 | #endif | ||
732 | } | ||
733 | |||
734 | #endif | 693 | #endif |