summaryrefslogtreecommitdiffstats
path: root/share/examples
diff options
context:
space:
mode:
authormarkm <markm@FreeBSD.org>2013-10-04 06:55:06 +0000
committermarkm <markm@FreeBSD.org>2013-10-04 06:55:06 +0000
commitb28953010e0b4d9208d7f9dcc8933e6d56f16ce3 (patch)
treec4e072a0e767bef2275921e88362a12f29adf3c2 /share/examples
parent4655fd3ead80b03639e139ad19759e0307eb10df (diff)
downloadFreeBSD-src-b28953010e0b4d9208d7f9dcc8933e6d56f16ce3.zip
FreeBSD-src-b28953010e0b4d9208d7f9dcc8933e6d56f16ce3.tar.gz
Snapshot. This passes the build test, but has not yet been finished or debugged.
Contains: * Refactor the hardware RNG CPU instruction sources to feed into the software mixer. This is unfinished. The actual harvesting needs to be sorted out. Modified by me (see below). * Remove 'frac' parameter from random_harvest(). This was never used and adds extra code for no good reason. * Remove device write entropy harvesting. This provided a weak attack vector, was not very good at bootstrapping the device. To follow will be a replacement explicit reseed knob. * Separate out all the RANDOM_PURE sources into separate harvest entities. This adds some secuity in the case where more than one is present. * Review all the code and fix anything obviously messy or inconsistent. Address som review concerns while I'm here, like rename the pseudo-rng to 'dummy'. Submitted by: Arthur Mesh <arthurmesh@gmail.com> (the first item)
Diffstat (limited to 'share/examples')
-rw-r--r--share/examples/kld/random_adaptor/random_adaptor_example.c41
1 files changed, 24 insertions, 17 deletions
diff --git a/share/examples/kld/random_adaptor/random_adaptor_example.c b/share/examples/kld/random_adaptor/random_adaptor_example.c
index c0ab10a..da588a8 100644
--- a/share/examples/kld/random_adaptor/random_adaptor_example.c
+++ b/share/examples/kld/random_adaptor/random_adaptor_example.c
@@ -30,32 +30,29 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
+#include <sys/lock.h>
#include <sys/module.h>
-#include <sys/selinfo.h>
+#include <sys/random.h>
#include <sys/systm.h>
+#include <dev/random/live_entropy_sources.h>
#include <dev/random/random_adaptors.h>
#include <dev/random/randomdev.h>
-#define RNG_NAME "example"
-
static int random_example_read(void *, int);
struct random_adaptor random_example = {
.ident = "Example RNG",
- .init = (random_init_func_t *)random_null_func,
- .deinit = (random_deinit_func_t *)random_null_func,
+ .source = RANDOM_PURE_BOGUS, /* Make sure this is in
+ * sys/random.h and is unique */
.read = random_example_read,
- .write = (random_write_func_t *)random_null_func,
- .reseed = (random_reseed_func_t *)random_null_func,
- .seeded = 1,
};
/*
* Used under the license provided @ http://xkcd.com/221/
* http://creativecommons.org/licenses/by-nc/2.5/
*/
-static u_char
+static uint8_t
getRandomNumber(void)
{
return 4; /* chosen by fair dice roll, guaranteed to be random */
@@ -64,14 +61,13 @@ getRandomNumber(void)
static int
random_example_read(void *buf, int c)
{
- u_char *b;
+ uint8_t *b;
int count;
b = buf;
- for (count = 0; count < c; count++) {
+ for (count = 0; count < c; count++)
b[count] = getRandomNumber();
- }
printf("returning %d bytes of pure randomness\n", c);
return (c);
@@ -80,15 +76,26 @@ random_example_read(void *buf, int c)
static int
random_example_modevent(module_t mod, int type, void *unused)
{
+ int error = 0;
switch (type) {
case MOD_LOAD:
- random_adaptor_register(RNG_NAME, &random_example);
- EVENTHANDLER_INVOKE(random_adaptor_attach, &random_example);
- return (0);
+ live_entropy_source_register(&random_example);
+ break;
+
+ case MOD_UNLOAD:
+ live_entropy_source_deregister(&random_example);
+ break;
+
+ case MOD_SHUTDOWN:
+ break;
+
+ default:
+ error = EOPNOTSUPP;
+ break;
}
- return (EINVAL);
+ return (error);
}
-RANDOM_ADAPTOR_MODULE(random_example, random_example_modevent, 1);
+LIVE_ENTROPY_SRC_MODULE(live_entropy_source_example, random_example_modevent, 1);
OpenPOWER on IntegriCloud