提交 73986238 编写于 作者: R Richard Levitte

A randomizer for OpenVMS, using the statistics that are easily

reachable.

It's completely untested for now.  To be done in the next few days.
上级 0a647c2b
/* crypto/rand/rand_vms.c */
/* crypto/rand/rand_vms.c -*- mode:C; c-file-style: "eay" -*- */
/* Written by Richard Levitte <richard@levitte.org> for the OpenSSL
* project 2000.
*/
......@@ -61,12 +61,70 @@
#if defined(OPENSSL_SYS_VMS)
/* For now, this does nothing. I'm searching for a good random device,
then we'll see. */
#include <descrip.h>
#include <jpidef.h>
#include <ssdef.h>
#include <starlet.h>
static struct items_data_st
{
short length, code; /* length is amount of bytes */
} items_data[] =
{ { 4, JPI$_BUFIO },
{ 4, JPI$_CPUTIM },
{ 4, JPI$_DIRIO },
{ 8, JPI$_LOGINTIM },
{ 4, JPI$_PAGEFLTS },
{ 4, JPI$_PID },
{ 4, JPI$_WSSIZE },
{ 0, 0 }
};
int RAND_poll(void)
{
return 0;
{
long pid, iosb[2];
int status = 0;
struct
{
short length, code;
long *buffer;
int *retlen;
} item[32], *pitem;
unsigned char data_buffer[256];
short total_length = 0;
struct items_data_st *pitems_data;
pitems_data = items_data;
pitem = item;
/* Setup */
while (pitems_data->length)
{
pitem->length = pitems_data->length;
pitem->code = pitems_data->code;
pitem->buffer = (long *)data_buffer[total_length];
pitem->retlen = 0;
total_length += pitems_data->length;
}
pitem->length = pitem->code = 0;
/*
* Scan through all the processes in the system and add entropy with
* results from the processes that were possible to look at.
* However, view the information as only half trustable.
*/
pid = -1; /* search context */
while ((status = SYS$GETJPIW(8, &pid, 0, item, iosb, 0, 0))
!= SS$_NOMOREPROC)
{
if (status == SS$_NORMAL)
{
RAND_add(data_buffer, total_length, total_length/2);
}
}
SYS$GETTIM(iosb);
RAND_add((unsigned char *)iosb, sizeof(iosb), sizeof(iosb)/2);
return 1;
}
#endif
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册