diff options
Diffstat (limited to 'sys/dev/randomdev/yarrow.h')
-rw-r--r-- | sys/dev/randomdev/yarrow.h | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/sys/dev/randomdev/yarrow.h b/sys/dev/randomdev/yarrow.h index 6fb557e..2b6afcf 100644 --- a/sys/dev/randomdev/yarrow.h +++ b/sys/dev/randomdev/yarrow.h @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2000 Mark Murray + * Copyright (c) 2000 Mark R V Murray * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,17 +26,52 @@ * $FreeBSD$ */ -#define BINS 10 /* t */ -#define KEYSIZE 32 /* 32 bytes == 256 bits */ +#define ENTROPYBIN 256 /* buckets to harvest entropy events */ +#define ENTROPYSOURCE 2 /* entropy sources (actually classes) */ + /* The entropy classes will as follows: */ + /* 0 - Keyboard */ + /* 1 - Mouse */ + /* to start with. More will be added */ + +#define TIMEBIN 16 /* max value for Pt/t */ +#define KEYSIZE 32 /* 32 bytes == 256 bits */ + +#define FAST 0 +#define SLOW 1 + +void random_init(void); +void random_deinit(void); +void random_init_harvester(void (*)(struct timespec *, u_int64_t, u_int, u_int, u_int)); +void random_deinit_harvester(void); /* This is the beasite that needs protecting. It contains all of the * state that we are excited about. + * This is a biiig structure. It may move over to a malloc(9)ed + * replacement. */ -struct state { - u_int64_t counter; /* C */ - BF_KEY key; /* K */ - unsigned char ivec[8]; /* Blowfish internal */ - int gengateinterval; /* Pg */ - int outputblocks; - unsigned char randomstuff[1024]; /* XXX to be done properly */ +struct random_state { + u_int64_t counter; /* C */ + BF_KEY key; /* K */ + int gengateinterval; /* Pg */ + int bins; /* Pt/t */ + u_char ivec[8]; /* Blowfish internal */ + int outputblocks; /* count output blocks for gates */ + u_int slowoverthresh; /* slow pool overthreshhold reseed count */ + struct pool { + struct source { + struct entropy { + struct timespec nanotime; + u_int64_t data; + } entropy[ENTROPYBIN]; /* entropy units - must each + be <= KEYSIZE */ + u_int bits; /* estimated bits of entropy */ + u_int frac; /* fractional bits of entropy + (given as 1024/n) */ + u_int current; /* next insertion point */ + } source[ENTROPYSOURCE]; + u_int thresh; /* pool reseed threshhold */ + } pool[2]; /* pool[0] is fast, pool[1] is slow */ + int which; /* toggle - shows the current insertion pool */ }; + +extern struct random_state random_state; |