diff options
-rw-r--r-- | src/lib/libssl/ssl_clnt.c | 7 | ||||
-rw-r--r-- | src/lib/libssl/ssl_sigalgs.c | 24 | ||||
-rw-r--r-- | src/lib/libssl/ssl_sigalgs.h | 14 | ||||
-rw-r--r-- | src/lib/libssl/ssl_srvr.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/tls13_client.c | 6 | ||||
-rw-r--r-- | src/lib/libssl/tls13_server.c | 6 |
6 files changed, 31 insertions, 32 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c index c092fe4c89..fac30b26aa 100644 --- a/src/lib/libssl/ssl_clnt.c +++ b/src/lib/libssl/ssl_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_clnt.c,v 1.100 2021/06/27 18:09:07 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_clnt.c,v 1.101 2021/06/27 18:15:35 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 | * |
@@ -1550,8 +1550,9 @@ ssl3_get_server_key_exchange(SSL *s) | |||
1550 | 1550 | ||
1551 | if (!CBS_get_u16(&cbs, &sigalg_value)) | 1551 | if (!CBS_get_u16(&cbs, &sigalg_value)) |
1552 | goto decode_err; | 1552 | goto decode_err; |
1553 | if ((sigalg = ssl_sigalg_from_value(sigalg_value, | 1553 | if ((sigalg = ssl_sigalg_from_value( |
1554 | tls12_sigalgs, tls12_sigalgs_len)) == NULL) { | 1554 | S3I(s)->hs.negotiated_tls_version, |
1555 | sigalg_value)) == NULL) { | ||
1555 | SSLerror(s, SSL_R_UNKNOWN_DIGEST); | 1556 | SSLerror(s, SSL_R_UNKNOWN_DIGEST); |
1556 | al = SSL_AD_DECODE_ERROR; | 1557 | al = SSL_AD_DECODE_ERROR; |
1557 | goto fatal_err; | 1558 | goto fatal_err; |
diff --git a/src/lib/libssl/ssl_sigalgs.c b/src/lib/libssl/ssl_sigalgs.c index 8c7f6d673a..f2238b4fda 100644 --- a/src/lib/libssl/ssl_sigalgs.c +++ b/src/lib/libssl/ssl_sigalgs.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_sigalgs.c,v 1.28 2021/06/27 18:09:07 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_sigalgs.c,v 1.29 2021/06/27 18:15:35 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018-2020 Bob Beck <beck@openbsd.org> | 3 | * Copyright (c) 2018-2020 Bob Beck <beck@openbsd.org> |
4 | * | 4 | * |
@@ -188,12 +188,12 @@ ssl_sigalgs_for_version(uint16_t tls_version, const uint16_t **out_values, | |||
188 | } | 188 | } |
189 | 189 | ||
190 | const struct ssl_sigalg * | 190 | const struct ssl_sigalg * |
191 | ssl_sigalg_lookup(uint16_t sigalg) | 191 | ssl_sigalg_lookup(uint16_t value) |
192 | { | 192 | { |
193 | int i; | 193 | int i; |
194 | 194 | ||
195 | for (i = 0; sigalgs[i].value != SIGALG_NONE; i++) { | 195 | for (i = 0; sigalgs[i].value != SIGALG_NONE; i++) { |
196 | if (sigalgs[i].value == sigalg) | 196 | if (sigalgs[i].value == value) |
197 | return &sigalgs[i]; | 197 | return &sigalgs[i]; |
198 | } | 198 | } |
199 | 199 | ||
@@ -201,13 +201,17 @@ ssl_sigalg_lookup(uint16_t sigalg) | |||
201 | } | 201 | } |
202 | 202 | ||
203 | const struct ssl_sigalg * | 203 | const struct ssl_sigalg * |
204 | ssl_sigalg_from_value(uint16_t sigalg, const uint16_t *values, size_t len) | 204 | ssl_sigalg_from_value(uint16_t tls_version, uint16_t value) |
205 | { | 205 | { |
206 | const uint16_t *values; | ||
207 | size_t len; | ||
206 | int i; | 208 | int i; |
207 | 209 | ||
210 | ssl_sigalgs_for_version(tls_version, &values, &len); | ||
211 | |||
208 | for (i = 0; i < len; i++) { | 212 | for (i = 0; i < len; i++) { |
209 | if (values[i] == sigalg) | 213 | if (values[i] == value) |
210 | return ssl_sigalg_lookup(sigalg); | 214 | return ssl_sigalg_lookup(value); |
211 | } | 215 | } |
212 | 216 | ||
213 | return NULL; | 217 | return NULL; |
@@ -322,14 +326,14 @@ ssl_sigalg_select(SSL *s, EVP_PKEY *pkey) | |||
322 | */ | 326 | */ |
323 | CBS_init(&cbs, S3I(s)->hs.sigalgs, S3I(s)->hs.sigalgs_len); | 327 | CBS_init(&cbs, S3I(s)->hs.sigalgs, S3I(s)->hs.sigalgs_len); |
324 | while (CBS_len(&cbs) > 0) { | 328 | while (CBS_len(&cbs) > 0) { |
325 | uint16_t sig_alg; | ||
326 | const struct ssl_sigalg *sigalg; | 329 | const struct ssl_sigalg *sigalg; |
330 | uint16_t sigalg_value; | ||
327 | 331 | ||
328 | if (!CBS_get_u16(&cbs, &sig_alg)) | 332 | if (!CBS_get_u16(&cbs, &sigalg_value)) |
329 | return 0; | 333 | return 0; |
330 | 334 | ||
331 | if ((sigalg = ssl_sigalg_from_value(sig_alg, tls_sigalgs, | 335 | if ((sigalg = ssl_sigalg_from_value( |
332 | tls_sigalgs_len)) == NULL) | 336 | S3I(s)->hs.negotiated_tls_version, sigalg_value)) == NULL) |
333 | continue; | 337 | continue; |
334 | 338 | ||
335 | /* RSA cannot be used without PSS in TLSv1.3. */ | 339 | /* RSA cannot be used without PSS in TLSv1.3. */ |
diff --git a/src/lib/libssl/ssl_sigalgs.h b/src/lib/libssl/ssl_sigalgs.h index 64cf0bb73b..c91e66a5a9 100644 --- a/src/lib/libssl/ssl_sigalgs.h +++ b/src/lib/libssl/ssl_sigalgs.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_sigalgs.h,v 1.19 2021/06/27 18:09:07 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_sigalgs.h,v 1.20 2021/06/27 18:15:35 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018-2019 Bob Beck <beck@openbsd.org> | 3 | * Copyright (c) 2018-2019 Bob Beck <beck@openbsd.org> |
4 | * | 4 | * |
@@ -55,7 +55,7 @@ __BEGIN_HIDDEN_DECLS | |||
55 | #define SIGALG_GOSTR12_256_STREEBOG_256 0xEEEE | 55 | #define SIGALG_GOSTR12_256_STREEBOG_256 0xEEEE |
56 | #define SIGALG_GOSTR01_GOST94 0xEDED | 56 | #define SIGALG_GOSTR01_GOST94 0xEDED |
57 | 57 | ||
58 | /* Legacy sigalg for < 1.2 same value as boring uses*/ | 58 | /* Legacy sigalg for < TLSv1.2 same value as BoringSSL uses. */ |
59 | #define SIGALG_RSA_PKCS1_MD5_SHA1 0xFF01 | 59 | #define SIGALG_RSA_PKCS1_MD5_SHA1 0xFF01 |
60 | 60 | ||
61 | #define SIGALG_FLAG_RSA_PSS 0x00000001 | 61 | #define SIGALG_FLAG_RSA_PSS 0x00000001 |
@@ -68,16 +68,10 @@ struct ssl_sigalg { | |||
68 | int flags; | 68 | int flags; |
69 | }; | 69 | }; |
70 | 70 | ||
71 | extern const uint16_t tls12_sigalgs[]; | ||
72 | extern const size_t tls12_sigalgs_len; | ||
73 | extern const uint16_t tls13_sigalgs[]; | ||
74 | extern const size_t tls13_sigalgs_len; | ||
75 | |||
76 | const struct ssl_sigalg *ssl_sigalg_lookup(uint16_t sigalg); | 71 | const struct ssl_sigalg *ssl_sigalg_lookup(uint16_t sigalg); |
77 | const struct ssl_sigalg *ssl_sigalg_from_value(uint16_t sigalg, | 72 | const struct ssl_sigalg *ssl_sigalg_from_value(uint16_t tls_version, |
78 | const uint16_t *values, size_t len); | 73 | uint16_t value); |
79 | int ssl_sigalgs_build(uint16_t tls_version, CBB *cbb); | 74 | int ssl_sigalgs_build(uint16_t tls_version, CBB *cbb); |
80 | int ssl_sigalg_pkey_check(uint16_t sigalg, EVP_PKEY *pk); | ||
81 | int ssl_sigalg_pkey_ok(const struct ssl_sigalg *sigalg, EVP_PKEY *pkey, | 75 | int ssl_sigalg_pkey_ok(const struct ssl_sigalg *sigalg, EVP_PKEY *pkey, |
82 | int check_curve); | 76 | int check_curve); |
83 | const struct ssl_sigalg *ssl_sigalg_select(SSL *s, EVP_PKEY *pkey); | 77 | const struct ssl_sigalg *ssl_sigalg_select(SSL *s, EVP_PKEY *pkey); |
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c index 201f600a3e..259c6679f2 100644 --- a/src/lib/libssl/ssl_srvr.c +++ b/src/lib/libssl/ssl_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_srvr.c,v 1.113 2021/06/27 18:09:07 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_srvr.c,v 1.114 2021/06/27 18:15:35 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 | * |
@@ -2192,8 +2192,8 @@ ssl3_get_cert_verify(SSL *s) | |||
2192 | 2192 | ||
2193 | if (!CBS_get_u16(&cbs, &sigalg_value)) | 2193 | if (!CBS_get_u16(&cbs, &sigalg_value)) |
2194 | goto decode_err; | 2194 | goto decode_err; |
2195 | if ((sigalg = ssl_sigalg_from_value(sigalg_value, | 2195 | if ((sigalg = ssl_sigalg_from_value( |
2196 | tls12_sigalgs, tls12_sigalgs_len)) == NULL || | 2196 | S3I(s)->hs.negotiated_tls_version, sigalg_value)) == NULL || |
2197 | (md = sigalg->md()) == NULL) { | 2197 | (md = sigalg->md()) == NULL) { |
2198 | SSLerror(s, SSL_R_UNKNOWN_DIGEST); | 2198 | SSLerror(s, SSL_R_UNKNOWN_DIGEST); |
2199 | al = SSL_AD_DECODE_ERROR; | 2199 | al = SSL_AD_DECODE_ERROR; |
diff --git a/src/lib/libssl/tls13_client.c b/src/lib/libssl/tls13_client.c index de9316e8d7..644b16e26c 100644 --- a/src/lib/libssl/tls13_client.c +++ b/src/lib/libssl/tls13_client.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_client.c,v 1.81 2021/06/27 18:09:07 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_client.c,v 1.82 2021/06/27 18:15:35 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -671,8 +671,8 @@ tls13_server_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
671 | if (!CBS_get_u16_length_prefixed(cbs, &signature)) | 671 | if (!CBS_get_u16_length_prefixed(cbs, &signature)) |
672 | goto err; | 672 | goto err; |
673 | 673 | ||
674 | if ((sigalg = ssl_sigalg_from_value(signature_scheme, | 674 | if ((sigalg = ssl_sigalg_from_value(ctx->hs->negotiated_tls_version, |
675 | tls13_sigalgs, tls13_sigalgs_len)) == NULL) | 675 | signature_scheme)) == NULL) |
676 | goto err; | 676 | goto err; |
677 | 677 | ||
678 | if (!CBB_init(&cbb, 0)) | 678 | if (!CBB_init(&cbb, 0)) |
diff --git a/src/lib/libssl/tls13_server.c b/src/lib/libssl/tls13_server.c index 8f47bdfa88..b68a2f9294 100644 --- a/src/lib/libssl/tls13_server.c +++ b/src/lib/libssl/tls13_server.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_server.c,v 1.79 2021/06/27 18:09:07 jsing Exp $ */ | 1 | /* $OpenBSD: tls13_server.c,v 1.80 2021/06/27 18:15:35 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2019, 2020 Joel Sing <jsing@openbsd.org> |
4 | * Copyright (c) 2020 Bob Beck <beck@openbsd.org> | 4 | * Copyright (c) 2020 Bob Beck <beck@openbsd.org> |
@@ -970,8 +970,8 @@ tls13_client_certificate_verify_recv(struct tls13_ctx *ctx, CBS *cbs) | |||
970 | if (!CBS_get_u16_length_prefixed(cbs, &signature)) | 970 | if (!CBS_get_u16_length_prefixed(cbs, &signature)) |
971 | goto err; | 971 | goto err; |
972 | 972 | ||
973 | if ((sigalg = ssl_sigalg_from_value(signature_scheme, | 973 | if ((sigalg = ssl_sigalg_from_value(ctx->hs->negotiated_tls_version, |
974 | tls13_sigalgs, tls13_sigalgs_len)) == NULL) | 974 | signature_scheme)) == NULL) |
975 | goto err; | 975 | goto err; |
976 | 976 | ||
977 | if (!CBB_init(&cbb, 0)) | 977 | if (!CBB_init(&cbb, 0)) |