Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F147278588
D12610.id33763.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D12610.id33763.diff
View Options
Index: dev/random/fortuna.c
===================================================================
--- dev/random/fortuna.c
+++ dev/random/fortuna.c
@@ -1,4 +1,5 @@
/*-
+ * Copyright (c) 2017 W. Dean Freeman
* Copyright (c) 2013-2015 Mark R V Murray
* All rights reserved.
*
@@ -87,7 +88,7 @@
* and too small may compromise initial security but get faster reseeds.
*/
#define RANDOM_FORTUNA_MINPOOLSIZE 16
-#define RANDOM_FORTUNA_MAXPOOLSIZE UINT_MAX
+#define RANDOM_FORTUNA_MAXPOOLSIZE INT_MAX
CTASSERT(RANDOM_FORTUNA_MINPOOLSIZE <= RANDOM_FORTUNA_DEFPOOLSIZE);
CTASSERT(RANDOM_FORTUNA_DEFPOOLSIZE <= RANDOM_FORTUNA_MAXPOOLSIZE);
@@ -232,17 +233,29 @@
* during accumulation/reseeding and reading/regating.
*/
pl = event->he_destination % RANDOM_FORTUNA_NPOOLS;
- randomdev_hash_iterate(&fortuna_state.fs_pool[pl].fsp_hash, event, sizeof(*event));
+ /*
+ * We ignore low entropy static/counter fields towards the end of the
+ * he_event structure in order to increase measurable entropy when
+ * conducting SP800-90B entropy analysis measurements of seed material
+ * fed into PRNG.
+ * -- wdf
+ */
+ KASSERT(event->he_size <= sizeof(event->he_entropy),
+ ("%s: event->he_size: %hhu > sizeof(event->he_entropy): %zu\n",
+ __func__, event->he_size, sizeof(event->he_entropy)));
+ randomdev_hash_iterate(&fortuna_state.fs_pool[pl].fsp_hash,
+ &event->he_somecounter, sizeof(event->he_somecounter));
+ randomdev_hash_iterate(&fortuna_state.fs_pool[pl].fsp_hash,
+ event->he_entropy, event->he_size);
+
/*-
- * Don't wrap the length. Doing this the hard way so as not to wrap at MAXUINT.
- * This is a "saturating" add.
+ * Don't wrap the length. This is a "saturating" add.
* XXX: FIX!!: We don't actually need lengths for anything but fs_pool[0],
* but it's been useful debugging to see them all.
*/
- if (RANDOM_FORTUNA_MAXPOOLSIZE - fortuna_state.fs_pool[pl].fsp_length > event->he_size)
- fortuna_state.fs_pool[pl].fsp_length += event->he_size;
- else
- fortuna_state.fs_pool[pl].fsp_length = RANDOM_FORTUNA_MAXPOOLSIZE;
+ fortuna_state.fs_pool[pl].fsp_length = MIN(RANDOM_FORTUNA_MAXPOOLSIZE,
+ fortuna_state.fs_pool[pl].fsp_length +
+ sizeof(event->he_somecounter) + event->he_size);
explicit_bzero(event, sizeof(*event));
RANDOM_RESEED_UNLOCK();
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Mar 10, 3:45 PM (18 h, 2 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29499504
Default Alt Text
D12610.id33763.diff (2 KB)
Attached To
Mode
D12610: random(4): Discard low entropy inputs
Attached
Detach File
Event Timeline
Log In to Comment