]> andersk Git - openssh.git/blob - helper.c
6959535d2d7f7c4597cd180271627522349909c2
[openssh.git] / helper.c
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 #include "config.h"
49 #include "helper.h"
50
51 #ifndef HAVE_ARC4RANDOM
52
53 void get_random_bytes(unsigned char *buf, int len);
54
55 static rc4_t *rc4 = NULL;
56
57 unsigned int arc4random(void)
58 {
59         unsigned int r;
60
61         if (rc4 == NULL)
62                 arc4random_stir();
63         
64         rc4_getbytes(rc4, (unsigned char *)&r, sizeof(r));
65         
66         return(r);
67 }
68
69 void arc4random_stir(void)
70 {
71         unsigned char rand_buf[32];
72         
73         if (rc4 == NULL)
74                 rc4 = xmalloc(sizeof(*rc4));
75         
76         get_random_bytes(rand_buf, sizeof(rand_buf));
77         rc4_key(rc4, rand_buf, sizeof(rand_buf));
78 }
79
80 void get_random_bytes(unsigned char *buf, int len)
81 {
82         int urandom;
83         int c;
84         
85         urandom = open("/dev/urandom", O_RDONLY);
86         if (urandom == -1)
87         {
88                 fprintf(stderr, "Couldn't open /dev/urandom: %s", strerror(errno));
89                 exit(1);
90         }
91         
92         c = read(urandom, buf, len);
93         if (c == -1)
94         {
95                 fprintf(stderr, "Couldn't read from /dev/urandom: %s", strerror(errno));
96                 exit(1);
97         }
98
99         if (c != len)
100         {
101                 fprintf(stderr, "Short read from /dev/urandom");
102                 exit(1);
103         }
104 }
105 #endif /* !HAVE_ARC4RANDOM */
106
107 #ifndef HAVE_SETPROCTITLE
108 void setproctitle(const char *fmt, ...)
109 {
110         /* FIXME */
111 }
112 #endif /* !HAVE_SETPROCTITLE */
This page took 0.691224 seconds and 3 git commands to generate.