diff options
| author | jsing <> | 2017-08-09 17:42:12 +0000 |
|---|---|---|
| committer | jsing <> | 2017-08-09 17:42:12 +0000 |
| commit | ac61bafa9da9013fc815ad4eeafef7ce8d5673cf (patch) | |
| tree | 591aa87af9b1f951a1ae6c1a2886b709d5e152ea /src/lib/libssl/s3_lib.c | |
| parent | 65150a9b9112c580a93c8cf04dac1d932ec2b449 (diff) | |
| download | openbsd-ac61bafa9da9013fc815ad4eeafef7ce8d5673cf.tar.gz openbsd-ac61bafa9da9013fc815ad4eeafef7ce8d5673cf.tar.bz2 openbsd-ac61bafa9da9013fc815ad4eeafef7ce8d5673cf.zip | |
Split out the remaining SSL_CTX controls into individual functions.
Diffstat (limited to 'src/lib/libssl/s3_lib.c')
| -rw-r--r-- | src/lib/libssl/s3_lib.c | 128 |
1 files changed, 88 insertions, 40 deletions
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index 62761c32fe..b82cf36f2e 100644 --- a/src/lib/libssl/s3_lib.c +++ b/src/lib/libssl/s3_lib.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: s3_lib.c,v 1.152 2017/08/09 17:21:34 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.153 2017/08/09 17:42:12 jsing Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -2165,6 +2165,84 @@ _SSL_CTX_set_ecdh_auto(SSL_CTX *ctx, int state) | |||
| 2165 | return 1; | 2165 | return 1; |
| 2166 | } | 2166 | } |
| 2167 | 2167 | ||
| 2168 | static int | ||
| 2169 | _SSL_CTX_set_tlsext_servername_arg(SSL_CTX *ctx, void *arg) | ||
| 2170 | { | ||
| 2171 | ctx->internal->tlsext_servername_arg = arg; | ||
| 2172 | return 1; | ||
| 2173 | } | ||
| 2174 | |||
| 2175 | static int | ||
| 2176 | _SSL_CTX_get_tlsext_ticket_keys(SSL_CTX *ctx, unsigned char *keys, int keys_len) | ||
| 2177 | { | ||
| 2178 | if (keys == NULL) | ||
| 2179 | return 48; | ||
| 2180 | |||
| 2181 | if (keys_len != 48) { | ||
| 2182 | SSLerrorx(SSL_R_INVALID_TICKET_KEYS_LENGTH); | ||
| 2183 | return 0; | ||
| 2184 | } | ||
| 2185 | |||
| 2186 | memcpy(keys, ctx->internal->tlsext_tick_key_name, 16); | ||
| 2187 | memcpy(keys + 16, ctx->internal->tlsext_tick_hmac_key, 16); | ||
| 2188 | memcpy(keys + 32, ctx->internal->tlsext_tick_aes_key, 16); | ||
| 2189 | |||
| 2190 | return 1; | ||
| 2191 | } | ||
| 2192 | |||
| 2193 | static int | ||
| 2194 | _SSL_CTX_set_tlsext_ticket_keys(SSL_CTX *ctx, unsigned char *keys, int keys_len) | ||
| 2195 | { | ||
| 2196 | if (keys == NULL) | ||
| 2197 | return 48; | ||
| 2198 | |||
| 2199 | if (keys_len != 48) { | ||
| 2200 | SSLerrorx(SSL_R_INVALID_TICKET_KEYS_LENGTH); | ||
| 2201 | return 0; | ||
| 2202 | } | ||
| 2203 | |||
| 2204 | memcpy(ctx->internal->tlsext_tick_key_name, keys, 16); | ||
| 2205 | memcpy(ctx->internal->tlsext_tick_hmac_key, keys + 16, 16); | ||
| 2206 | memcpy(ctx->internal->tlsext_tick_aes_key, keys + 32, 16); | ||
| 2207 | |||
| 2208 | return 1; | ||
| 2209 | } | ||
| 2210 | |||
| 2211 | static int | ||
| 2212 | _SSL_CTX_set_tlsext_status_arg(SSL_CTX *ctx, void *arg) | ||
| 2213 | { | ||
| 2214 | ctx->internal->tlsext_status_arg = arg; | ||
| 2215 | return 1; | ||
| 2216 | } | ||
| 2217 | |||
| 2218 | static int | ||
| 2219 | _SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *cert) | ||
| 2220 | { | ||
| 2221 | if (ctx->extra_certs == NULL) { | ||
| 2222 | if ((ctx->extra_certs = sk_X509_new_null()) == NULL) | ||
| 2223 | return 0; | ||
| 2224 | } | ||
| 2225 | if (sk_X509_push(ctx->extra_certs, cert) == 0) | ||
| 2226 | return 0; | ||
| 2227 | |||
| 2228 | return 1; | ||
| 2229 | } | ||
| 2230 | |||
| 2231 | int | ||
| 2232 | _SSL_CTX_get_extra_chain_certs(SSL_CTX *ctx, STACK_OF(X509) **certs) | ||
| 2233 | { | ||
| 2234 | *certs = ctx->extra_certs; | ||
| 2235 | return 1; | ||
| 2236 | } | ||
| 2237 | |||
| 2238 | int | ||
| 2239 | _SSL_CTX_clear_extra_chain_certs(SSL_CTX *ctx) | ||
| 2240 | { | ||
| 2241 | sk_X509_pop_free(ctx->extra_certs, X509_free); | ||
| 2242 | ctx->extra_certs = NULL; | ||
| 2243 | return 1; | ||
| 2244 | } | ||
| 2245 | |||
| 2168 | int | 2246 | int |
| 2169 | SSL_CTX_set1_groups(SSL_CTX *ctx, const int *groups, size_t groups_len) | 2247 | SSL_CTX_set1_groups(SSL_CTX *ctx, const int *groups, size_t groups_len) |
| 2170 | { | 2248 | { |
| @@ -2204,55 +2282,25 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
| 2204 | return _SSL_CTX_set_ecdh_auto(ctx, larg); | 2282 | return _SSL_CTX_set_ecdh_auto(ctx, larg); |
| 2205 | 2283 | ||
| 2206 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: | 2284 | case SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG: |
| 2207 | ctx->internal->tlsext_servername_arg = parg; | 2285 | return _SSL_CTX_set_tlsext_servername_arg(ctx, parg); |
| 2208 | break; | ||
| 2209 | 2286 | ||
| 2210 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: | ||
| 2211 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: | 2287 | case SSL_CTRL_GET_TLSEXT_TICKET_KEYS: |
| 2212 | { | 2288 | return _SSL_CTX_get_tlsext_ticket_keys(ctx, parg, larg); |
| 2213 | unsigned char *keys = parg; | 2289 | |
| 2214 | if (!keys) | 2290 | case SSL_CTRL_SET_TLSEXT_TICKET_KEYS: |
| 2215 | return 48; | 2291 | return _SSL_CTX_set_tlsext_ticket_keys(ctx, parg, larg); |
| 2216 | if (larg != 48) { | ||
| 2217 | SSLerrorx(SSL_R_INVALID_TICKET_KEYS_LENGTH); | ||
| 2218 | return 0; | ||
| 2219 | } | ||
| 2220 | if (cmd == SSL_CTRL_SET_TLSEXT_TICKET_KEYS) { | ||
| 2221 | memcpy(ctx->internal->tlsext_tick_key_name, keys, 16); | ||
| 2222 | memcpy(ctx->internal->tlsext_tick_hmac_key, | ||
| 2223 | keys + 16, 16); | ||
| 2224 | memcpy(ctx->internal->tlsext_tick_aes_key, keys + 32, 16); | ||
| 2225 | } else { | ||
| 2226 | memcpy(keys, ctx->internal->tlsext_tick_key_name, 16); | ||
| 2227 | memcpy(keys + 16, | ||
| 2228 | ctx->internal->tlsext_tick_hmac_key, 16); | ||
| 2229 | memcpy(keys + 32, | ||
| 2230 | ctx->internal->tlsext_tick_aes_key, 16); | ||
| 2231 | } | ||
| 2232 | return 1; | ||
| 2233 | } | ||
| 2234 | 2292 | ||
| 2235 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: | 2293 | case SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG: |
| 2236 | ctx->internal->tlsext_status_arg = parg; | 2294 | return _SSL_CTX_set_tlsext_status_arg(ctx, parg); |
| 2237 | return 1; | ||
| 2238 | 2295 | ||
| 2239 | /* A Thawte special :-) */ | ||
| 2240 | case SSL_CTRL_EXTRA_CHAIN_CERT: | 2296 | case SSL_CTRL_EXTRA_CHAIN_CERT: |
| 2241 | if (ctx->extra_certs == NULL) { | 2297 | return _SSL_CTX_add_extra_chain_cert(ctx, parg); |
| 2242 | if ((ctx->extra_certs = sk_X509_new_null()) == NULL) | ||
| 2243 | return (0); | ||
| 2244 | } | ||
| 2245 | sk_X509_push(ctx->extra_certs,(X509 *)parg); | ||
| 2246 | break; | ||
| 2247 | 2298 | ||
| 2248 | case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: | 2299 | case SSL_CTRL_GET_EXTRA_CHAIN_CERTS: |
| 2249 | *(STACK_OF(X509) **)parg = ctx->extra_certs; | 2300 | return _SSL_CTX_get_extra_chain_certs(ctx, parg); |
| 2250 | break; | ||
| 2251 | 2301 | ||
| 2252 | case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: | 2302 | case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS: |
| 2253 | sk_X509_pop_free(ctx->extra_certs, X509_free); | 2303 | return _SSL_CTX_clear_extra_chain_certs(ctx); |
| 2254 | ctx->extra_certs = NULL; | ||
| 2255 | break; | ||
| 2256 | 2304 | ||
| 2257 | case SSL_CTRL_SET_GROUPS: | 2305 | case SSL_CTRL_SET_GROUPS: |
| 2258 | return SSL_CTX_set1_groups(ctx, parg, larg); | 2306 | return SSL_CTX_set1_groups(ctx, parg, larg); |
