diff options
author | jsing <> | 2017-05-06 20:37:25 +0000 |
---|---|---|
committer | jsing <> | 2017-05-06 20:37:25 +0000 |
commit | 792684dc457d44526f35586cb1671d67604bf5b1 (patch) | |
tree | 93525fc35ada38404416d83084837f1f94d46be3 | |
parent | 93ad7dce844283fb07b0d09b99999f2f71b47bd5 (diff) | |
download | openbsd-792684dc457d44526f35586cb1671d67604bf5b1.tar.gz openbsd-792684dc457d44526f35586cb1671d67604bf5b1.tar.bz2 openbsd-792684dc457d44526f35586cb1671d67604bf5b1.zip |
Provide SSL{,_CTX}_set_{min,max}_proto_version() functions.
Rides minor bump.
ok beck@
-rw-r--r-- | src/lib/libssl/Symbols.list | 4 | ||||
-rw-r--r-- | src/lib/libssl/s3_lib.c | 22 | ||||
-rw-r--r-- | src/lib/libssl/ssl.h | 11 | ||||
-rw-r--r-- | src/lib/libssl/ssl_lib.c | 29 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 6 | ||||
-rw-r--r-- | src/lib/libssl/ssl_versions.c | 48 |
6 files changed, 115 insertions, 5 deletions
diff --git a/src/lib/libssl/Symbols.list b/src/lib/libssl/Symbols.list index 042f553959..e147ff873d 100644 --- a/src/lib/libssl/Symbols.list +++ b/src/lib/libssl/Symbols.list | |||
@@ -97,6 +97,8 @@ SSL_CTX_set_default_verify_paths | |||
97 | SSL_CTX_set_ex_data | 97 | SSL_CTX_set_ex_data |
98 | SSL_CTX_set_generate_session_id | 98 | SSL_CTX_set_generate_session_id |
99 | SSL_CTX_set_info_callback | 99 | SSL_CTX_set_info_callback |
100 | SSL_CTX_set_min_proto_version | ||
101 | SSL_CTX_set_max_proto_version | ||
100 | SSL_CTX_set_msg_callback | 102 | SSL_CTX_set_msg_callback |
101 | SSL_CTX_set_next_proto_select_cb | 103 | SSL_CTX_set_next_proto_select_cb |
102 | SSL_CTX_set_next_protos_advertised_cb | 104 | SSL_CTX_set_next_protos_advertised_cb |
@@ -229,6 +231,8 @@ SSL_set_ex_data | |||
229 | SSL_set_fd | 231 | SSL_set_fd |
230 | SSL_set_generate_session_id | 232 | SSL_set_generate_session_id |
231 | SSL_set_info_callback | 233 | SSL_set_info_callback |
234 | SSL_set_min_proto_version | ||
235 | SSL_set_max_proto_version | ||
232 | SSL_set_msg_callback | 236 | SSL_set_msg_callback |
233 | SSL_set_purpose | 237 | SSL_set_purpose |
234 | SSL_set_quiet_shutdown | 238 | SSL_set_quiet_shutdown |
diff --git a/src/lib/libssl/s3_lib.c b/src/lib/libssl/s3_lib.c index d4142e743f..0f05b8f2fe 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.140 2017/04/10 17:27:33 jsing Exp $ */ | 1 | /* $OpenBSD: s3_lib.c,v 1.141 2017/05/06 20:37:24 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 | * |
@@ -2141,6 +2141,16 @@ ssl3_ctrl(SSL *s, int cmd, long larg, void *parg) | |||
2141 | ret = ssl_ctrl_get_server_tmp_key(s, parg); | 2141 | ret = ssl_ctrl_get_server_tmp_key(s, parg); |
2142 | break; | 2142 | break; |
2143 | 2143 | ||
2144 | case SSL_CTRL_SET_MIN_PROTO_VERSION: | ||
2145 | if (larg < 0 || larg > UINT16_MAX) | ||
2146 | return (0); | ||
2147 | return SSL_set_min_proto_version(s, larg); | ||
2148 | |||
2149 | case SSL_CTRL_SET_MAX_PROTO_VERSION: | ||
2150 | if (larg < 0 || larg > UINT16_MAX) | ||
2151 | return (0); | ||
2152 | return SSL_set_max_proto_version(s, larg); | ||
2153 | |||
2144 | default: | 2154 | default: |
2145 | break; | 2155 | break; |
2146 | } | 2156 | } |
@@ -2323,6 +2333,16 @@ ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg) | |||
2323 | case SSL_CTRL_SET_GROUPS_LIST: | 2333 | case SSL_CTRL_SET_GROUPS_LIST: |
2324 | return SSL_CTX_set1_groups_list(ctx, parg); | 2334 | return SSL_CTX_set1_groups_list(ctx, parg); |
2325 | 2335 | ||
2336 | case SSL_CTRL_SET_MIN_PROTO_VERSION: | ||
2337 | if (larg < 0 || larg > UINT16_MAX) | ||
2338 | return (0); | ||
2339 | return SSL_CTX_set_min_proto_version(ctx, larg); | ||
2340 | |||
2341 | case SSL_CTRL_SET_MAX_PROTO_VERSION: | ||
2342 | if (larg < 0 || larg > UINT16_MAX) | ||
2343 | return (0); | ||
2344 | return SSL_CTX_set_max_proto_version(ctx, larg); | ||
2345 | |||
2326 | default: | 2346 | default: |
2327 | return (0); | 2347 | return (0); |
2328 | } | 2348 | } |
diff --git a/src/lib/libssl/ssl.h b/src/lib/libssl/ssl.h index 0789b914b7..05d0660c49 100644 --- a/src/lib/libssl/ssl.h +++ b/src/lib/libssl/ssl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl.h,v 1.127 2017/02/05 15:06:05 jsing Exp $ */ | 1 | /* $OpenBSD: ssl.h,v 1.128 2017/05/06 20:37:25 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 | * |
@@ -1129,6 +1129,9 @@ int PEM_write_SSL_SESSION(FILE *fp, SSL_SESSION *x); | |||
1129 | 1129 | ||
1130 | #define SSL_CTRL_SET_DH_AUTO 118 | 1130 | #define SSL_CTRL_SET_DH_AUTO 118 |
1131 | 1131 | ||
1132 | #define SSL_CTRL_SET_MIN_PROTO_VERSION 123 | ||
1133 | #define SSL_CTRL_SET_MAX_PROTO_VERSION 124 | ||
1134 | |||
1132 | #define DTLSv1_get_timeout(ssl, arg) \ | 1135 | #define DTLSv1_get_timeout(ssl, arg) \ |
1133 | SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg) | 1136 | SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg) |
1134 | #define DTLSv1_handle_timeout(ssl) \ | 1137 | #define DTLSv1_handle_timeout(ssl) \ |
@@ -1177,6 +1180,12 @@ int SSL_CTX_set1_groups_list(SSL_CTX *ctx, const char *groups); | |||
1177 | int SSL_set1_groups(SSL *ssl, const int *groups, size_t groups_len); | 1180 | int SSL_set1_groups(SSL *ssl, const int *groups, size_t groups_len); |
1178 | int SSL_set1_groups_list(SSL *ssl, const char *groups); | 1181 | int SSL_set1_groups_list(SSL *ssl, const char *groups); |
1179 | 1182 | ||
1183 | int SSL_CTX_set_min_proto_version(SSL_CTX *ctx, uint16_t version); | ||
1184 | int SSL_CTX_set_max_proto_version(SSL_CTX *ctx, uint16_t version); | ||
1185 | |||
1186 | int SSL_set_min_proto_version(SSL *ssl, uint16_t version); | ||
1187 | int SSL_set_max_proto_version(SSL *ssl, uint16_t version); | ||
1188 | |||
1180 | #ifndef LIBRESSL_INTERNAL | 1189 | #ifndef LIBRESSL_INTERNAL |
1181 | #define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS | 1190 | #define SSL_CTRL_SET_CURVES SSL_CTRL_SET_GROUPS |
1182 | #define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST | 1191 | #define SSL_CTRL_SET_CURVES_LIST SSL_CTRL_SET_GROUPS_LIST |
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index 3f458d8b10..c49b79df0b 100644 --- a/src/lib/libssl/ssl_lib.c +++ b/src/lib/libssl/ssl_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_lib.c,v 1.158 2017/02/28 14:08:49 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.159 2017/05/06 20:37:25 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 | * |
@@ -2969,6 +2969,33 @@ SSL_cache_hit(SSL *s) | |||
2969 | return (s->internal->hit); | 2969 | return (s->internal->hit); |
2970 | } | 2970 | } |
2971 | 2971 | ||
2972 | int | ||
2973 | SSL_CTX_set_min_proto_version(SSL_CTX *ctx, uint16_t version) | ||
2974 | { | ||
2975 | return ssl_version_set_min(ctx->method, version, | ||
2976 | ctx->internal->max_version, &ctx->internal->min_version); | ||
2977 | } | ||
2978 | |||
2979 | int | ||
2980 | SSL_CTX_set_max_proto_version(SSL_CTX *ctx, uint16_t version) | ||
2981 | { | ||
2982 | return ssl_version_set_max(ctx->method, version, | ||
2983 | ctx->internal->min_version, &ctx->internal->max_version); | ||
2984 | } | ||
2985 | |||
2986 | int | ||
2987 | SSL_set_min_proto_version(SSL *ssl, uint16_t version) | ||
2988 | { | ||
2989 | return ssl_version_set_min(ssl->method, version, | ||
2990 | ssl->internal->max_version, &ssl->internal->min_version); | ||
2991 | } | ||
2992 | |||
2993 | int | ||
2994 | SSL_set_max_proto_version(SSL *ssl, uint16_t version) | ||
2995 | { | ||
2996 | return ssl_version_set_max(ssl->method, version, | ||
2997 | ssl->internal->min_version, &ssl->internal->max_version); | ||
2998 | } | ||
2972 | 2999 | ||
2973 | static int | 3000 | static int |
2974 | ssl_cipher_id_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) | 3001 | ssl_cipher_id_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index b68b680106..b52b03149a 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.178 2017/03/10 16:03:27 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.179 2017/05/06 20:37:25 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 | * |
@@ -1061,6 +1061,10 @@ const char *ssl_version_string(int ver); | |||
1061 | int ssl_enabled_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver); | 1061 | int ssl_enabled_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver); |
1062 | int ssl_supported_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver); | 1062 | int ssl_supported_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver); |
1063 | int ssl_max_shared_version(SSL *s, uint16_t peer_ver, uint16_t *max_ver); | 1063 | int ssl_max_shared_version(SSL *s, uint16_t peer_ver, uint16_t *max_ver); |
1064 | int ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver, | ||
1065 | uint16_t *out_ver); | ||
1066 | int ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver, | ||
1067 | uint16_t *out_ver); | ||
1064 | uint16_t ssl_max_server_version(SSL *s); | 1068 | uint16_t ssl_max_server_version(SSL *s); |
1065 | 1069 | ||
1066 | const SSL_METHOD *dtls1_get_client_method(int ver); | 1070 | const SSL_METHOD *dtls1_get_client_method(int ver); |
diff --git a/src/lib/libssl/ssl_versions.c b/src/lib/libssl/ssl_versions.c index 6e17cdac6c..240a2498aa 100644 --- a/src/lib/libssl/ssl_versions.c +++ b/src/lib/libssl/ssl_versions.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_versions.c,v 1.2 2017/05/06 16:18:36 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_versions.c,v 1.3 2017/05/06 20:37:25 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2016, 2017 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -35,6 +35,52 @@ ssl_clamp_version_range(uint16_t *min_ver, uint16_t *max_ver, | |||
35 | } | 35 | } |
36 | 36 | ||
37 | int | 37 | int |
38 | ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver, | ||
39 | uint16_t *out_ver) | ||
40 | { | ||
41 | uint16_t min_version, max_version; | ||
42 | |||
43 | if (ver == 0) { | ||
44 | *out_ver = meth->internal->min_version; | ||
45 | return 1; | ||
46 | } | ||
47 | |||
48 | min_version = ver; | ||
49 | max_version = max_ver; | ||
50 | |||
51 | if (!ssl_clamp_version_range(&min_version, &max_version, | ||
52 | meth->internal->min_version, meth->internal->max_version)) | ||
53 | return 0; | ||
54 | |||
55 | *out_ver = min_version; | ||
56 | |||
57 | return 1; | ||
58 | } | ||
59 | |||
60 | int | ||
61 | ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver, | ||
62 | uint16_t *out_ver) | ||
63 | { | ||
64 | uint16_t min_version, max_version; | ||
65 | |||
66 | if (ver == 0) { | ||
67 | *out_ver = meth->internal->max_version; | ||
68 | return 1; | ||
69 | } | ||
70 | |||
71 | min_version = min_ver; | ||
72 | max_version = ver; | ||
73 | |||
74 | if (!ssl_clamp_version_range(&min_version, &max_version, | ||
75 | meth->internal->min_version, meth->internal->max_version)) | ||
76 | return 0; | ||
77 | |||
78 | *out_ver = max_version; | ||
79 | |||
80 | return 1; | ||
81 | } | ||
82 | |||
83 | int | ||
38 | ssl_enabled_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver) | 84 | ssl_enabled_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver) |
39 | { | 85 | { |
40 | uint16_t min_version, max_version; | 86 | uint16_t min_version, max_version; |