diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib/libssl/ssl_clnt.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c index e9e098aa28..ac2cddacf9 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.40 2018/11/09 17:43:31 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_clnt.c,v 1.41 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 | * |
@@ -1509,17 +1509,19 @@ ssl3_get_server_key_exchange(SSL *s) | |||
1509 | /* if it was signed, check the signature */ | 1509 | /* if it was signed, check the signature */ |
1510 | if (pkey != NULL) { | 1510 | if (pkey != NULL) { |
1511 | if (SSL_USE_SIGALGS(s)) { | 1511 | if (SSL_USE_SIGALGS(s)) { |
1512 | uint16_t sigalg; | 1512 | const struct ssl_sigalg *sigalg; |
1513 | uint16_t sigalg_value; | ||
1513 | 1514 | ||
1514 | if (!CBS_get_u16(&cbs, &sigalg)) | 1515 | if (!CBS_get_u16(&cbs, &sigalg_value)) |
1515 | goto truncated; | 1516 | goto truncated; |
1516 | if ((md = ssl_sigalg_md(sigalg, tls12_sigalgs, | 1517 | if ((sigalg = ssl_sigalg(sigalg_value, tls12_sigalgs, |
1517 | tls12_sigalgs_len)) == NULL) { | 1518 | tls12_sigalgs_len)) == NULL || |
1519 | (md = sigalg->md()) == NULL) { | ||
1518 | SSLerror(s, SSL_R_UNKNOWN_DIGEST); | 1520 | SSLerror(s, SSL_R_UNKNOWN_DIGEST); |
1519 | al = SSL_AD_DECODE_ERROR; | 1521 | al = SSL_AD_DECODE_ERROR; |
1520 | goto f_err; | 1522 | goto f_err; |
1521 | } | 1523 | } |
1522 | if (!ssl_sigalg_pkey_check(sigalg, pkey)) { | 1524 | if (sigalg->key_type != pkey->type) { |
1523 | SSLerror(s, SSL_R_WRONG_SIGNATURE_TYPE); | 1525 | SSLerror(s, SSL_R_WRONG_SIGNATURE_TYPE); |
1524 | al = SSL_AD_DECODE_ERROR; | 1526 | al = SSL_AD_DECODE_ERROR; |
1525 | goto f_err; | 1527 | goto f_err; |
@@ -2405,13 +2407,10 @@ ssl3_send_client_verify(SSL *s) | |||
2405 | * using agreed digest and cached handshake records. | 2407 | * using agreed digest and cached handshake records. |
2406 | */ | 2408 | */ |
2407 | if (SSL_USE_SIGALGS(s)) { | 2409 | if (SSL_USE_SIGALGS(s)) { |
2408 | uint16_t sigalg; | 2410 | md = s->cert->key->sigalg->md(); |
2409 | |||
2410 | md = s->cert->key->digest; | ||
2411 | if (!tls1_transcript_data(s, &hdata, &hdatalen) || | 2411 | if (!tls1_transcript_data(s, &hdata, &hdatalen) || |
2412 | (sigalg = ssl_sigalg_value(pkey, md)) == | 2412 | !CBB_add_u16(&cert_verify, |
2413 | SIGALG_NONE || | 2413 | s->cert->key->sigalg->value)) { |
2414 | !CBB_add_u16(&cert_verify, sigalg)) { | ||
2415 | SSLerror(s, ERR_R_INTERNAL_ERROR); | 2414 | SSLerror(s, ERR_R_INTERNAL_ERROR); |
2416 | goto err; | 2415 | goto err; |
2417 | } | 2416 | } |
@@ -2457,6 +2456,7 @@ ssl3_send_client_verify(SSL *s) | |||
2457 | if (!EVP_DigestInit_ex(&mctx, md, NULL) || | 2456 | if (!EVP_DigestInit_ex(&mctx, md, NULL) || |
2458 | !EVP_DigestUpdate(&mctx, hdata, hdatalen) || | 2457 | !EVP_DigestUpdate(&mctx, hdata, hdatalen) || |
2459 | !EVP_DigestFinal(&mctx, signbuf, &u) || | 2458 | !EVP_DigestFinal(&mctx, signbuf, &u) || |
2459 | |||
2460 | (EVP_PKEY_CTX_set_signature_md(pctx, md) <= 0) || | 2460 | (EVP_PKEY_CTX_set_signature_md(pctx, md) <= 0) || |
2461 | (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN, | 2461 | (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN, |
2462 | EVP_PKEY_CTRL_GOST_SIG_FORMAT, | 2462 | EVP_PKEY_CTRL_GOST_SIG_FORMAT, |