diff options
Diffstat (limited to '')
-rw-r--r-- | src/lib/libssl/t1_lib.c | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/src/lib/libssl/t1_lib.c b/src/lib/libssl/t1_lib.c index 1fc433cca1..1402996e42 100644 --- a/src/lib/libssl/t1_lib.c +++ b/src/lib/libssl/t1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: t1_lib.c,v 1.149 2018/11/09 00:34:55 beck Exp $ */ | 1 | /* $OpenBSD: t1_lib.c,v 1.150 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 | * |
@@ -1010,26 +1010,25 @@ tls1_process_sigalgs(SSL *s, CBS *cbs) | |||
1010 | if (!SSL_USE_SIGALGS(s)) | 1010 | if (!SSL_USE_SIGALGS(s)) |
1011 | return 1; | 1011 | return 1; |
1012 | 1012 | ||
1013 | c->pkeys[SSL_PKEY_RSA_SIGN].digest = NULL; | 1013 | c->pkeys[SSL_PKEY_RSA_SIGN].sigalg = NULL; |
1014 | c->pkeys[SSL_PKEY_RSA_ENC].digest = NULL; | 1014 | c->pkeys[SSL_PKEY_RSA_ENC].sigalg = NULL; |
1015 | c->pkeys[SSL_PKEY_ECC].digest = NULL; | 1015 | c->pkeys[SSL_PKEY_ECC].sigalg = NULL; |
1016 | #ifndef OPENSSL_NO_GOST | 1016 | #ifndef OPENSSL_NO_GOST |
1017 | c->pkeys[SSL_PKEY_GOST01].digest = NULL; | 1017 | c->pkeys[SSL_PKEY_GOST01].sigalg = NULL; |
1018 | #endif | 1018 | #endif |
1019 | while (CBS_len(cbs) > 0) { | 1019 | while (CBS_len(cbs) > 0) { |
1020 | const EVP_MD *md; | ||
1021 | uint16_t sig_alg; | 1020 | uint16_t sig_alg; |
1022 | const struct ssl_sigalg *sigalg; | 1021 | const struct ssl_sigalg *sigalg; |
1023 | 1022 | ||
1024 | if (!CBS_get_u16(cbs, &sig_alg)) | 1023 | if (!CBS_get_u16(cbs, &sig_alg)) |
1025 | return 0; | 1024 | return 0; |
1026 | 1025 | ||
1027 | if ((sigalg = ssl_sigalg_lookup(sig_alg)) != NULL && | 1026 | if ((sigalg = ssl_sigalg(sig_alg, tls12_sigalgs, |
1028 | c->pkeys[sigalg->pkey_idx].digest == NULL) { | 1027 | tls12_sigalgs_len)) != NULL && |
1029 | md = sigalg->md(); | 1028 | c->pkeys[sigalg->pkey_idx].sigalg == NULL) { |
1030 | c->pkeys[sigalg->pkey_idx].digest = md; | 1029 | c->pkeys[sigalg->pkey_idx].sigalg = sigalg; |
1031 | if (sigalg->pkey_idx == SSL_PKEY_RSA_SIGN) | 1030 | if (sigalg->pkey_idx == SSL_PKEY_RSA_SIGN) |
1032 | c->pkeys[SSL_PKEY_RSA_ENC].digest = md; | 1031 | c->pkeys[SSL_PKEY_RSA_ENC].sigalg = sigalg; |
1033 | } | 1032 | } |
1034 | } | 1033 | } |
1035 | 1034 | ||
@@ -1037,15 +1036,20 @@ tls1_process_sigalgs(SSL *s, CBS *cbs) | |||
1037 | * Set any remaining keys to default values. NOTE: if alg is not | 1036 | * Set any remaining keys to default values. NOTE: if alg is not |
1038 | * supported it stays as NULL. | 1037 | * supported it stays as NULL. |
1039 | */ | 1038 | */ |
1040 | if (c->pkeys[SSL_PKEY_RSA_SIGN].digest == NULL) | 1039 | if (c->pkeys[SSL_PKEY_RSA_SIGN].sigalg == NULL) |
1041 | c->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1(); | 1040 | c->pkeys[SSL_PKEY_RSA_SIGN].sigalg = |
1042 | if (c->pkeys[SSL_PKEY_RSA_ENC].digest == NULL) | 1041 | ssl_sigalg_lookup(SIGALG_RSA_PKCS1_SHA1); |
1043 | c->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1(); | 1042 | if (c->pkeys[SSL_PKEY_RSA_ENC].sigalg == NULL) |
1044 | if (c->pkeys[SSL_PKEY_ECC].digest == NULL) | 1043 | c->pkeys[SSL_PKEY_RSA_ENC].sigalg = |
1045 | c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1(); | 1044 | ssl_sigalg_lookup(SIGALG_RSA_PKCS1_SHA1); |
1045 | if (c->pkeys[SSL_PKEY_ECC].sigalg == NULL) | ||
1046 | c->pkeys[SSL_PKEY_RSA_ENC].sigalg = | ||
1047 | ssl_sigalg_lookup(SIGALG_ECDSA_SHA1); | ||
1048 | |||
1046 | #ifndef OPENSSL_NO_GOST | 1049 | #ifndef OPENSSL_NO_GOST |
1047 | if (c->pkeys[SSL_PKEY_GOST01].digest == NULL) | 1050 | if (c->pkeys[SSL_PKEY_GOST01].sigalg == NULL) |
1048 | c->pkeys[SSL_PKEY_GOST01].digest = EVP_gostr341194(); | 1051 | c->pkeys[SSL_PKEY_GOST01].sigalg = |
1052 | ssl_sigalg_lookup(SIGALG_GOSTR01_GOST94); | ||
1049 | #endif | 1053 | #endif |
1050 | return 1; | 1054 | return 1; |
1051 | } | 1055 | } |