summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_srvr.c
diff options
context:
space:
mode:
authorbeck <>2018-11-10 01:19:09 +0000
committerbeck <>2018-11-10 01:19:09 +0000
commit1dd4b0628e51e31516f047e02f51b266d74539df (patch)
tree7a38d18aacac062bf470573f237552369c229a80 /src/lib/libssl/ssl_srvr.c
parentbd7257fa650660bcef2977e47cf52e067801b716 (diff)
downloadopenbsd-1dd4b0628e51e31516f047e02f51b266d74539df.tar.gz
openbsd-1dd4b0628e51e31516f047e02f51b266d74539df.tar.bz2
openbsd-1dd4b0628e51e31516f047e02f51b266d74539df.zip
Stop keeping track of sigalgs by guessing it from digest and pkey,
just keep the sigalg around so we can remember what we actually decided to use. ok jsing@
Diffstat (limited to '')
-rw-r--r--src/lib/libssl/ssl_srvr.c35
1 files changed, 12 insertions, 23 deletions
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index 51e5475f54..587a538060 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.54 2018/11/09 05:43:39 beck Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.55 2018/11/10 01:19:09 beck 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 *
@@ -1483,6 +1483,7 @@ int
1483ssl3_send_server_key_exchange(SSL *s) 1483ssl3_send_server_key_exchange(SSL *s)
1484{ 1484{
1485 CBB cbb, cbb_params, cbb_signature, server_kex; 1485 CBB cbb, cbb_params, cbb_signature, server_kex;
1486 const struct ssl_sigalg *sigalg = NULL;
1486 unsigned char *signature = NULL; 1487 unsigned char *signature = NULL;
1487 unsigned int signature_len; 1488 unsigned int signature_len;
1488 unsigned char *params = NULL; 1489 unsigned char *params = NULL;
@@ -1529,28 +1530,14 @@ ssl3_send_server_key_exchange(SSL *s)
1529 /* Add signature unless anonymous. */ 1530 /* Add signature unless anonymous. */
1530 if (!(S3I(s)->hs.new_cipher->algorithm_auth & SSL_aNULL)) { 1531 if (!(S3I(s)->hs.new_cipher->algorithm_auth & SSL_aNULL)) {
1531 if ((pkey = ssl_get_sign_pkey(s, S3I(s)->hs.new_cipher, 1532 if ((pkey = ssl_get_sign_pkey(s, S3I(s)->hs.new_cipher,
1532 &md)) == NULL) { 1533 &md, &sigalg)) == NULL) {
1533 al = SSL_AD_DECODE_ERROR; 1534 al = SSL_AD_DECODE_ERROR;
1534 goto f_err; 1535 goto f_err;
1535 } 1536 }
1536 1537
1537 if (pkey->type == EVP_PKEY_RSA && !SSL_USE_SIGALGS(s))
1538 md = EVP_md5_sha1();
1539
1540 if (md == NULL) {
1541 /* Is this error check actually needed? */
1542 al = SSL_AD_HANDSHAKE_FAILURE;
1543 SSLerror(s, SSL_R_UNKNOWN_PKEY_TYPE);
1544 goto f_err;
1545 }
1546
1547 /* Send signature algorithm. */ 1538 /* Send signature algorithm. */
1548 if (SSL_USE_SIGALGS(s)) { 1539 if (SSL_USE_SIGALGS(s)) {
1549 uint16_t sigalg; 1540 if (!CBB_add_u16(&server_kex, sigalg->value)) {
1550 if ((sigalg = ssl_sigalg_value(pkey, md)) ==
1551 SIGALG_NONE ||
1552 !CBB_add_u16(&server_kex, sigalg)) {
1553 /* Should never happen */
1554 al = SSL_AD_INTERNAL_ERROR; 1541 al = SSL_AD_INTERNAL_ERROR;
1555 SSLerror(s, ERR_R_INTERNAL_ERROR); 1542 SSLerror(s, ERR_R_INTERNAL_ERROR);
1556 goto f_err; 1543 goto f_err;
@@ -1595,7 +1582,7 @@ ssl3_send_server_key_exchange(SSL *s)
1595 free(signature); 1582 free(signature);
1596 1583
1597 return (ssl3_handshake_write(s)); 1584 return (ssl3_handshake_write(s));
1598 1585
1599 f_err: 1586 f_err:
1600 ssl3_send_alert(s, SSL3_AL_FATAL, al); 1587 ssl3_send_alert(s, SSL3_AL_FATAL, al);
1601 err: 1588 err:
@@ -2155,17 +2142,19 @@ ssl3_get_cert_verify(SSL *s)
2155 goto err; 2142 goto err;
2156 } else { 2143 } else {
2157 if (SSL_USE_SIGALGS(s)) { 2144 if (SSL_USE_SIGALGS(s)) {
2158 uint16_t sigalg; 2145 const struct ssl_sigalg *sigalg;
2146 uint16_t sigalg_value;
2159 2147
2160 if (!CBS_get_u16(&cbs, &sigalg)) 2148 if (!CBS_get_u16(&cbs, &sigalg_value))
2161 goto truncated; 2149 goto truncated;
2162 if ((md = ssl_sigalg_md(sigalg, tls12_sigalgs, 2150 if ((sigalg = ssl_sigalg(sigalg_value, tls12_sigalgs,
2163 tls12_sigalgs_len)) == NULL) { 2151 tls12_sigalgs_len)) == NULL ||
2152 (md = sigalg->md()) == NULL) {
2164 SSLerror(s, SSL_R_UNKNOWN_DIGEST); 2153 SSLerror(s, SSL_R_UNKNOWN_DIGEST);
2165 al = SSL_AD_DECODE_ERROR; 2154 al = SSL_AD_DECODE_ERROR;
2166 goto f_err; 2155 goto f_err;
2167 } 2156 }
2168 if (!ssl_sigalg_pkey_check(sigalg, pkey)) { 2157 if (sigalg->key_type != pkey->type) {
2169 SSLerror(s, SSL_R_WRONG_SIGNATURE_TYPE); 2158 SSLerror(s, SSL_R_WRONG_SIGNATURE_TYPE);
2170 al = SSL_AD_DECODE_ERROR; 2159 al = SSL_AD_DECODE_ERROR;
2171 goto f_err; 2160 goto f_err;