diff options
author | jsing <> | 2021-06-29 19:56:11 +0000 |
---|---|---|
committer | jsing <> | 2021-06-29 19:56:11 +0000 |
commit | 7c7e8559fa82726509586a00b183c2b60fee576e (patch) | |
tree | c2f016c9ad983b0d50f3b660f4b8ce91c0206dea /src | |
parent | 7946a3793c5e16cd6b152d6c21f53524e2b0d202 (diff) | |
download | openbsd-7c7e8559fa82726509586a00b183c2b60fee576e.tar.gz openbsd-7c7e8559fa82726509586a00b183c2b60fee576e.tar.bz2 openbsd-7c7e8559fa82726509586a00b183c2b60fee576e.zip |
Pull sigalg selection up into ssl3_send_client_verify().
This means that we do sigalg selection for all cases, including those
where are are not sending sigalgs. This is needed in order to track our
signature type in legacy cases.
ok tb@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libssl/ssl_clnt.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c index a7a7bf93a5..4085fed39b 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.105 2021/06/29 19:43:15 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_clnt.c,v 1.106 2021/06/29 19:56:11 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 | * |
@@ -2317,9 +2317,9 @@ ssl3_send_client_key_exchange(SSL *s) | |||
2317 | } | 2317 | } |
2318 | 2318 | ||
2319 | static int | 2319 | static int |
2320 | ssl3_send_client_verify_sigalgs(SSL *s, EVP_PKEY *pkey, CBB *cert_verify) | 2320 | ssl3_send_client_verify_sigalgs(SSL *s, EVP_PKEY *pkey, |
2321 | const struct ssl_sigalg *sigalg, CBB *cert_verify) | ||
2321 | { | 2322 | { |
2322 | const struct ssl_sigalg *sigalg; | ||
2323 | CBB cbb_signature; | 2323 | CBB cbb_signature; |
2324 | EVP_PKEY_CTX *pctx = NULL; | 2324 | EVP_PKEY_CTX *pctx = NULL; |
2325 | EVP_MD_CTX mctx; | 2325 | EVP_MD_CTX mctx; |
@@ -2331,16 +2331,6 @@ ssl3_send_client_verify_sigalgs(SSL *s, EVP_PKEY *pkey, CBB *cert_verify) | |||
2331 | 2331 | ||
2332 | EVP_MD_CTX_init(&mctx); | 2332 | EVP_MD_CTX_init(&mctx); |
2333 | 2333 | ||
2334 | if ((sigalg = ssl_sigalg_select(s, pkey)) == NULL) { | ||
2335 | SSLerror(s, SSL_R_SIGNATURE_ALGORITHMS_ERROR); | ||
2336 | goto err; | ||
2337 | } | ||
2338 | if ((md = sigalg->md()) == NULL) { | ||
2339 | SSLerror(s, SSL_R_UNKNOWN_DIGEST); | ||
2340 | goto err; | ||
2341 | } | ||
2342 | S3I(s)->hs.our_sigalg = sigalg; | ||
2343 | |||
2344 | if (!tls1_transcript_data(s, &hdata, &hdata_len)) { | 2334 | if (!tls1_transcript_data(s, &hdata, &hdata_len)) { |
2345 | SSLerror(s, ERR_R_INTERNAL_ERROR); | 2335 | SSLerror(s, ERR_R_INTERNAL_ERROR); |
2346 | goto err; | 2336 | goto err; |
@@ -2532,6 +2522,7 @@ ssl3_send_client_verify_gost(SSL *s, EVP_PKEY *pkey, CBB *cert_verify) | |||
2532 | int | 2522 | int |
2533 | ssl3_send_client_verify(SSL *s) | 2523 | ssl3_send_client_verify(SSL *s) |
2534 | { | 2524 | { |
2525 | const struct ssl_sigalg *sigalg; | ||
2535 | CBB cbb, cert_verify; | 2526 | CBB cbb, cert_verify; |
2536 | EVP_PKEY *pkey; | 2527 | EVP_PKEY *pkey; |
2537 | 2528 | ||
@@ -2543,13 +2534,19 @@ ssl3_send_client_verify(SSL *s) | |||
2543 | goto err; | 2534 | goto err; |
2544 | 2535 | ||
2545 | pkey = s->cert->key->privatekey; | 2536 | pkey = s->cert->key->privatekey; |
2537 | if ((sigalg = ssl_sigalg_select(s, pkey)) == NULL) { | ||
2538 | SSLerror(s, SSL_R_SIGNATURE_ALGORITHMS_ERROR); | ||
2539 | goto err; | ||
2540 | } | ||
2541 | S3I(s)->hs.our_sigalg = sigalg; | ||
2546 | 2542 | ||
2547 | /* | 2543 | /* |
2548 | * For TLS v1.2 send signature algorithm and signature using | 2544 | * For TLS v1.2 send signature algorithm and signature using |
2549 | * agreed digest and cached handshake records. | 2545 | * agreed digest and cached handshake records. |
2550 | */ | 2546 | */ |
2551 | if (SSL_USE_SIGALGS(s)) { | 2547 | if (SSL_USE_SIGALGS(s)) { |
2552 | if (!ssl3_send_client_verify_sigalgs(s, pkey, &cert_verify)) | 2548 | if (!ssl3_send_client_verify_sigalgs(s, pkey, sigalg, |
2549 | &cert_verify)) | ||
2553 | goto err; | 2550 | goto err; |
2554 | } else if (pkey->type == EVP_PKEY_RSA) { | 2551 | } else if (pkey->type == EVP_PKEY_RSA) { |
2555 | if (!ssl3_send_client_verify_rsa(s, pkey, &cert_verify)) | 2552 | if (!ssl3_send_client_verify_rsa(s, pkey, &cert_verify)) |