New function RAND_event() collects entropy from Windows events.

This commit is contained in:
Ulf Möller 2000-03-19 17:14:25 +00:00
parent 2501b335fa
commit c97b11f4b3
2 changed files with 43 additions and 0 deletions

View File

@ -568,6 +568,47 @@ static int ssleay_rand_status(void)
#include <windows.h>
#include <openssl/rand.h>
int RAND_event(UINT iMsg, WPARAM wParam, LPARAM lParam)
{
double add_entropy=0;
SYSTEMTIME t;
switch (iMsg)
{
case WM_KEYDOWN:
{
static WPARAM key;
if (key != wParam)
add_entropy = 0.05;
key = wParam;
}
break;
case WM_MOUSEMOVE:
{
static int lastx,lasty,lastdx,lastdy;
int x,y,dx,dy;
x=LOWORD(lParam);
y=HIWORD(lParam);
dx=lastx-x;
dy=lasty-y;
if (dx != 0 && dy != 0 && dx-lastdx != 0 && dy-lastdy != 0)
entropy += .2;
lastx=x,lasty=y;
lastdx=dx, lastdy=dy;
}
break;
}
GetSystemTime(&t);
RAND_add(&iMsg, sizeof(iMsg), add_entropy);
RAND_add(&wParam, sizeof(wParam), 0);
RAND_add(&lParam, sizeof(lParam), 0);
RAND_add(&t, sizeof(t), 0);
return (RAND_status());
}
/*****************************************************************************
* Initialisation function for the SSL random generator. Takes the contents
* of the screen as random seed.

View File

@ -91,7 +91,9 @@ const char *RAND_file_name(char *file,int num);
int RAND_status(void);
int RAND_egd(const char *path);
#if defined(WINDOWS) || defined(WIN32)
#include <windows.h>
void RAND_screen(void);
int RAND_event(UINT, WPARAM, LPARAM);
#endif
void ERR_load_RAND_strings(void);