diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libssl/ssl_lib.c | 26 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 20 | ||||
-rw-r--r-- | src/lib/libssl/ssl_versions.c | 12 |
3 files changed, 41 insertions, 17 deletions
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index f802875274..6a182f2e3b 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.246 2021/02/20 08:30:52 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.247 2021/02/20 09:43:29 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 | * |
@@ -256,6 +256,8 @@ SSL_new(SSL_CTX *ctx) | |||
256 | 256 | ||
257 | s->internal->min_version = ctx->internal->min_version; | 257 | s->internal->min_version = ctx->internal->min_version; |
258 | s->internal->max_version = ctx->internal->max_version; | 258 | s->internal->max_version = ctx->internal->max_version; |
259 | s->internal->min_proto_version = ctx->internal->min_proto_version; | ||
260 | s->internal->max_proto_version = ctx->internal->max_proto_version; | ||
259 | 261 | ||
260 | s->internal->options = ctx->internal->options; | 262 | s->internal->options = ctx->internal->options; |
261 | s->internal->mode = ctx->internal->mode; | 263 | s->internal->mode = ctx->internal->mode; |
@@ -1829,6 +1831,8 @@ SSL_CTX_new(const SSL_METHOD *meth) | |||
1829 | ret->method = meth; | 1831 | ret->method = meth; |
1830 | ret->internal->min_version = meth->internal->min_version; | 1832 | ret->internal->min_version = meth->internal->min_version; |
1831 | ret->internal->max_version = meth->internal->max_version; | 1833 | ret->internal->max_version = meth->internal->max_version; |
1834 | ret->internal->min_proto_version = 0; | ||
1835 | ret->internal->max_proto_version = 0; | ||
1832 | ret->internal->mode = SSL_MODE_AUTO_RETRY; | 1836 | ret->internal->mode = SSL_MODE_AUTO_RETRY; |
1833 | 1837 | ||
1834 | ret->cert_store = NULL; | 1838 | ret->cert_store = NULL; |
@@ -3016,52 +3020,56 @@ SSL_cache_hit(SSL *s) | |||
3016 | int | 3020 | int |
3017 | SSL_CTX_get_min_proto_version(SSL_CTX *ctx) | 3021 | SSL_CTX_get_min_proto_version(SSL_CTX *ctx) |
3018 | { | 3022 | { |
3019 | return ctx->internal->min_version; | 3023 | return ctx->internal->min_proto_version; |
3020 | } | 3024 | } |
3021 | 3025 | ||
3022 | int | 3026 | int |
3023 | SSL_CTX_set_min_proto_version(SSL_CTX *ctx, uint16_t version) | 3027 | SSL_CTX_set_min_proto_version(SSL_CTX *ctx, uint16_t version) |
3024 | { | 3028 | { |
3025 | return ssl_version_set_min(ctx->method, version, | 3029 | return ssl_version_set_min(ctx->method, version, |
3026 | ctx->internal->max_version, &ctx->internal->min_version); | 3030 | ctx->internal->max_version, &ctx->internal->min_version, |
3031 | &ctx->internal->min_proto_version); | ||
3027 | } | 3032 | } |
3028 | 3033 | ||
3029 | int | 3034 | int |
3030 | SSL_CTX_get_max_proto_version(SSL_CTX *ctx) | 3035 | SSL_CTX_get_max_proto_version(SSL_CTX *ctx) |
3031 | { | 3036 | { |
3032 | return ctx->internal->max_version; | 3037 | return ctx->internal->max_proto_version; |
3033 | } | 3038 | } |
3034 | 3039 | ||
3035 | int | 3040 | int |
3036 | SSL_CTX_set_max_proto_version(SSL_CTX *ctx, uint16_t version) | 3041 | SSL_CTX_set_max_proto_version(SSL_CTX *ctx, uint16_t version) |
3037 | { | 3042 | { |
3038 | return ssl_version_set_max(ctx->method, version, | 3043 | return ssl_version_set_max(ctx->method, version, |
3039 | ctx->internal->min_version, &ctx->internal->max_version); | 3044 | ctx->internal->min_version, &ctx->internal->max_version, |
3045 | &ctx->internal->max_proto_version); | ||
3040 | } | 3046 | } |
3041 | 3047 | ||
3042 | int | 3048 | int |
3043 | SSL_get_min_proto_version(SSL *ssl) | 3049 | SSL_get_min_proto_version(SSL *ssl) |
3044 | { | 3050 | { |
3045 | return ssl->internal->min_version; | 3051 | return ssl->internal->min_proto_version; |
3046 | } | 3052 | } |
3047 | 3053 | ||
3048 | int | 3054 | int |
3049 | SSL_set_min_proto_version(SSL *ssl, uint16_t version) | 3055 | SSL_set_min_proto_version(SSL *ssl, uint16_t version) |
3050 | { | 3056 | { |
3051 | return ssl_version_set_min(ssl->method, version, | 3057 | return ssl_version_set_min(ssl->method, version, |
3052 | ssl->internal->max_version, &ssl->internal->min_version); | 3058 | ssl->internal->max_version, &ssl->internal->min_version, |
3059 | &ssl->internal->min_proto_version); | ||
3053 | } | 3060 | } |
3054 | int | 3061 | int |
3055 | SSL_get_max_proto_version(SSL *ssl) | 3062 | SSL_get_max_proto_version(SSL *ssl) |
3056 | { | 3063 | { |
3057 | return ssl->internal->max_version; | 3064 | return ssl->internal->max_proto_version; |
3058 | } | 3065 | } |
3059 | 3066 | ||
3060 | int | 3067 | int |
3061 | SSL_set_max_proto_version(SSL *ssl, uint16_t version) | 3068 | SSL_set_max_proto_version(SSL *ssl, uint16_t version) |
3062 | { | 3069 | { |
3063 | return ssl_version_set_max(ssl->method, version, | 3070 | return ssl_version_set_max(ssl->method, version, |
3064 | ssl->internal->min_version, &ssl->internal->max_version); | 3071 | ssl->internal->min_version, &ssl->internal->max_version, |
3072 | &ssl->internal->max_proto_version); | ||
3065 | } | 3073 | } |
3066 | 3074 | ||
3067 | static int | 3075 | static int |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index edb8223fe2..fc61ffee4f 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.320 2021/02/07 15:26:32 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.321 2021/02/20 09:43:29 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 | * |
@@ -520,6 +520,13 @@ typedef struct ssl_ctx_internal_st { | |||
520 | uint16_t min_version; | 520 | uint16_t min_version; |
521 | uint16_t max_version; | 521 | uint16_t max_version; |
522 | 522 | ||
523 | /* | ||
524 | * These may be zero to imply minimum or maximum version supported by | ||
525 | * the method. | ||
526 | */ | ||
527 | uint16_t min_proto_version; | ||
528 | uint16_t max_proto_version; | ||
529 | |||
523 | unsigned long options; | 530 | unsigned long options; |
524 | unsigned long mode; | 531 | unsigned long mode; |
525 | 532 | ||
@@ -682,6 +689,13 @@ typedef struct ssl_internal_st { | |||
682 | uint16_t min_version; | 689 | uint16_t min_version; |
683 | uint16_t max_version; | 690 | uint16_t max_version; |
684 | 691 | ||
692 | /* | ||
693 | * These may be zero to imply minimum or maximum version supported by | ||
694 | * the method. | ||
695 | */ | ||
696 | uint16_t min_proto_version; | ||
697 | uint16_t max_proto_version; | ||
698 | |||
685 | unsigned long options; /* protocol behaviour */ | 699 | unsigned long options; /* protocol behaviour */ |
686 | unsigned long mode; /* API behaviour */ | 700 | unsigned long mode; /* API behaviour */ |
687 | 701 | ||
@@ -1111,9 +1125,9 @@ int ssl_enabled_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver); | |||
1111 | int ssl_supported_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver); | 1125 | int ssl_supported_version_range(SSL *s, uint16_t *min_ver, uint16_t *max_ver); |
1112 | int ssl_max_shared_version(SSL *s, uint16_t peer_ver, uint16_t *max_ver); | 1126 | int ssl_max_shared_version(SSL *s, uint16_t peer_ver, uint16_t *max_ver); |
1113 | int ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver, | 1127 | int ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver, |
1114 | uint16_t *out_ver); | 1128 | uint16_t *out_ver, uint16_t *out_proto_ver); |
1115 | int ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver, | 1129 | int ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver, |
1116 | uint16_t *out_ver); | 1130 | uint16_t *out_ver, uint16_t *out_proto_ver); |
1117 | int ssl_downgrade_max_version(SSL *s, uint16_t *max_ver); | 1131 | int ssl_downgrade_max_version(SSL *s, uint16_t *max_ver); |
1118 | int ssl_legacy_stack_version(SSL *s, uint16_t version); | 1132 | int ssl_legacy_stack_version(SSL *s, uint16_t version); |
1119 | int ssl_cipher_in_list(STACK_OF(SSL_CIPHER) *ciphers, const SSL_CIPHER *cipher); | 1133 | int ssl_cipher_in_list(STACK_OF(SSL_CIPHER) *ciphers, const SSL_CIPHER *cipher); |
diff --git a/src/lib/libssl/ssl_versions.c b/src/lib/libssl/ssl_versions.c index 2245ae15b5..1ee5ed312c 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.10 2021/02/20 08:30:52 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_versions.c,v 1.11 2021/02/20 09:43:29 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 | * |
@@ -36,12 +36,13 @@ ssl_clamp_version_range(uint16_t *min_ver, uint16_t *max_ver, | |||
36 | 36 | ||
37 | int | 37 | int |
38 | ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver, | 38 | ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver, |
39 | uint16_t *out_ver) | 39 | uint16_t *out_ver, uint16_t *out_proto_ver) |
40 | { | 40 | { |
41 | uint16_t min_version, max_version; | 41 | uint16_t min_version, max_version; |
42 | 42 | ||
43 | if (ver == 0) { | 43 | if (ver == 0) { |
44 | *out_ver = meth->internal->min_version; | 44 | *out_ver = meth->internal->min_version; |
45 | *out_proto_ver = 0; | ||
45 | return 1; | 46 | return 1; |
46 | } | 47 | } |
47 | 48 | ||
@@ -52,19 +53,20 @@ ssl_version_set_min(const SSL_METHOD *meth, uint16_t ver, uint16_t max_ver, | |||
52 | meth->internal->min_version, meth->internal->max_version)) | 53 | meth->internal->min_version, meth->internal->max_version)) |
53 | return 0; | 54 | return 0; |
54 | 55 | ||
55 | *out_ver = min_version; | 56 | *out_ver = *out_proto_ver = min_version; |
56 | 57 | ||
57 | return 1; | 58 | return 1; |
58 | } | 59 | } |
59 | 60 | ||
60 | int | 61 | int |
61 | ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver, | 62 | ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver, |
62 | uint16_t *out_ver) | 63 | uint16_t *out_ver, uint16_t *out_proto_ver) |
63 | { | 64 | { |
64 | uint16_t min_version, max_version; | 65 | uint16_t min_version, max_version; |
65 | 66 | ||
66 | if (ver == 0) { | 67 | if (ver == 0) { |
67 | *out_ver = meth->internal->max_version; | 68 | *out_ver = meth->internal->max_version; |
69 | *out_proto_ver = 0; | ||
68 | return 1; | 70 | return 1; |
69 | } | 71 | } |
70 | 72 | ||
@@ -75,7 +77,7 @@ ssl_version_set_max(const SSL_METHOD *meth, uint16_t ver, uint16_t min_ver, | |||
75 | meth->internal->min_version, meth->internal->max_version)) | 77 | meth->internal->min_version, meth->internal->max_version)) |
76 | return 0; | 78 | return 0; |
77 | 79 | ||
78 | *out_ver = max_version; | 80 | *out_ver = *out_proto_ver = max_version; |
79 | 81 | ||
80 | return 1; | 82 | return 1; |
81 | } | 83 | } |