summaryrefslogtreecommitdiff
path: root/src/lib/libssl/ssl_srvr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/ssl_srvr.c')
-rw-r--r--src/lib/libssl/ssl_srvr.c36
1 files changed, 13 insertions, 23 deletions
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index af9152d3de..0d82271325 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.51 2018/11/08 22:28:52 jsing Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.52 2018/11/09 00:34:55 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 *
@@ -166,6 +166,7 @@
166#include <openssl/x509.h> 166#include <openssl/x509.h>
167 167
168#include "bytestring.h" 168#include "bytestring.h"
169#include "ssl_sigalgs.h"
169#include "ssl_tlsext.h" 170#include "ssl_tlsext.h"
170 171
171int 172int
@@ -1545,7 +1546,10 @@ ssl3_send_server_key_exchange(SSL *s)
1545 1546
1546 /* Send signature algorithm. */ 1547 /* Send signature algorithm. */
1547 if (SSL_USE_SIGALGS(s)) { 1548 if (SSL_USE_SIGALGS(s)) {
1548 if (!tls12_get_hashandsig(&server_kex, pkey, md)) { 1549 uint16_t sigalg;
1550 if ((sigalg = ssl_sigalg_value(pkey, md)) ==
1551 SIGALG_NONE ||
1552 !CBB_add_u16(&server_kex, sigalg)) {
1549 /* Should never happen */ 1553 /* Should never happen */
1550 al = SSL_AD_INTERNAL_ERROR; 1554 al = SSL_AD_INTERNAL_ERROR;
1551 SSLerror(s, ERR_R_INTERNAL_ERROR); 1555 SSLerror(s, ERR_R_INTERNAL_ERROR);
@@ -1629,14 +1633,9 @@ ssl3_send_certificate_request(SSL *s)
1629 goto err; 1633 goto err;
1630 1634
1631 if (SSL_USE_SIGALGS(s)) { 1635 if (SSL_USE_SIGALGS(s)) {
1632 unsigned char *sigalgs_data;
1633 size_t sigalgs_len;
1634
1635 tls12_get_req_sig_algs(s, &sigalgs_data, &sigalgs_len);
1636
1637 if (!CBB_add_u16_length_prefixed(&cert_request, &sigalgs)) 1636 if (!CBB_add_u16_length_prefixed(&cert_request, &sigalgs))
1638 goto err; 1637 goto err;
1639 if (!CBB_add_bytes(&sigalgs, sigalgs_data, sigalgs_len)) 1638 if (!ssl_sigalgs_build(&sigalgs))
1640 goto err; 1639 goto err;
1641 } 1640 }
1642 1641
@@ -2089,8 +2088,7 @@ ssl3_get_cert_verify(SSL *s)
2089 EVP_PKEY *pkey = NULL; 2088 EVP_PKEY *pkey = NULL;
2090 X509 *peer = NULL; 2089 X509 *peer = NULL;
2091 EVP_MD_CTX mctx; 2090 EVP_MD_CTX mctx;
2092 uint8_t hash_id, sig_id; 2091 int al, ok, verify;
2093 int al, ok, sigalg, verify;
2094 const unsigned char *hdata; 2092 const unsigned char *hdata;
2095 size_t hdatalen; 2093 size_t hdatalen;
2096 int type = 0; 2094 int type = 0;
@@ -2157,24 +2155,16 @@ ssl3_get_cert_verify(SSL *s)
2157 goto err; 2155 goto err;
2158 } else { 2156 } else {
2159 if (SSL_USE_SIGALGS(s)) { 2157 if (SSL_USE_SIGALGS(s)) {
2160 if (!CBS_get_u8(&cbs, &hash_id)) 2158 uint16_t sigalg;
2161 goto truncated;
2162 if (!CBS_get_u8(&cbs, &sig_id))
2163 goto truncated;
2164 2159
2165 if ((md = tls12_get_hash(hash_id)) == NULL) { 2160 if (!CBS_get_u16(&cbs, &sigalg))
2161 goto truncated;
2162 if ((md = ssl_sigalg_md(sigalg)) == NULL) {
2166 SSLerror(s, SSL_R_UNKNOWN_DIGEST); 2163 SSLerror(s, SSL_R_UNKNOWN_DIGEST);
2167 al = SSL_AD_DECODE_ERROR; 2164 al = SSL_AD_DECODE_ERROR;
2168 goto f_err; 2165 goto f_err;
2169 } 2166 }
2170 2167 if (!ssl_sigalg_pkey_check(sigalg, pkey)) {
2171 /* Check key type is consistent with signature. */
2172 if ((sigalg = tls12_get_sigid(pkey)) == -1) {
2173 /* Should never happen */
2174 SSLerror(s, ERR_R_INTERNAL_ERROR);
2175 goto err;
2176 }
2177 if (sigalg != sig_id) {
2178 SSLerror(s, SSL_R_WRONG_SIGNATURE_TYPE); 2168 SSLerror(s, SSL_R_WRONG_SIGNATURE_TYPE);
2179 al = SSL_AD_DECODE_ERROR; 2169 al = SSL_AD_DECODE_ERROR;
2180 goto f_err; 2170 goto f_err;