| 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 blockExecuted 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 |