summaryrefslogtreecommitdiffstats
path: root/sys/dev/random/yarrow.h
diff options
context:
space:
mode:
authormarkm <markm@FreeBSD.org>2000-07-07 09:03:59 +0000
committermarkm <markm@FreeBSD.org>2000-07-07 09:03:59 +0000
commit3d0396c734b4176c3f33cb894ffeaeafdcc388f1 (patch)
tree9757babfbdeb7bf00ec479ddd1bd11a7ee9ee854 /sys/dev/random/yarrow.h
parentfffa6e77fa9ce6a51f57d97ca867024975537e8f (diff)
downloadFreeBSD-src-3d0396c734b4176c3f33cb894ffeaeafdcc388f1.zip
FreeBSD-src-3d0396c734b4176c3f33cb894ffeaeafdcc388f1.tar.gz
Add entropy gathering code. This will work whether the module is
compiled in or loaded.
Diffstat (limited to 'sys/dev/random/yarrow.h')
-rw-r--r--sys/dev/random/yarrow.h55
1 files changed, 45 insertions, 10 deletions
diff --git a/sys/dev/random/yarrow.h b/sys/dev/random/yarrow.h
index 6fb557e..2b6afcf 100644
--- a/sys/dev/random/yarrow.h
+++ b/sys/dev/random/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;
OpenPOWER on IntegriCloud