summaryrefslogtreecommitdiff
path: root/src/krng-add-entropy.c
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 /src/krng-add-entropy.c
parentb15a15ec684dc95b684b926d4cb854ed2b502621 (diff)
re-add command krng-add-entropy
Diffstat (limited to 'src/krng-add-entropy.c')
-rw-r--r--src/krng-add-entropy.c49
1 files changed, 49 insertions, 0 deletions
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}