Absolute File Name: | /home/opencoverage/opencoverage/guest-scripts/libressl/src/tls/tls_server.c |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||||||||
2 | - | |||||||||||||||||||||||||
3 | - | |||||||||||||||||||||||||
4 | - | |||||||||||||||||||||||||
5 | struct tls * | - | ||||||||||||||||||||||||
6 | tls_server(void) | - | ||||||||||||||||||||||||
7 | { | - | ||||||||||||||||||||||||
8 | struct tls *ctx; | - | ||||||||||||||||||||||||
9 | - | |||||||||||||||||||||||||
10 | if (tls_init() == -1
| 0-2 | ||||||||||||||||||||||||
11 | return never executed: (return ( ((void *)0) ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
12 | ((void *)0) never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
13 | ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
14 | - | |||||||||||||||||||||||||
15 | if ((
| 0-2 | ||||||||||||||||||||||||
16 | ((void *)0)
| 0-2 | ||||||||||||||||||||||||
17 | ) | - | ||||||||||||||||||||||||
18 | return never executed: (return ( ((void *)0) ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
19 | ((void *)0) never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
20 | ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
21 | - | |||||||||||||||||||||||||
22 | ctx->flags |= (1 << 1); | - | ||||||||||||||||||||||||
23 | - | |||||||||||||||||||||||||
24 | return executed 2 times by 1 test: (ctx);return (ctx); Executed by:
executed 2 times by 1 test: return (ctx); Executed by:
| 2 | ||||||||||||||||||||||||
25 | } | - | ||||||||||||||||||||||||
26 | - | |||||||||||||||||||||||||
27 | struct tls * | - | ||||||||||||||||||||||||
28 | tls_server_conn(struct tls *ctx) | - | ||||||||||||||||||||||||
29 | { | - | ||||||||||||||||||||||||
30 | struct tls *conn_ctx; | - | ||||||||||||||||||||||||
31 | - | |||||||||||||||||||||||||
32 | if ((
| 0-4 | ||||||||||||||||||||||||
33 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
34 | ) | - | ||||||||||||||||||||||||
35 | return never executed: (return ( ((void *)0) ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
36 | ((void *)0) never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
37 | ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
38 | - | |||||||||||||||||||||||||
39 | conn_ctx->flags |= (1 << 2); | - | ||||||||||||||||||||||||
40 | - | |||||||||||||||||||||||||
41 | ctx->config->refcount++; | - | ||||||||||||||||||||||||
42 | - | |||||||||||||||||||||||||
43 | conn_ctx->config = ctx->config; | - | ||||||||||||||||||||||||
44 | conn_ctx->keypair = ctx->config->keypair; | - | ||||||||||||||||||||||||
45 | - | |||||||||||||||||||||||||
46 | return executed 4 times by 1 test: (conn_ctx);return (conn_ctx); Executed by:
executed 4 times by 1 test: return (conn_ctx); Executed by:
| 4 | ||||||||||||||||||||||||
47 | } | - | ||||||||||||||||||||||||
48 | - | |||||||||||||||||||||||||
49 | static int | - | ||||||||||||||||||||||||
50 | tls_server_alpn_cb(SSL *ssl, const unsigned char **out, unsigned char *outlen, | - | ||||||||||||||||||||||||
51 | const unsigned char *in, unsigned int inlen, void *arg) | - | ||||||||||||||||||||||||
52 | { | - | ||||||||||||||||||||||||
53 | struct tls *ctx = arg; | - | ||||||||||||||||||||||||
54 | - | |||||||||||||||||||||||||
55 | if (SSL_select_next_proto((unsigned char**)out, outlen,
| 0 | ||||||||||||||||||||||||
56 | ctx->config->alpn, ctx->config->alpn_len, in, inlen) ==
| 0 | ||||||||||||||||||||||||
57 | 1
| 0 | ||||||||||||||||||||||||
58 | return never executed: (0);return (0); never executed: return (0); | 0 | ||||||||||||||||||||||||
59 | - | |||||||||||||||||||||||||
60 | return never executed: (3);return (3); never executed: return (3); | 0 | ||||||||||||||||||||||||
61 | } | - | ||||||||||||||||||||||||
62 | - | |||||||||||||||||||||||||
63 | static int | - | ||||||||||||||||||||||||
64 | tls_servername_cb(SSL *ssl, int *al, void *arg) | - | ||||||||||||||||||||||||
65 | { | - | ||||||||||||||||||||||||
66 | struct tls *ctx = (struct tls *)arg; | - | ||||||||||||||||||||||||
67 | struct tls_sni_ctx *sni_ctx; | - | ||||||||||||||||||||||||
68 | union tls_addr addrbuf; | - | ||||||||||||||||||||||||
69 | struct tls *conn_ctx; | - | ||||||||||||||||||||||||
70 | const char *name; | - | ||||||||||||||||||||||||
71 | int match; | - | ||||||||||||||||||||||||
72 | - | |||||||||||||||||||||||||
73 | if ((
| 0-4 | ||||||||||||||||||||||||
74 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
75 | ) | - | ||||||||||||||||||||||||
76 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
77 | - | |||||||||||||||||||||||||
78 | if ((
| 0-4 | ||||||||||||||||||||||||
79 |
| 0-4 | ||||||||||||||||||||||||
80 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
81 | ) { | - | ||||||||||||||||||||||||
82 | - | |||||||||||||||||||||||||
83 | - | |||||||||||||||||||||||||
84 | - | |||||||||||||||||||||||||
85 | - | |||||||||||||||||||||||||
86 | return never executed: (3);return (3); never executed: return (3); | 0 | ||||||||||||||||||||||||
87 | } | - | ||||||||||||||||||||||||
88 | if (inet_pton(
| 0-4 | ||||||||||||||||||||||||
89 | 2
| 0-4 | ||||||||||||||||||||||||
90 | , name, &addrbuf) == 1
| 0-4 | ||||||||||||||||||||||||
91 | inet_pton(
| 0-4 | ||||||||||||||||||||||||
92 | 10
| 0-4 | ||||||||||||||||||||||||
93 | , name, &addrbuf) == 1
| 0-4 | ||||||||||||||||||||||||
94 | return never executed: (3);return (3); never executed: return (3); | 0 | ||||||||||||||||||||||||
95 | - | |||||||||||||||||||||||||
96 | free((char *)conn_ctx->servername); | - | ||||||||||||||||||||||||
97 | if ((
| 0-4 | ||||||||||||||||||||||||
98 | (__extension__ (__builtin_constant_p (
| 0-4 | ||||||||||||||||||||||||
99 | name
| 0-4 | ||||||||||||||||||||||||
100 | )
| 0-4 | ||||||||||||||||||||||||
101 | name
| 0-4 | ||||||||||||||||||||||||
102 | ) + 1) - (size_t)(const void *)(
| 0-4 | ||||||||||||||||||||||||
103 | name
| 0-4 | ||||||||||||||||||||||||
104 | ) == 1)
| 0-4 | ||||||||||||||||||||||||
105 | name
| 0-4 | ||||||||||||||||||||||||
106 | ))[0] == '\0'
| 0-4 | ||||||||||||||||||||||||
107 | name
| 0-4 | ||||||||||||||||||||||||
108 | ) + 1; char *__retval = (char *) malloc (__len); if (__retval != ((void *)0)
never executed: __retval = (char *) memcpy (__retval, name , __len);
| 0-4 | ||||||||||||||||||||||||
109 | name
never executed: __retval = (char *) memcpy (__retval, name , __len); | 0-4 | ||||||||||||||||||||||||
110 | , __len);
never executed: __retval; })) : __strdup (__retval = (char *) memcpy (__retval, name , __len);
| 0-4 | ||||||||||||||||||||||||
111 | name
| 0-4 | ||||||||||||||||||||||||
112 | )))
| 0-4 | ||||||||||||||||||||||||
113 | ) ==
| 0-4 | ||||||||||||||||||||||||
114 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
115 | ) | - | ||||||||||||||||||||||||
116 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
117 | - | |||||||||||||||||||||||||
118 | - | |||||||||||||||||||||||||
119 | for (sni_ctx = ctx->sni_ctx; sni_ctx !=
| 0-4 | ||||||||||||||||||||||||
120 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
121 | ; sni_ctx = sni_ctx->next) { | - | ||||||||||||||||||||||||
122 | if (tls_check_name(ctx, sni_ctx->ssl_cert, name,
| 0 | ||||||||||||||||||||||||
123 | &match) == -1
| 0 | ||||||||||||||||||||||||
124 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
125 | if (match
| 0 | ||||||||||||||||||||||||
126 | conn_ctx->keypair = sni_ctx->keypair; | - | ||||||||||||||||||||||||
127 | SSL_set_SSL_CTX(conn_ctx->ssl_conn, sni_ctx->ssl_ctx); | - | ||||||||||||||||||||||||
128 | return never executed: (0);return (0); never executed: return (0); | 0 | ||||||||||||||||||||||||
129 | } | - | ||||||||||||||||||||||||
130 | } never executed: end of block | 0 | ||||||||||||||||||||||||
131 | - | |||||||||||||||||||||||||
132 | - | |||||||||||||||||||||||||
133 | return executed 4 times by 1 test: (0);return (0); Executed by:
executed 4 times by 1 test: return (0); Executed by:
| 4 | ||||||||||||||||||||||||
134 | - | |||||||||||||||||||||||||
135 | err: | - | ||||||||||||||||||||||||
136 | - | |||||||||||||||||||||||||
137 | - | |||||||||||||||||||||||||
138 | - | |||||||||||||||||||||||||
139 | - | |||||||||||||||||||||||||
140 | *al = 80; | - | ||||||||||||||||||||||||
141 | return never executed: (2);return (2); never executed: return (2); | 0 | ||||||||||||||||||||||||
142 | } | - | ||||||||||||||||||||||||
143 | - | |||||||||||||||||||||||||
144 | static struct tls_ticket_key * | - | ||||||||||||||||||||||||
145 | tls_server_ticket_key(struct tls_config *config, unsigned char *keyname) | - | ||||||||||||||||||||||||
146 | { | - | ||||||||||||||||||||||||
147 | struct tls_ticket_key *key = | - | ||||||||||||||||||||||||
148 | ((void *)0) | - | ||||||||||||||||||||||||
149 | ; | - | ||||||||||||||||||||||||
150 | time_t now; | - | ||||||||||||||||||||||||
151 | int i; | - | ||||||||||||||||||||||||
152 | - | |||||||||||||||||||||||||
153 | now = time( | - | ||||||||||||||||||||||||
154 | ((void *)0) | - | ||||||||||||||||||||||||
155 | ); | - | ||||||||||||||||||||||||
156 | if (config->ticket_autorekey == 1
| 0 | ||||||||||||||||||||||||
157 | if (now - 3 * (config->session_lifetime / 4) >
| 0 | ||||||||||||||||||||||||
158 | config->ticket_keys[0].time
| 0 | ||||||||||||||||||||||||
159 | if (tls_config_ticket_autorekey(config) == -1
| 0 | ||||||||||||||||||||||||
160 | return never executed: (return ( ((void *)0) ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
161 | ((void *)0) never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
162 | ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
163 | } never executed: end of block | 0 | ||||||||||||||||||||||||
164 | } never executed: end of block | 0 | ||||||||||||||||||||||||
165 | for (i = 0; i < 4
| 0 | ||||||||||||||||||||||||
166 | struct tls_ticket_key *tk = &config->ticket_keys[i]; | - | ||||||||||||||||||||||||
167 | if (now - config->session_lifetime > tk->time
| 0 | ||||||||||||||||||||||||
168 | continue; never executed: continue; | 0 | ||||||||||||||||||||||||
169 | if (keyname ==
| 0 | ||||||||||||||||||||||||
170 | ((void *)0)
| 0 | ||||||||||||||||||||||||
171 | || timingsafe_memcmp(keyname,
| 0 | ||||||||||||||||||||||||
172 | tk->key_name, sizeof(tk->key_name)) == 0
| 0 | ||||||||||||||||||||||||
173 | key = tk; | - | ||||||||||||||||||||||||
174 | break; never executed: break; | 0 | ||||||||||||||||||||||||
175 | } | - | ||||||||||||||||||||||||
176 | } never executed: end of block | 0 | ||||||||||||||||||||||||
177 | return never executed: (key);return (key); never executed: return (key); | 0 | ||||||||||||||||||||||||
178 | } | - | ||||||||||||||||||||||||
179 | - | |||||||||||||||||||||||||
180 | static int | - | ||||||||||||||||||||||||
181 | tls_server_ticket_cb(SSL *ssl, unsigned char *keyname, unsigned char *iv, | - | ||||||||||||||||||||||||
182 | EVP_CIPHER_CTX *ctx, HMAC_CTX *hctx, int mode) | - | ||||||||||||||||||||||||
183 | { | - | ||||||||||||||||||||||||
184 | struct tls_ticket_key *key; | - | ||||||||||||||||||||||||
185 | struct tls *tls_ctx; | - | ||||||||||||||||||||||||
186 | - | |||||||||||||||||||||||||
187 | if ((
| 0 | ||||||||||||||||||||||||
188 | ((void *)0)
| 0 | ||||||||||||||||||||||||
189 | ) | - | ||||||||||||||||||||||||
190 | return never executed: (-1);return (-1); never executed: return (-1); | 0 | ||||||||||||||||||||||||
191 | - | |||||||||||||||||||||||||
192 | if (mode == 1
| 0 | ||||||||||||||||||||||||
193 | - | |||||||||||||||||||||||||
194 | key = tls_server_ticket_key(tls_ctx->config, | - | ||||||||||||||||||||||||
195 | ((void *)0) | - | ||||||||||||||||||||||||
196 | ); | - | ||||||||||||||||||||||||
197 | if (key ==
| 0 | ||||||||||||||||||||||||
198 | ((void *)0)
| 0 | ||||||||||||||||||||||||
199 | ) { | - | ||||||||||||||||||||||||
200 | tls_set_errorx(tls_ctx, "no valid ticket key found"); | - | ||||||||||||||||||||||||
201 | return never executed: (-1);return (-1); never executed: return (-1); | 0 | ||||||||||||||||||||||||
202 | } | - | ||||||||||||||||||||||||
203 | - | |||||||||||||||||||||||||
204 | memcpy(keyname, key->key_name, sizeof(key->key_name)); | - | ||||||||||||||||||||||||
205 | arc4random_buf(iv, 16); | - | ||||||||||||||||||||||||
206 | EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), | - | ||||||||||||||||||||||||
207 | ((void *)0) | - | ||||||||||||||||||||||||
208 | , | - | ||||||||||||||||||||||||
209 | key->aes_key, iv); | - | ||||||||||||||||||||||||
210 | HMAC_Init_ex(hctx, key->hmac_key, sizeof(key->hmac_key), | - | ||||||||||||||||||||||||
211 | EVP_sha256(), | - | ||||||||||||||||||||||||
212 | ((void *)0) | - | ||||||||||||||||||||||||
213 | ); | - | ||||||||||||||||||||||||
214 | return never executed: (0);return (0); never executed: return (0); | 0 | ||||||||||||||||||||||||
215 | } else { | - | ||||||||||||||||||||||||
216 | - | |||||||||||||||||||||||||
217 | key = tls_server_ticket_key(tls_ctx->config, keyname); | - | ||||||||||||||||||||||||
218 | if (key ==
| 0 | ||||||||||||||||||||||||
219 | ((void *)0)
| 0 | ||||||||||||||||||||||||
220 | ) | - | ||||||||||||||||||||||||
221 | return never executed: (0);return (0); never executed: return (0); | 0 | ||||||||||||||||||||||||
222 | - | |||||||||||||||||||||||||
223 | EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), | - | ||||||||||||||||||||||||
224 | ((void *)0) | - | ||||||||||||||||||||||||
225 | , | - | ||||||||||||||||||||||||
226 | key->aes_key, iv); | - | ||||||||||||||||||||||||
227 | HMAC_Init_ex(hctx, key->hmac_key, sizeof(key->hmac_key), | - | ||||||||||||||||||||||||
228 | EVP_sha256(), | - | ||||||||||||||||||||||||
229 | ((void *)0) | - | ||||||||||||||||||||||||
230 | ); | - | ||||||||||||||||||||||||
231 | - | |||||||||||||||||||||||||
232 | - | |||||||||||||||||||||||||
233 | if (key != &tls_ctx->config->ticket_keys[0]
| 0 | ||||||||||||||||||||||||
234 | return never executed: (2);return (2); never executed: return (2); | 0 | ||||||||||||||||||||||||
235 | return never executed: (1);return (1); never executed: return (1); | 0 | ||||||||||||||||||||||||
236 | } | - | ||||||||||||||||||||||||
237 | } | - | ||||||||||||||||||||||||
238 | - | |||||||||||||||||||||||||
239 | static int | - | ||||||||||||||||||||||||
240 | tls_configure_server_ssl(struct tls *ctx, SSL_CTX **ssl_ctx, | - | ||||||||||||||||||||||||
241 | struct tls_keypair *keypair) | - | ||||||||||||||||||||||||
242 | { | - | ||||||||||||||||||||||||
243 | SSL_CTX_free(*ssl_ctx); | - | ||||||||||||||||||||||||
244 | - | |||||||||||||||||||||||||
245 | if ((*
| 0-4 | ||||||||||||||||||||||||
246 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
247 | ) { | - | ||||||||||||||||||||||||
248 | tls_set_errorx(ctx, "ssl context failure"); | - | ||||||||||||||||||||||||
249 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
250 | } | - | ||||||||||||||||||||||||
251 | - | |||||||||||||||||||||||||
252 | SSL_CTX_ctrl((*ssl_ctx),32,(0x00020000L), | - | ||||||||||||||||||||||||
253 | ((void *)0) | - | ||||||||||||||||||||||||
254 | ); | - | ||||||||||||||||||||||||
255 | - | |||||||||||||||||||||||||
256 | if (SSL_CTX_callback_ctrl(*ssl_ctx,53,(void (*)(void))tls_servername_cb)
| 0-4 | ||||||||||||||||||||||||
257 | != 1
| 0-4 | ||||||||||||||||||||||||
258 | tls_set_error(ctx, "failed to set servername callback"); | - | ||||||||||||||||||||||||
259 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
260 | } | - | ||||||||||||||||||||||||
261 | if (SSL_CTX_ctrl(*ssl_ctx,54,0, (void *)ctx) != 1
| 0-4 | ||||||||||||||||||||||||
262 | tls_set_error(ctx, "failed to set servername callback arg"); | - | ||||||||||||||||||||||||
263 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
264 | } | - | ||||||||||||||||||||||||
265 | - | |||||||||||||||||||||||||
266 | if (tls_configure_ssl(ctx, *ssl_ctx) != 0
| 0-4 | ||||||||||||||||||||||||
267 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
268 | if (tls_configure_ssl_keypair(ctx, *ssl_ctx, keypair, 1) != 0
| 0-4 | ||||||||||||||||||||||||
269 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
270 | if (ctx->config->verify_client != 0
| 0-4 | ||||||||||||||||||||||||
271 | int verify = 0x01; | - | ||||||||||||||||||||||||
272 | if (ctx->config->verify_client == 1
| 0 | ||||||||||||||||||||||||
273 | verify |= 0x02; never executed: verify |= 0x02; | 0 | ||||||||||||||||||||||||
274 | if (tls_configure_ssl_verify(ctx, *ssl_ctx, verify) == -1
| 0 | ||||||||||||||||||||||||
275 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
276 | } never executed: end of block | 0 | ||||||||||||||||||||||||
277 | - | |||||||||||||||||||||||||
278 | if (ctx->config->alpn !=
| 0-4 | ||||||||||||||||||||||||
279 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
280 | ) | - | ||||||||||||||||||||||||
281 | SSL_CTX_set_alpn_select_cb(*ssl_ctx, tls_server_alpn_cb, never executed: SSL_CTX_set_alpn_select_cb(*ssl_ctx, tls_server_alpn_cb, ctx); | 0 | ||||||||||||||||||||||||
282 | ctx); never executed: SSL_CTX_set_alpn_select_cb(*ssl_ctx, tls_server_alpn_cb, ctx); | 0 | ||||||||||||||||||||||||
283 | - | |||||||||||||||||||||||||
284 | if (ctx->config->dheparams == -1
| 0-4 | ||||||||||||||||||||||||
285 | SSL_CTX_ctrl(*ssl_ctx,118,1, never executed: SSL_CTX_ctrl(*ssl_ctx,118,1, ((void *)0) ); | 0 | ||||||||||||||||||||||||
286 | ((void *)0) never executed: SSL_CTX_ctrl(*ssl_ctx,118,1, ((void *)0) ); | 0 | ||||||||||||||||||||||||
287 | ); never executed: SSL_CTX_ctrl(*ssl_ctx,118,1, ((void *)0) ); | 0 | ||||||||||||||||||||||||
288 | else if (ctx->config->dheparams == 1024
| 0-4 | ||||||||||||||||||||||||
289 | SSL_CTX_ctrl(*ssl_ctx,118,2, never executed: SSL_CTX_ctrl(*ssl_ctx,118,2, ((void *)0) ); | 0 | ||||||||||||||||||||||||
290 | ((void *)0) never executed: SSL_CTX_ctrl(*ssl_ctx,118,2, ((void *)0) ); | 0 | ||||||||||||||||||||||||
291 | ); never executed: SSL_CTX_ctrl(*ssl_ctx,118,2, ((void *)0) ); | 0 | ||||||||||||||||||||||||
292 | - | |||||||||||||||||||||||||
293 | if (ctx->config->ecdhecurves !=
| 0-4 | ||||||||||||||||||||||||
294 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
295 | ) { | - | ||||||||||||||||||||||||
296 | SSL_CTX_ctrl(*ssl_ctx,94,1, | - | ||||||||||||||||||||||||
297 | ((void *)0) | - | ||||||||||||||||||||||||
298 | ); | - | ||||||||||||||||||||||||
299 | if (SSL_CTX_set1_groups(*ssl_ctx, ctx->config->ecdhecurves,
| 0-4 | ||||||||||||||||||||||||
300 | ctx->config->ecdhecurves_len) != 1
| 0-4 | ||||||||||||||||||||||||
301 | tls_set_errorx(ctx, "failed to set ecdhe curves"); | - | ||||||||||||||||||||||||
302 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
303 | } | - | ||||||||||||||||||||||||
304 | } executed 4 times by 1 test: end of block Executed by:
| 4 | ||||||||||||||||||||||||
305 | - | |||||||||||||||||||||||||
306 | if (ctx->config->ciphers_server == 1
| 0-4 | ||||||||||||||||||||||||
307 | SSL_CTX_ctrl((*ssl_ctx),32,(0x00400000L), executed 4 times by 1 test: SSL_CTX_ctrl((*ssl_ctx),32,(0x00400000L), ((void *)0) ); Executed by:
| 4 | ||||||||||||||||||||||||
308 | ((void *)0) executed 4 times by 1 test: SSL_CTX_ctrl((*ssl_ctx),32,(0x00400000L), ((void *)0) ); Executed by:
| 4 | ||||||||||||||||||||||||
309 | ); executed 4 times by 1 test: SSL_CTX_ctrl((*ssl_ctx),32,(0x00400000L), ((void *)0) ); Executed by:
| 4 | ||||||||||||||||||||||||
310 | - | |||||||||||||||||||||||||
311 | if (SSL_CTX_callback_ctrl(*ssl_ctx,63,(void (*)(void))tls_ocsp_stapling_cb) != 1
| 0-4 | ||||||||||||||||||||||||
312 | tls_set_errorx(ctx, "failed to add OCSP stapling callback"); | - | ||||||||||||||||||||||||
313 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
314 | } | - | ||||||||||||||||||||||||
315 | - | |||||||||||||||||||||||||
316 | if (ctx->config->session_lifetime > 0
| 0-4 | ||||||||||||||||||||||||
317 | - | |||||||||||||||||||||||||
318 | SSL_CTX_set_timeout(*ssl_ctx, ctx->config->session_lifetime); | - | ||||||||||||||||||||||||
319 | SSL_CTX_ctrl((*ssl_ctx),77,(0x00004000L), | - | ||||||||||||||||||||||||
320 | ((void *)0) | - | ||||||||||||||||||||||||
321 | ); | - | ||||||||||||||||||||||||
322 | if (!SSL_CTX_callback_ctrl(*ssl_ctx,72,(void (*)(void))tls_server_ticket_cb)
| 0 | ||||||||||||||||||||||||
323 | ) { | - | ||||||||||||||||||||||||
324 | tls_set_error(ctx, | - | ||||||||||||||||||||||||
325 | "failed to set the TLS ticket callback"); | - | ||||||||||||||||||||||||
326 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
327 | } | - | ||||||||||||||||||||||||
328 | } never executed: end of block | 0 | ||||||||||||||||||||||||
329 | - | |||||||||||||||||||||||||
330 | if (SSL_CTX_set_session_id_context(*ssl_ctx, ctx->config->session_id,
| 0-4 | ||||||||||||||||||||||||
331 | sizeof(ctx->config->session_id)) != 1
| 0-4 | ||||||||||||||||||||||||
332 | tls_set_error(ctx, "failed to set session id context"); | - | ||||||||||||||||||||||||
333 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
334 | } | - | ||||||||||||||||||||||||
335 | - | |||||||||||||||||||||||||
336 | return executed 4 times by 1 test: (0);return (0); Executed by:
executed 4 times by 1 test: return (0); Executed by:
| 4 | ||||||||||||||||||||||||
337 | - | |||||||||||||||||||||||||
338 | err: | - | ||||||||||||||||||||||||
339 | SSL_CTX_free(*ssl_ctx); | - | ||||||||||||||||||||||||
340 | *ssl_ctx = | - | ||||||||||||||||||||||||
341 | ((void *)0) | - | ||||||||||||||||||||||||
342 | ; | - | ||||||||||||||||||||||||
343 | - | |||||||||||||||||||||||||
344 | return never executed: (-1);return (-1); never executed: return (-1); | 0 | ||||||||||||||||||||||||
345 | } | - | ||||||||||||||||||||||||
346 | - | |||||||||||||||||||||||||
347 | static int | - | ||||||||||||||||||||||||
348 | tls_configure_server_sni(struct tls *ctx) | - | ||||||||||||||||||||||||
349 | { | - | ||||||||||||||||||||||||
350 | struct tls_sni_ctx **sni_ctx; | - | ||||||||||||||||||||||||
351 | struct tls_keypair *kp; | - | ||||||||||||||||||||||||
352 | - | |||||||||||||||||||||||||
353 | if (ctx->config->keypair->next ==
| 0-4 | ||||||||||||||||||||||||
354 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
355 | ) | - | ||||||||||||||||||||||||
356 | return executed 4 times by 1 test: (0);return (0); Executed by:
executed 4 times by 1 test: return (0); Executed by:
| 4 | ||||||||||||||||||||||||
357 | - | |||||||||||||||||||||||||
358 | - | |||||||||||||||||||||||||
359 | sni_ctx = &ctx->sni_ctx; | - | ||||||||||||||||||||||||
360 | for (kp = ctx->config->keypair->next; kp !=
| 0 | ||||||||||||||||||||||||
361 | ((void *)0)
| 0 | ||||||||||||||||||||||||
362 | ; kp = kp->next) { | - | ||||||||||||||||||||||||
363 | if ((*
| 0 | ||||||||||||||||||||||||
364 | ((void *)0)
| 0 | ||||||||||||||||||||||||
365 | ) { | - | ||||||||||||||||||||||||
366 | tls_set_errorx(ctx, "out of memory"); | - | ||||||||||||||||||||||||
367 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
368 | } | - | ||||||||||||||||||||||||
369 | (*sni_ctx)->keypair = kp; | - | ||||||||||||||||||||||||
370 | if (tls_configure_server_ssl(ctx, &(*sni_ctx)->ssl_ctx, kp) == -1
| 0 | ||||||||||||||||||||||||
371 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
372 | if (tls_keypair_load_cert(kp, &ctx->error,
| 0 | ||||||||||||||||||||||||
373 | &(*sni_ctx)->ssl_cert) == -1
| 0 | ||||||||||||||||||||||||
374 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
375 | sni_ctx = &(*sni_ctx)->next; | - | ||||||||||||||||||||||||
376 | } never executed: end of block | 0 | ||||||||||||||||||||||||
377 | - | |||||||||||||||||||||||||
378 | return never executed: (0);return (0); never executed: return (0); | 0 | ||||||||||||||||||||||||
379 | - | |||||||||||||||||||||||||
380 | err: | - | ||||||||||||||||||||||||
381 | return never executed: (-1);return (-1); never executed: return (-1); | 0 | ||||||||||||||||||||||||
382 | } | - | ||||||||||||||||||||||||
383 | - | |||||||||||||||||||||||||
384 | int | - | ||||||||||||||||||||||||
385 | tls_configure_server(struct tls *ctx) | - | ||||||||||||||||||||||||
386 | { | - | ||||||||||||||||||||||||
387 | if (tls_configure_server_ssl(ctx, &ctx->ssl_ctx,
| 0-4 | ||||||||||||||||||||||||
388 | ctx->config->keypair) == -1
| 0-4 | ||||||||||||||||||||||||
389 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
390 | if (tls_configure_server_sni(ctx) == -1
| 0-4 | ||||||||||||||||||||||||
391 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
392 | - | |||||||||||||||||||||||||
393 | return executed 4 times by 1 test: (0);return (0); Executed by:
executed 4 times by 1 test: return (0); Executed by:
| 4 | ||||||||||||||||||||||||
394 | - | |||||||||||||||||||||||||
395 | err: | - | ||||||||||||||||||||||||
396 | return never executed: (-1);return (-1); never executed: return (-1); | 0 | ||||||||||||||||||||||||
397 | } | - | ||||||||||||||||||||||||
398 | - | |||||||||||||||||||||||||
399 | static struct tls * | - | ||||||||||||||||||||||||
400 | tls_accept_common(struct tls *ctx) | - | ||||||||||||||||||||||||
401 | { | - | ||||||||||||||||||||||||
402 | struct tls *conn_ctx = | - | ||||||||||||||||||||||||
403 | ((void *)0) | - | ||||||||||||||||||||||||
404 | ; | - | ||||||||||||||||||||||||
405 | - | |||||||||||||||||||||||||
406 | if ((
| 0-4 | ||||||||||||||||||||||||
407 | tls_set_errorx(ctx, "not a server context"); | - | ||||||||||||||||||||||||
408 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
409 | } | - | ||||||||||||||||||||||||
410 | - | |||||||||||||||||||||||||
411 | if ((
| 0-4 | ||||||||||||||||||||||||
412 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
413 | ) { | - | ||||||||||||||||||||||||
414 | tls_set_errorx(ctx, "connection context failure"); | - | ||||||||||||||||||||||||
415 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
416 | } | - | ||||||||||||||||||||||||
417 | - | |||||||||||||||||||||||||
418 | if ((
| 0-4 | ||||||||||||||||||||||||
419 | ((void *)0)
| 0-4 | ||||||||||||||||||||||||
420 | ) { | - | ||||||||||||||||||||||||
421 | tls_set_errorx(ctx, "ssl failure"); | - | ||||||||||||||||||||||||
422 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
423 | } | - | ||||||||||||||||||||||||
424 | - | |||||||||||||||||||||||||
425 | if ((
| 0-4 | ||||||||||||||||||||||||
426 | tls_set_errorx(ctx, "ssl application data failure"); | - | ||||||||||||||||||||||||
427 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
428 | } | - | ||||||||||||||||||||||||
429 | - | |||||||||||||||||||||||||
430 | return executed 4 times by 1 test: conn_ctx;return conn_ctx; Executed by:
executed 4 times by 1 test: return conn_ctx; Executed by:
| 4 | ||||||||||||||||||||||||
431 | - | |||||||||||||||||||||||||
432 | err: | - | ||||||||||||||||||||||||
433 | tls_free(conn_ctx); | - | ||||||||||||||||||||||||
434 | - | |||||||||||||||||||||||||
435 | return never executed: (return ( ((void *)0) ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
436 | ((void *)0) never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
437 | ); never executed: return ( ((void *)0) ); | 0 | ||||||||||||||||||||||||
438 | } | - | ||||||||||||||||||||||||
439 | - | |||||||||||||||||||||||||
440 | int | - | ||||||||||||||||||||||||
441 | tls_accept_socket(struct tls *ctx, struct tls **cctx, int s) | - | ||||||||||||||||||||||||
442 | { | - | ||||||||||||||||||||||||
443 | return executed 1 time by 1 test: (tls_accept_fds(ctx, cctx, s, s));return (tls_accept_fds(ctx, cctx, s, s)); Executed by:
executed 1 time by 1 test: return (tls_accept_fds(ctx, cctx, s, s)); Executed by:
| 1 | ||||||||||||||||||||||||
444 | } | - | ||||||||||||||||||||||||
445 | - | |||||||||||||||||||||||||
446 | int | - | ||||||||||||||||||||||||
447 | tls_accept_fds(struct tls *ctx, struct tls **cctx, int fd_read, int fd_write) | - | ||||||||||||||||||||||||
448 | { | - | ||||||||||||||||||||||||
449 | struct tls *conn_ctx; | - | ||||||||||||||||||||||||
450 | - | |||||||||||||||||||||||||
451 | if ((
| 0-2 | ||||||||||||||||||||||||
452 | ((void *)0)
| 0-2 | ||||||||||||||||||||||||
453 | ) | - | ||||||||||||||||||||||||
454 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
455 | - | |||||||||||||||||||||||||
456 | if (SSL_set_rfd(conn_ctx->ssl_conn, fd_read) != 1
| 0-2 | ||||||||||||||||||||||||
457 | SSL_set_wfd(conn_ctx->ssl_conn, fd_write) != 1
| 0-2 | ||||||||||||||||||||||||
458 | tls_set_errorx(ctx, "ssl file descriptor failure"); | - | ||||||||||||||||||||||||
459 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
460 | } | - | ||||||||||||||||||||||||
461 | - | |||||||||||||||||||||||||
462 | *cctx = conn_ctx; | - | ||||||||||||||||||||||||
463 | - | |||||||||||||||||||||||||
464 | return executed 2 times by 1 test: (0);return (0); Executed by:
executed 2 times by 1 test: return (0); Executed by:
| 2 | ||||||||||||||||||||||||
465 | err: | - | ||||||||||||||||||||||||
466 | tls_free(conn_ctx); | - | ||||||||||||||||||||||||
467 | *cctx = | - | ||||||||||||||||||||||||
468 | ((void *)0) | - | ||||||||||||||||||||||||
469 | ; | - | ||||||||||||||||||||||||
470 | - | |||||||||||||||||||||||||
471 | return never executed: (-1);return (-1); never executed: return (-1); | 0 | ||||||||||||||||||||||||
472 | } | - | ||||||||||||||||||||||||
473 | - | |||||||||||||||||||||||||
474 | int | - | ||||||||||||||||||||||||
475 | tls_accept_cbs(struct tls *ctx, struct tls **cctx, | - | ||||||||||||||||||||||||
476 | tls_read_cb read_cb, tls_write_cb write_cb, void *cb_arg) | - | ||||||||||||||||||||||||
477 | { | - | ||||||||||||||||||||||||
478 | struct tls *conn_ctx; | - | ||||||||||||||||||||||||
479 | - | |||||||||||||||||||||||||
480 | if ((
| 0-2 | ||||||||||||||||||||||||
481 | ((void *)0)
| 0-2 | ||||||||||||||||||||||||
482 | ) | - | ||||||||||||||||||||||||
483 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
484 | - | |||||||||||||||||||||||||
485 | if (tls_set_cbs(conn_ctx, read_cb, write_cb, cb_arg) != 0
| 0-2 | ||||||||||||||||||||||||
486 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
487 | - | |||||||||||||||||||||||||
488 | *cctx = conn_ctx; | - | ||||||||||||||||||||||||
489 | - | |||||||||||||||||||||||||
490 | return executed 2 times by 1 test: (0);return (0); Executed by:
executed 2 times by 1 test: return (0); Executed by:
| 2 | ||||||||||||||||||||||||
491 | err: | - | ||||||||||||||||||||||||
492 | tls_free(conn_ctx); | - | ||||||||||||||||||||||||
493 | *cctx = | - | ||||||||||||||||||||||||
494 | ((void *)0) | - | ||||||||||||||||||||||||
495 | ; | - | ||||||||||||||||||||||||
496 | - | |||||||||||||||||||||||||
497 | return never executed: (-1);return (-1); never executed: return (-1); | 0 | ||||||||||||||||||||||||
498 | } | - | ||||||||||||||||||||||||
499 | - | |||||||||||||||||||||||||
500 | int | - | ||||||||||||||||||||||||
501 | tls_handshake_server(struct tls *ctx) | - | ||||||||||||||||||||||||
502 | { | - | ||||||||||||||||||||||||
503 | int ssl_ret; | - | ||||||||||||||||||||||||
504 | int rv = -1; | - | ||||||||||||||||||||||||
505 | - | |||||||||||||||||||||||||
506 | if ((
| 0-12 | ||||||||||||||||||||||||
507 | tls_set_errorx(ctx, "not a server connection context"); | - | ||||||||||||||||||||||||
508 | goto never executed: err;goto err; never executed: goto err; | 0 | ||||||||||||||||||||||||
509 | } | - | ||||||||||||||||||||||||
510 | - | |||||||||||||||||||||||||
511 | ctx->state |= (1 << 3); | - | ||||||||||||||||||||||||
512 | - | |||||||||||||||||||||||||
513 | ERR_clear_error(); | - | ||||||||||||||||||||||||
514 | if ((
| 4-8 | ||||||||||||||||||||||||
515 | rv = tls_ssl_error(ctx, ctx->ssl_conn, ssl_ret, "handshake"); | - | ||||||||||||||||||||||||
516 | goto executed 8 times by 1 test: err;goto err; Executed by:
executed 8 times by 1 test: goto err; Executed by:
| 8 | ||||||||||||||||||||||||
517 | } | - | ||||||||||||||||||||||||
518 | - | |||||||||||||||||||||||||
519 | ctx->state |= (1 << 2); | - | ||||||||||||||||||||||||
520 | rv = 0; | - | ||||||||||||||||||||||||
521 | - | |||||||||||||||||||||||||
522 | err: code before this statement executed 4 times by 1 test: err: Executed by:
| 4 | ||||||||||||||||||||||||
523 | return executed 12 times by 1 test: (rv);return (rv); Executed by:
executed 12 times by 1 test: return (rv); Executed by:
| 12 | ||||||||||||||||||||||||
524 | } | - | ||||||||||||||||||||||||
Switch to Source code | Preprocessed file |