1#! /bin/sh
2
3# this program collects some entropy from the system
4# into the file "my_random_file" and outputs the 16-bit
5# Unix 'sum' checksum (seems to be the only portable way
6# to get true entropy with a shell script).
7
8# Apparently, on FreeBSD /dev/random does not block (???), must make sure
9# we really got something rather than nothing.
10
11rnd_tst=no
12
13/bin/rm -f ./my_random_file  2>/dev/null
14
15if test -r "/dev/urandom"; then
16  if test -c "/dev/urandom"; then
17    dd if=/dev/urandom ibs=1 count=4 > my_random_file 2>/dev/null
18    nsum=`cksum ./my_random_file | awk '{print $1 }' | sed 's%^0*%%g' 2>/dev/null`
19    if test x$nsum != x; then
20      rnd_tst=yes
21    fi
22  fi
23fi
24
25if test x$rnd_tst = xno; then
26    if test -r "/dev/srandom"; then
27      if test -c "/dev/srandom"; then
28        dd if=/dev/srandom ibs=1 count=4 > my_random_file 2>/dev/null
29        nsum=`cksum ./my_random_file | awk '{print $1 }' | sed 's%^0*%%g' 2>/dev/null`
30       if test x$nsum != x; then
31          rnd_tst=yes
32       fi
33      fi
34    fi
35fi
36
37if test x$rnd_tst = xno; then
38#
39    touch ./my_random_file
40#
41    if test -r "/usr/ucb/vmstat"; then
42	/usr/ucb/vmstat >> my_random_file 2>/dev/null
43    fi
44    if test -r "/bin/vmstat"; then
45	/bin/vmstat >> my_random_file 2>/dev/null
46    fi
47    if test -r "/sbin/vmstat"; then
48	/sbin/vmstat >> my_random_file 2>/dev/null
49    fi
50    if test -r "/usr/bin/vmstat"; then
51	/usr/bin/vmstat >> my_random_file 2>/dev/null
52    fi
53    if test -r "/usr/sbin/vmstat"; then
54	/usr/sbin/vmstat >> my_random_file 2>/dev/null
55    fi
56    if test -r "/usr/local/bin/vmstat"; then
57	/usr/local/bin/vmstat >> my_random_file 2>/dev/null
58    fi
59#
60    if test -r "/usr/ucb/netstat"; then
61	/usr/ucb/netstat -n >> my_random_file 2>/dev/null
62    fi
63    if test -r "/bin/netstat"; then
64	/bin/netstat  -n >> my_random_file 2>/dev/null
65    fi
66    if test -r "/sbin/netstat"; then
67	/sbin/netstat  -n >> my_random_file 2>/dev/null
68    fi
69    if test -r "/usr/bin/netstat"; then
70	/usr/bin/netstat  -n >> my_random_file 2>/dev/null
71    fi
72    if test -r "/usr/sbin/netstat"; then
73	/usr/sbin/netstat  -n >> my_random_file 2>/dev/null
74    fi
75    if test -r "/usr/local/bin/netstat"; then
76	/usr/local/bin/netstat  -n >> my_random_file 2>/dev/null
77    fi
78#
79#
80    if test -r "/usr/ucb/ps"; then
81	/usr/ucb/ps -ef >> my_random_file 2>/dev/null
82    fi
83    if test -r "/bin/ps"; then
84	/bin/ps  -ef >> my_random_file 2>/dev/null
85    fi
86    if test -r "/sbin/ps"; then
87	/sbin/ps  -ef >> my_random_file 2>/dev/null
88    fi
89    if test -r "/usr/bin/ps"; then
90	/usr/bin/ps  -ef >> my_random_file 2>/dev/null
91    fi
92    if test -r "/usr/sbin/ps"; then
93	/usr/sbin/ps  -ef >> my_random_file 2>/dev/null
94    fi
95    if test -r "/usr/local/bin/ps"; then
96	/usr/local/bin/ps  -ef >> my_random_file 2>/dev/null
97    fi
98#
99#
100    if test -r "/usr/ucb/arp"; then
101	/usr/ucb/arp -a >> my_random_file 2>/dev/null
102    fi
103    if test -r "/bin/arp"; then
104	/bin/arp  -a >> my_random_file 2>/dev/null
105    fi
106    if test -r "/sbin/arp"; then
107	/sbin/arp  -a >> my_random_file 2>/dev/null
108    fi
109    if test -r "/usr/bin/arp"; then
110	/usr/bin/arp  -a >> my_random_file 2>/dev/null
111    fi
112    if test -r "/usr/sbin/arp"; then
113	/usr/sbin/arp  -a >> my_random_file 2>/dev/null
114    fi
115    if test -r "/usr/local/bin/arp"; then
116	/usr/local/bin/arp  -a >> my_random_file 2>/dev/null
117    fi
118#
119#
120    if test -r "/usr/ucb/w"; then
121	/usr/ucb/w  >> my_random_file 2>/dev/null
122    fi
123    if test -r "/bin/w"; then
124	/bin/w   >> my_random_file 2>/dev/null
125    fi
126    if test -r "/sbin/w"; then
127	/sbin/w   >> my_random_file 2>/dev/null
128    fi
129    if test -r "/usr/bin/w"; then
130	/usr/bin/w   >> my_random_file 2>/dev/null
131    fi
132    if test -r "/usr/sbin/w"; then
133	/usr/sbin/w   >> my_random_file 2>/dev/null
134    fi
135    if test -r "/usr/local/bin/w"; then
136	/usr/local/bin/w   >> my_random_file 2>/dev/null
137    fi
138#
139#   Don't use (NFS problems ahead)
140#
141#    if test -r "/usr/ucb/df"; then
142#	/usr/ucb/df  >> my_random_file 2>/dev/null
143#    fi
144#    if test -r "/bin/df"; then
145#	/bin/df  >> my_random_file 2>/dev/null
146#    fi
147#    if test -r "/sbin/df"; then
148#	/sbin/df  >> my_random_file 2>/dev/null
149#    fi
150#    if test -r "/usr/bin/df"; then
151#	/usr/bin/df  >> my_random_file 2>/dev/null
152#    fi
153#    if test -r "/usr/sbin/df"; then
154#	/usr/sbin/df  >> my_random_file 2>/dev/null
155#    fi
156#    if test -r "/usr/local/bin/df"; then
157#	/usr/local/bin/df  >> my_random_file 2>/dev/null
158#    fi
159#
160#
161    if test -r "/usr/ucb/free"; then
162	/usr/ucb/free  >> my_random_file 2>/dev/null
163    fi
164    if test -r "/bin/free"; then
165	/bin/free   >> my_random_file 2>/dev/null
166    fi
167    if test -r "/sbin/free"; then
168	/sbin/free   >> my_random_file 2>/dev/null
169    fi
170    if test -r "/usr/bin/free"; then
171	/usr/bin/free   >> my_random_file 2>/dev/null
172    fi
173    if test -r "/usr/sbin/free"; then
174	/usr/sbin/free   >> my_random_file 2>/dev/null
175    fi
176    if test -r "/usr/local/bin/free"; then
177	/usr/local/bin/free   >> my_random_file 2>/dev/null
178    fi
179#
180#
181    if test -r "/usr/ucb/uptime"; then
182	/usr/ucb/uptime  >> my_random_file 2>/dev/null
183    fi
184    if test -r "/bin/uptime"; then
185	/bin/uptime   >> my_random_file 2>/dev/null
186    fi
187    if test -r "/sbin/uptime"; then
188	/sbin/uptime   >> my_random_file 2>/dev/null
189    fi
190    if test -r "/usr/bin/uptime"; then
191	/usr/bin/uptime   >> my_random_file 2>/dev/null
192    fi
193    if test -r "/usr/sbin/uptime"; then
194	/usr/sbin/uptime   >> my_random_file 2>/dev/null
195    fi
196    if test -r "/usr/local/bin/uptime"; then
197	/usr/local/bin/uptime   >> my_random_file 2>/dev/null
198    fi
199#
200#
201    if test -r "/usr/ucb/procinfo"; then
202	/usr/ucb/procinfo -a >> my_random_file 2>/dev/null
203    fi
204    if test -r "/bin/procinfo"; then
205	/bin/procinfo  -a  >> my_random_file 2>/dev/null
206    fi
207    if test -r "/sbin/procinfo"; then
208	/sbin/procinfo  -a  >> my_random_file 2>/dev/null
209    fi
210    if test -r "/usr/bin/procinfo"; then
211	/usr/bin/procinfo -a   >> my_random_file 2>/dev/null
212    fi
213    if test -r "/usr/sbin/procinfo"; then
214	/usr/sbin/procinfo -a   >> my_random_file 2>/dev/null
215    fi
216    if test -r "/usr/local/bin/procinfo"; then
217	/usr/local/bin/procinfo  -a  >> my_random_file 2>/dev/null
218    fi
219#
220    nsum=`cksum ./my_random_file | awk '{print $1 }' | sed 's%^0*%%g' 2>/dev/null`
221#
222fi
223
224#
225# 'cksum' is more portable than 'sum', but 32 bit
226#
227
228/bin/rm -f ./my_random_file 2>/dev/null
229
230final=`expr $nsum \% 65536`
231echo $final
232
233
234