summaryrefslogtreecommitdiff
path: root/helper.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>1999-10-27 13:42:43 +1000
committerDamien Miller <djm@mindrot.org>1999-10-27 13:42:43 +1000
commitd4a8b7e34dd619a4debf9a206c81db26d1402ea6 (patch)
treea47d770a2f790f40d18b0982d4e55fa7cfb1fa3b /helper.c
Initial revision
Diffstat (limited to 'helper.c')
-rw-r--r--helper.c108
1 files changed, 108 insertions, 0 deletions
diff --git a/helper.c b/helper.c
new file mode 100644
index 000000000..3b0402ecf
--- /dev/null
+++ b/helper.c
@@ -0,0 +1,108 @@
1/*
2**
3** OpenBSD emulation routines
4**
5** Damien Miller <djm@ibs.com.au>
6**
7** Copyright 1999 Internet Business Solutions
8**
9** Permission is hereby granted, free of charge, to any person
10** obtaining a copy of this software and associated documentation
11** files (the "Software"), to deal in the Software without
12** restriction, including without limitation the rights to use, copy,
13** modify, merge, publish, distribute, sublicense, and/or sell copies
14** of the Software, and to permit persons to whom the Software is
15** furnished to do so, subject to the following conditions:
16**
17** The above copyright notice and this permission notice shall be
18** included in all copies or substantial portions of the Software.
19**
20** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
21** KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
22** WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
23** AND NONINFRINGEMENT. IN NO EVENT SHALL DAMIEN MILLER OR INTERNET
24** BUSINESS SOLUTIONS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
26** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
27** OR OTHER DEALINGS IN THE SOFTWARE.
28**
29** Except as contained in this notice, the name of Internet Business
30** Solutions shall not be used in advertising or otherwise to promote
31** the sale, use or other dealings in this Software without prior
32** written authorization from Internet Business Solutions.
33**
34*/
35
36#include <stdio.h>
37#include <stdlib.h>
38#include <string.h>
39#include <errno.h>
40#include <unistd.h>
41
42#include <sys/types.h>
43#include <sys/stat.h>
44#include <fcntl.h>
45
46#include "rc4.h"
47#include "xmalloc.h"
48
49#include "helper.h"
50
51void get_random_bytes(unsigned char *buf, int len);
52
53static rc4_t *rc4 = NULL;
54
55void setproctitle(const char *fmt, ...)
56{
57 /* FIXME */
58}
59
60unsigned char arc4random(void)
61{
62 unsigned char r;
63
64 if (rc4 == NULL)
65 arc4random_stir();
66
67 rc4_getbytes(rc4, &r, 1);
68
69 return(r);
70}
71
72void arc4random_stir(void)
73{
74 unsigned char rand_buf[32];
75
76 if (rc4 == NULL)
77 rc4 = xmalloc(sizeof(*rc4));
78
79 get_random_bytes(rand_buf, sizeof(rand_buf));
80 rc4_key(rc4, rand_buf, sizeof(rand_buf));
81}
82
83void get_random_bytes(unsigned char *buf, int len)
84{
85 int urandom;
86 int c;
87
88 urandom = open("/dev/urandom", O_RDONLY);
89 if (urandom == -1)
90 {
91 fprintf(stderr, "Couldn't open /dev/urandom: %s", strerror(errno));
92 exit(1);
93 }
94
95 c = read(urandom, buf, len);
96 if (c == -1)
97 {
98 fprintf(stderr, "Couldn't read from /dev/urandom: %s", strerror(errno));
99 exit(1);
100 }
101
102 if (c != len)
103 {
104 fprintf(stderr, "Short read from /dev/urandom");
105 exit(1);
106 }
107}
108