summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2021-06-29 19:56:11 +0000
committerjsing <>2021-06-29 19:56:11 +0000
commit7c7e8559fa82726509586a00b183c2b60fee576e (patch)
treec2f016c9ad983b0d50f3b660f4b8ce91c0206dea /src
parent7946a3793c5e16cd6b152d6c21f53524e2b0d202 (diff)
downloadopenbsd-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.c25
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
2319static int 2319static int
2320ssl3_send_client_verify_sigalgs(SSL *s, EVP_PKEY *pkey, CBB *cert_verify) 2320ssl3_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)
2532int 2522int
2533ssl3_send_client_verify(SSL *s) 2523ssl3_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))