projects
/
openssl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
6141b86
)
undo Cygwin change
author
Ulf Möller
<ulf@openssl.org>
Thu, 24 Mar 2005 00:14:59 +0000
(
00:14
+0000)
committer
Ulf Möller
<ulf@openssl.org>
Thu, 24 Mar 2005 00:14:59 +0000
(
00:14
+0000)
CHANGES
patch
|
blob
|
history
crypto/rand/rand_win.c
patch
|
blob
|
history
diff --git
a/CHANGES
b/CHANGES
index 7c3722ee2862cc644e3a960852f9a5d09e7ebc25..518593231200fff938a6cf89f22bfc2e3cf1b1ed 100644
(file)
--- a/
CHANGES
+++ b/
CHANGES
@@
-761,7
+761,12
@@
differing sizes.
[Richard Levitte]
differing sizes.
[Richard Levitte]
- Changes between 0.9.7e and 0.9.7f [XX xxx XXXX]
+ Changes between 0.9.7f and 0.9.7g [XX xxx xxxx]
+
+ *) Undo Cygwin change.
+ [Ulf Möller]
+
+ Changes between 0.9.7e and 0.9.7f [23 Mar 2005]
*) Use (SSL_RANDOM_VALUE - 4) bytes of pseudo random data when generating
server and client random values. Previously
*) Use (SSL_RANDOM_VALUE - 4) bytes of pseudo random data when generating
server and client random values. Previously
diff --git
a/crypto/rand/rand_win.c
b/crypto/rand/rand_win.c
index a7c2c9df7426bc53d4df3206793d45b4667e6d0a..29472c6ddd1194c88ab8da30025fa788816e1393 100644
(file)
--- a/
crypto/rand/rand_win.c
+++ b/
crypto/rand/rand_win.c
@@
-113,7
+113,7
@@
#include <openssl/rand.h>
#include "rand_lcl.h"
#include <openssl/rand.h>
#include "rand_lcl.h"
-#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32)
|| defined(OPENSSL_SYS_WIN32_CYGWIN)
+#if defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_WIN32)
#include <windows.h>
#ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x0400
#include <windows.h>
#ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x0400
@@
-121,6
+121,10
@@
#include <wincrypt.h>
#include <tlhelp32.h>
#include <wincrypt.h>
#include <tlhelp32.h>
+/* Limit the time spent walking through the heap, processes, threads and modules to
+ a maximum of 1000 miliseconds each, unless CryptoGenRandom failed */
+#define MAXDELAY 1000
+
/* Intel hardware RNG CSP -- available from
* http://developer.intel.com/design/security/rng/redist_license.htm
*/
/* Intel hardware RNG CSP -- available from
* http://developer.intel.com/design/security/rng/redist_license.htm
*/
@@
-192,6
+196,7
@@
int RAND_poll(void)
BYTE buf[64];
DWORD w;
HWND h;
BYTE buf[64];
DWORD w;
HWND h;
+ int good = 0;
HMODULE advapi, kernel, user, netapi;
CRYPTACQUIRECONTEXTW acquire = 0;
HMODULE advapi, kernel, user, netapi;
CRYPTACQUIRECONTEXTW acquire = 0;
@@
-362,6
+367,7
@@
int RAND_poll(void)
if (gen(hProvider, sizeof(buf), buf) != 0)
{
RAND_add(buf, sizeof(buf), 0);
if (gen(hProvider, sizeof(buf), buf) != 0)
{
RAND_add(buf, sizeof(buf), 0);
+ good = 1;
#if 0
printf("randomness from PROV_RSA_FULL\n");
#endif
#if 0
printf("randomness from PROV_RSA_FULL\n");
#endif
@@
-375,6
+381,7
@@
int RAND_poll(void)
if (gen(hProvider, sizeof(buf), buf) != 0)
{
RAND_add(buf, sizeof(buf), sizeof(buf));
if (gen(hProvider, sizeof(buf), buf) != 0)
{
RAND_add(buf, sizeof(buf), sizeof(buf));
+ good = 1;
#if 0
printf("randomness from PROV_INTEL_SEC\n");
#endif
#if 0
printf("randomness from PROV_INTEL_SEC\n");
#endif
@@
-464,6
+471,7
@@
int RAND_poll(void)
PROCESSENTRY32 p;
THREADENTRY32 t;
MODULEENTRY32 m;
PROCESSENTRY32 p;
THREADENTRY32 t;
MODULEENTRY32 m;
+ DWORD stoptime = 0;
snap = (CREATETOOLHELP32SNAPSHOT)
GetProcAddress(kernel, "CreateToolhelp32Snapshot");
snap = (CREATETOOLHELP32SNAPSHOT)
GetProcAddress(kernel, "CreateToolhelp32Snapshot");
@@
-495,6
+503,7
@@
int RAND_poll(void)
* of entropy.
*/
hlist.dwSize = sizeof(HEAPLIST32);
* of entropy.
*/
hlist.dwSize = sizeof(HEAPLIST32);
+ if (good) stoptime = GetTickCount() + MAXDELAY;
if (heaplist_first(handle, &hlist))
do
{
if (heaplist_first(handle, &hlist))
do
{
@@
-512,18
+521,20
@@
int RAND_poll(void)
&& --entrycnt > 0);
}
} while (heaplist_next(handle,
&& --entrycnt > 0);
}
} while (heaplist_next(handle,
- &hlist));
-
+ &hlist)
&& GetTickCount() < stoptime
);
+
/* process walking */
/* PROCESSENTRY32 contains 9 fields that will change
* with each entry. Consider each field a source of
* 1 byte of entropy.
*/
p.dwSize = sizeof(PROCESSENTRY32);
/* process walking */
/* PROCESSENTRY32 contains 9 fields that will change
* with each entry. Consider each field a source of
* 1 byte of entropy.
*/
p.dwSize = sizeof(PROCESSENTRY32);
+
+ if (good) stoptime = GetTickCount() + MAXDELAY;
if (process_first(handle, &p))
do
RAND_add(&p, p.dwSize, 9);
if (process_first(handle, &p))
do
RAND_add(&p, p.dwSize, 9);
- while (process_next(handle, &p));
+ while (process_next(handle, &p)
&& GetTickCount() < stoptime
);
/* thread walking */
/* THREADENTRY32 contains 6 fields that will change
/* thread walking */
/* THREADENTRY32 contains 6 fields that will change
@@
-531,10
+542,11
@@
int RAND_poll(void)
* 1 byte of entropy.
*/
t.dwSize = sizeof(THREADENTRY32);
* 1 byte of entropy.
*/
t.dwSize = sizeof(THREADENTRY32);
+ if (good) stoptime = GetTickCount() + MAXDELAY;
if (thread_first(handle, &t))
do
RAND_add(&t, t.dwSize, 6);
if (thread_first(handle, &t))
do
RAND_add(&t, t.dwSize, 6);
- while (thread_next(handle, &t));
+ while (thread_next(handle, &t)
&& GetTickCount() < stoptime
);
/* module walking */
/* MODULEENTRY32 contains 9 fields that will change
/* module walking */
/* MODULEENTRY32 contains 9 fields that will change
@@
-542,14
+554,16
@@
int RAND_poll(void)
* 1 byte of entropy.
*/
m.dwSize = sizeof(MODULEENTRY32);
* 1 byte of entropy.
*/
m.dwSize = sizeof(MODULEENTRY32);
+ if (good) stoptime = GetTickCount() + MAXDELAY;
if (module_first(handle, &m))
do
RAND_add(&m, m.dwSize, 9);
if (module_first(handle, &m))
do
RAND_add(&m, m.dwSize, 9);
- while (module_next(handle, &m));
+ while (module_next(handle, &m)
&& GetTickCount < stoptime
);
if (close_snap)
close_snap(handle);
else
CloseHandle(handle);
if (close_snap)
close_snap(handle);
else
CloseHandle(handle);
+
}
FreeLibrary(kernel);
}
FreeLibrary(kernel);