OpenCoverage

arc4random.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/openssh/src/openbsd-compat/arc4random.c
Switch to Source codePreprocessed file
LineSourceCount
1-
2-
3-
4-
5-
6-
7-
8-
9static int rs_initialized;-
10static pid_t rs_stir_pid;-
11static chacha_ctx rs;-
12static u_char rs_buf[(16*64)];-
13static size_t rs_have;-
14static size_t rs_count;-
15-
16static __inline void _rs_rekey(u_char *dat, size_t datlen);-
17-
18static __inline void-
19_rs_init(u_char *buf, size_t n)-
20{-
21 if (n < 32 + 8
n < 32 + 8Description
TRUEnever evaluated
FALSEevaluated 3033 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
)
0-3033
22 return;
never executed: return;
0
23 chacha_keysetup(&rs, buf, 32 * 8, 0);-
24 chacha_ivsetup(&rs, buf + 32);-
25}
executed 3033 times by 4 tests: end of block
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
3033
26static void-
27_rs_stir(void)-
28{-
29 u_char rnd[32 + 8];-
30-
31-
32 if (RAND_bytes(rnd, sizeof(rnd)) <= 0
RAND_bytes(rnd...eof(rnd)) <= 0Description
TRUEnever evaluated
FALSEevaluated 11 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
)
0-11
33 fatal("Couldn't obtain random bytes (error 0x%lx)",
never executed: fatal("Couldn't obtain random bytes (error 0x%lx)", (unsigned long)ERR_get_error());
0
34 (unsigned long)ERR_get_error());
never executed: fatal("Couldn't obtain random bytes (error 0x%lx)", (unsigned long)ERR_get_error());
0
35-
36-
37-
38-
39 if (!rs_initialized
!rs_initializedDescription
TRUEevaluated 10 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
FALSEevaluated 1 time by 1 test
Evaluated by:
  • test_sshbuf
) {
1-10
40 rs_initialized = 1;-
41 _rs_init(rnd, sizeof(rnd));-
42 }
executed 10 times by 4 tests: end of block
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
else
10
43 _rs_rekey(rnd, sizeof(rnd));
executed 1 time by 1 test: _rs_rekey(rnd, sizeof(rnd));
Executed by:
  • test_sshbuf
1
44 explicit_bzero(rnd, sizeof(rnd));-
45-
46-
47 rs_have = 0;-
48 memset(rs_buf, 0, (16*64));-
49-
50 rs_count = 1600000;-
51}
executed 11 times by 4 tests: end of block
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
11
52-
53static __inline void-
54_rs_stir_if_needed(size_t len)-
55{-
56 pid_t pid = getpid();-
57-
58 if (rs_count <= len
rs_count <= lenDescription
TRUEevaluated 11 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
FALSEevaluated 739066 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
|| !rs_initialized
!rs_initializedDescription
TRUEnever evaluated
FALSEevaluated 739066 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
|| rs_stir_pid != pid
rs_stir_pid != pidDescription
TRUEnever evaluated
FALSEevaluated 739066 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
) {
0-739066
59 rs_stir_pid = pid;-
60 _rs_stir();-
61 }
executed 11 times by 4 tests: end of block
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
else
11
62 rs_count -= len;
executed 739066 times by 4 tests: rs_count -= len;
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
739066
63}-
64-
65static __inline void-
66_rs_rekey(u_char *dat, size_t datlen)-
67{-
68-
69-
70-
71-
72 chacha_encrypt_bytes(&rs, rs_buf, rs_buf, (16*64));-
73-
74 if (dat
datDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • test_sshbuf
FALSEevaluated 3022 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
) {
1-3022
75 size_t i, m;-
76-
77 m = -
78 (((
(( datlen )<( 32 + 8 ))Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • test_sshbuf
0-1
79 datlen
(( datlen )<( 32 + 8 ))Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • test_sshbuf
0-1
80 )<(
(( datlen )<( 32 + 8 ))Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • test_sshbuf
0-1
81 32 + 8
(( datlen )<( 32 + 8 ))Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • test_sshbuf
0-1
82 ))
(( datlen )<( 32 + 8 ))Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • test_sshbuf
?(
0-1
83 datlen-
84 ):(-
85 32 + 8-
86 ))-
87 ;-
88 for (i = 0; i < m
i < mDescription
TRUEevaluated 40 times by 1 test
Evaluated by:
  • test_sshbuf
FALSEevaluated 1 time by 1 test
Evaluated by:
  • test_sshbuf
; i++)
1-40
89 rs_buf[i] ^= dat[i];
executed 40 times by 1 test: rs_buf[i] ^= dat[i];
Executed by:
  • test_sshbuf
40
90 }
executed 1 time by 1 test: end of block
Executed by:
  • test_sshbuf
1
91-
92 _rs_init(rs_buf, 32 + 8);-
93 memset(rs_buf, 0, 32 + 8);-
94 rs_have = (16*64) - 32 - 8;-
95}
executed 3023 times by 4 tests: end of block
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
3023
96-
97static __inline void-
98_rs_random_buf(void *_buf, size_t n)-
99{-
100 u_char *buf = (u_char *)_buf;-
101 size_t m;-
102-
103 _rs_stir_if_needed(n);-
104 while (n > 0
n > 0Description
TRUEevaluated 27142 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
FALSEevaluated 27008 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
) {
27008-27142
105 if (rs_have > 0
rs_have > 0Description
TRUEevaluated 27018 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
FALSEevaluated 124 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
) {
124-27018
106 m = -
107 (((
(( n )<( rs_have ))Description
TRUEevaluated 26911 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
FALSEevaluated 107 times by 2 tests
Evaluated by:
  • test_kex
  • test_sshbuf
107-26911
108 n
(( n )<( rs_have ))Description
TRUEevaluated 26911 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
FALSEevaluated 107 times by 2 tests
Evaluated by:
  • test_kex
  • test_sshbuf
107-26911
109 )<(
(( n )<( rs_have ))Description
TRUEevaluated 26911 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
FALSEevaluated 107 times by 2 tests
Evaluated by:
  • test_kex
  • test_sshbuf
107-26911
110 rs_have
(( n )<( rs_have ))Description
TRUEevaluated 26911 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
FALSEevaluated 107 times by 2 tests
Evaluated by:
  • test_kex
  • test_sshbuf
107-26911
111 ))
(( n )<( rs_have ))Description
TRUEevaluated 26911 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
FALSEevaluated 107 times by 2 tests
Evaluated by:
  • test_kex
  • test_sshbuf
?(
107-26911
112 n-
113 ):(-
114 rs_have-
115 ))-
116 ;-
117 memcpy(buf, rs_buf + (16*64) - rs_have, m);-
118 memset(rs_buf + (16*64) - rs_have, 0, m);-
119 buf += m;-
120 n -= m;-
121 rs_have -= m;-
122 }
executed 27018 times by 4 tests: end of block
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
27018
123 if (rs_have == 0
rs_have == 0Description
TRUEevaluated 231 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
FALSEevaluated 26911 times by 4 tests
Evaluated by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
)
231-26911
124 _rs_rekey(
executed 231 times by 4 tests: _rs_rekey( ((void *)0) , 0);
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
231
125 ((void *)0)
executed 231 times by 4 tests: _rs_rekey( ((void *)0) , 0);
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
231
126 , 0);
executed 231 times by 4 tests: _rs_rekey( ((void *)0) , 0);
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
231
127 }
executed 27142 times by 4 tests: end of block
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
27142
128}
executed 27008 times by 4 tests: end of block
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
27008
129-
130static __inline void-
131_rs_random_u32(u_int32_t *val)-
132{-
133 _rs_stir_if_needed(sizeof(*val));-
134 if (rs_have < sizeof(*val)
rs_have < sizeof(*val)Description
TRUEevaluated 2791 times by 2 tests
Evaluated by:
  • ssh-keygen
  • test_sshbuf
FALSEevaluated 709278 times by 2 tests
Evaluated by:
  • ssh-keygen
  • test_sshbuf
)
2791-709278
135 _rs_rekey(
executed 2791 times by 2 tests: _rs_rekey( ((void *)0) , 0);
Executed by:
  • ssh-keygen
  • test_sshbuf
2791
136 ((void *)0)
executed 2791 times by 2 tests: _rs_rekey( ((void *)0) , 0);
Executed by:
  • ssh-keygen
  • test_sshbuf
2791
137 , 0);
executed 2791 times by 2 tests: _rs_rekey( ((void *)0) , 0);
Executed by:
  • ssh-keygen
  • test_sshbuf
2791
138 memcpy(val, rs_buf + (16*64) - rs_have, sizeof(*val));-
139 memset(rs_buf + (16*64) - rs_have, 0, sizeof(*val));-
140 rs_have -= sizeof(*val);-
141 return;
executed 712069 times by 2 tests: return;
Executed by:
  • ssh-keygen
  • test_sshbuf
712069
142}-
143-
144void-
145arc4random_stir(void)-
146{-
147 ;-
148 _rs_stir();-
149 ;-
150}
never executed: end of block
0
151-
152void-
153arc4random_addrandom(u_char *dat, int datlen)-
154{-
155 int m;-
156-
157 ;-
158 if (!rs_initialized
!rs_initializedDescription
TRUEnever evaluated
FALSEnever evaluated
)
0
159 _rs_stir();
never executed: _rs_stir();
0
160 while (datlen > 0
datlen > 0Description
TRUEnever evaluated
FALSEnever evaluated
) {
0
161 m = -
162 (((
(( datlen )<( 32 + 8 ))Description
TRUEnever evaluated
FALSEnever evaluated
0
163 datlen
(( datlen )<( 32 + 8 ))Description
TRUEnever evaluated
FALSEnever evaluated
0
164 )<(
(( datlen )<( 32 + 8 ))Description
TRUEnever evaluated
FALSEnever evaluated
0
165 32 + 8
(( datlen )<( 32 + 8 ))Description
TRUEnever evaluated
FALSEnever evaluated
0
166 ))
(( datlen )<( 32 + 8 ))Description
TRUEnever evaluated
FALSEnever evaluated
?(
0
167 datlen-
168 ):(-
169 32 + 8-
170 ))-
171 ;-
172 _rs_rekey(dat, m);-
173 dat += m;-
174 datlen -= m;-
175 }
never executed: end of block
0
176 ;-
177}
never executed: end of block
0
178-
179u_int32_t-
180arc4random(void)-
181{-
182 u_int32_t val;-
183-
184 ;-
185 _rs_random_u32(&val);-
186 ;-
187 return
executed 712069 times by 2 tests: return val;
Executed by:
  • ssh-keygen
  • test_sshbuf
val;
executed 712069 times by 2 tests: return val;
Executed by:
  • ssh-keygen
  • test_sshbuf
712069
188}-
189-
190-
191-
192-
193-
194-
195void-
196arc4random_buf(void *buf, size_t n)-
197{-
198 ;-
199 _rs_random_buf(buf, n);-
200 ;-
201}
executed 27008 times by 4 tests: end of block
Executed by:
  • ssh-keygen
  • test_kex
  • test_sshbuf
  • test_sshkey
27008
202u_int32_t-
203arc4random_uniform(u_int32_t upper_bound)-
204{-
205 u_int32_t r, min;-
206-
207 if (upper_bound < 2
upper_bound < 2Description
TRUEnever evaluated
FALSEevaluated 580289 times by 1 test
Evaluated by:
  • test_sshbuf
)
0-580289
208 return
never executed: return 0;
0;
never executed: return 0;
0
209-
210-
211 min = -upper_bound % upper_bound;-
212-
213-
214-
215-
216-
217-
218-
219 for (;;) {-
220 r = arc4random();-
221 if (r >= min
r >= minDescription
TRUEevaluated 580289 times by 1 test
Evaluated by:
  • test_sshbuf
FALSEnever evaluated
)
0-580289
222 break;
executed 580289 times by 1 test: break;
Executed by:
  • test_sshbuf
580289
223 }
never executed: end of block
0
224-
225 return
executed 580289 times by 1 test: return r % upper_bound;
Executed by:
  • test_sshbuf
r % upper_bound;
executed 580289 times by 1 test: return r % upper_bound;
Executed by:
  • test_sshbuf
580289
226}-
Switch to Source codePreprocessed file

Generated by Squish Coco 4.2.2