提交 c97b11f4 编写于 作者: U Ulf Möller

New function RAND_event() collects entropy from Windows events.

上级 2501b335
......@@ -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.
......
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册