summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2020-05-06 12:20:49 -0400
committerAndrew Cady <d@jerkface.net>2020-05-06 12:21:26 -0400
commit9022ce6954f78b8a33122b27400706e82e388459 (patch)
tree7e37189145bdf70899601bd3600f9e1df9681fbc
parentb15a15ec684dc95b684b926d4cb854ed2b502621 (diff)
re-add command krng-add-entropy
-rw-r--r--.gitignore1
-rw-r--r--Makefile4
-rw-r--r--src/krng-add-entropy.c49
3 files changed, 53 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index b649601..7484342 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,4 @@ rootfs/_build/
40stack.yaml.lock 40stack.yaml.lock
41samizdat.iso 41samizdat.iso
42TEST_CHILD.*.log 42TEST_CHILD.*.log
43krng-add-entropy
diff --git a/Makefile b/Makefile
index 80f3ab3..9398787 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
1prefix?=/usr/local 1prefix?=/usr/local
2 2
3cc_files=wait_for_files samizdat-pinentry 3cc_files=wait_for_files samizdat-pinentry krng-add-entropy
4cpp_files=dynmenu 4cpp_files=dynmenu
5 5
6compiled_programs=${cc_files} ${cpp_files} 6compiled_programs=${cc_files} ${cpp_files}
@@ -28,6 +28,8 @@ dynmenu: src/dynmenu.cpp | build-deps
28 $(CXX) $(CFLAGS) $< -o $@ -lcurses 28 $(CXX) $(CFLAGS) $< -o $@ -lcurses
29samizdat-pinentry: src/samizdat-pinentry.c | build-deps 29samizdat-pinentry: src/samizdat-pinentry.c | build-deps
30 $(CC) $(CFLAGS) $< -o $@ -lcurses 30 $(CC) $(CFLAGS) $< -o $@ -lcurses
31krng-add-entropy: src/krng-add-entropy.c | build-deps
32 $(CC) $(CFLAGS) $< -o $@
31wait_for_files: src/wait_for_files.c | build-deps 33wait_for_files: src/wait_for_files.c | build-deps
32 $(CC) $(CFLAGS) $< -o $@ 34 $(CC) $(CFLAGS) $< -o $@
33 35
diff --git a/src/krng-add-entropy.c b/src/krng-add-entropy.c
new file mode 100644
index 0000000..fc81d29
--- /dev/null
+++ b/src/krng-add-entropy.c
@@ -0,0 +1,49 @@
1#include <sys/types.h>
2#include <sys/stat.h>
3#include <fcntl.h>
4#include <sys/ioctl.h>
5#include <stdio.h>
6#include <stdlib.h>
7#include <asm/types.h>
8#include <linux/random.h>
9#include <errno.h>
10#include <error.h>
11#include <string.h>
12
13char *program_name;
14void usage()
15{
16 error(1, 0, "usage: %s [--bytes] <bits>", program_name);
17}
18
19int main(int argc, char **argv)
20{
21 argc--, program_name = *argv++;
22 int multiplier = 1;
23 int bits;
24 while (argc > 1) {
25 if (!strcmp(*argv, "--bytes")) {
26 multiplier = 8;
27 } else {
28 usage();
29 }
30 argc--, argv++;
31 }
32 if ((argc != 1) || (bits = multiplier * atoi(*argv)) <= 0)
33 usage();
34
35 struct rand_pool_info *output;
36 int fd = open("/dev/random", O_WRONLY);
37 if (fd < 0)
38 error(1, errno, "opening /dev/random");
39
40 output = (struct rand_pool_info *) malloc(sizeof(struct rand_pool_info));
41 output -> entropy_count = bits;
42 output -> buf_size = 0;
43
44 int r = ioctl(fd, RNDADDENTROPY, output);
45 if (r < 0)
46 error(1, errno, "ioctl(RNDADDENTROPY)");
47
48 return 0;
49}