diff options
author | jsing <> | 2014-05-25 13:27:38 +0000 |
---|---|---|
committer | jsing <> | 2014-05-25 13:27:38 +0000 |
commit | fc3ae41e6c3f587c173aca34af47208c06c01668 (patch) | |
tree | 1981463f492523e729cbfd564646012bb0a6574c | |
parent | 272e873b19ba05dbb966cb20a3fa0ca5533b84e2 (diff) | |
download | openbsd-fc3ae41e6c3f587c173aca34af47208c06c01668.tar.gz openbsd-fc3ae41e6c3f587c173aca34af47208c06c01668.tar.bz2 openbsd-fc3ae41e6c3f587c173aca34af47208c06c01668.zip |
The ssl_ciper_get_evp() function is currently overloaded to also return the
compression associated with the SSL session. Based on one of Adam Langley's
chromium diffs, factor out the compression handling code into a separate
ssl_cipher_get_comp() function.
Rewrite the compression handling code to avoid pointless duplication and so
that failures are actually returned to and detectable by the caller.
ok miod@
-rw-r--r-- | src/lib/libssl/src/ssl/s3_enc.c | 15 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl.h | 1 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_ciph.c | 54 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_err.c | 1 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_locl.h | 4 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_txt.c | 4 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/t1_enc.c | 13 | ||||
-rw-r--r-- | src/lib/libssl/ssl.h | 1 | ||||
-rw-r--r-- | src/lib/libssl/ssl_ciph.c | 54 | ||||
-rw-r--r-- | src/lib/libssl/ssl_err.c | 1 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 4 | ||||
-rw-r--r-- | src/lib/libssl/ssl_txt.c | 4 | ||||
-rw-r--r-- | src/lib/libssl/t1_enc.c | 13 |
13 files changed, 107 insertions, 62 deletions
diff --git a/src/lib/libssl/src/ssl/s3_enc.c b/src/lib/libssl/src/ssl/s3_enc.c index 5a45cec1c1..119e7ce1f4 100644 --- a/src/lib/libssl/src/ssl/s3_enc.c +++ b/src/lib/libssl/src/ssl/s3_enc.c | |||
@@ -387,18 +387,21 @@ ssl3_setup_key_block(SSL *s) | |||
387 | if (s->s3->tmp.key_block_length != 0) | 387 | if (s->s3->tmp.key_block_length != 0) |
388 | return (1); | 388 | return (1); |
389 | 389 | ||
390 | if (!ssl_cipher_get_evp(s->session, &c, &hash, NULL, NULL, &comp)) { | 390 | if (!ssl_cipher_get_comp(s->session, &comp)) { |
391 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK, SSL_R_CIPHER_OR_HASH_UNAVAILABLE); | 391 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK, |
392 | SSL_R_CIPHER_COMPRESSION_UNAVAILABLE); | ||
393 | return (0); | ||
394 | } | ||
395 | |||
396 | if (!ssl_cipher_get_evp(s->session, &c, &hash, NULL, NULL)) { | ||
397 | SSLerr(SSL_F_SSL3_SETUP_KEY_BLOCK, | ||
398 | SSL_R_CIPHER_OR_HASH_UNAVAILABLE); | ||
392 | return (0); | 399 | return (0); |
393 | } | 400 | } |
394 | 401 | ||
395 | s->s3->tmp.new_sym_enc = c; | 402 | s->s3->tmp.new_sym_enc = c; |
396 | s->s3->tmp.new_hash = hash; | 403 | s->s3->tmp.new_hash = hash; |
397 | #ifdef OPENSSL_NO_COMP | ||
398 | s->s3->tmp.new_compression = NULL; | ||
399 | #else | ||
400 | s->s3->tmp.new_compression = comp; | 404 | s->s3->tmp.new_compression = comp; |
401 | #endif | ||
402 | 405 | ||
403 | num = EVP_MD_size(hash); | 406 | num = EVP_MD_size(hash); |
404 | if (num < 0) | 407 | if (num < 0) |
diff --git a/src/lib/libssl/src/ssl/ssl.h b/src/lib/libssl/src/ssl/ssl.h index 9744d9783c..6765e3560a 100644 --- a/src/lib/libssl/src/ssl/ssl.h +++ b/src/lib/libssl/src/ssl/ssl.h | |||
@@ -2197,6 +2197,7 @@ void ERR_load_SSL_strings(void); | |||
2197 | #define SSL_R_CERT_LENGTH_MISMATCH 135 | 2197 | #define SSL_R_CERT_LENGTH_MISMATCH 135 |
2198 | #define SSL_R_CHALLENGE_IS_DIFFERENT 136 | 2198 | #define SSL_R_CHALLENGE_IS_DIFFERENT 136 |
2199 | #define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 | 2199 | #define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 |
2200 | #define SSL_R_CIPHER_COMPRESSION_UNAVAILABLE 371 | ||
2200 | #define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 | 2201 | #define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 |
2201 | #define SSL_R_CIPHER_TABLE_SRC_ERROR 139 | 2202 | #define SSL_R_CIPHER_TABLE_SRC_ERROR 139 |
2202 | #define SSL_R_CLIENTHELLO_TLSEXT 226 | 2203 | #define SSL_R_CLIENTHELLO_TLSEXT 226 |
diff --git a/src/lib/libssl/src/ssl/ssl_ciph.c b/src/lib/libssl/src/ssl/ssl_ciph.c index 4ae3312a1a..bd939b7563 100644 --- a/src/lib/libssl/src/ssl/ssl_ciph.c +++ b/src/lib/libssl/src/ssl/ssl_ciph.c | |||
@@ -481,33 +481,45 @@ load_builtin_compressions(void) | |||
481 | } | 481 | } |
482 | #endif | 482 | #endif |
483 | 483 | ||
484 | /* ssl_cipher_get_comp sets comp to the correct SSL_COMP for the given | ||
485 | * session and returns 1. On error it returns 0. */ | ||
484 | int | 486 | int |
485 | ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, | 487 | ssl_cipher_get_comp(const SSL_SESSION *s, SSL_COMP **comp) |
486 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size, SSL_COMP **comp) | ||
487 | { | 488 | { |
489 | SSL_COMP ctmp; | ||
488 | int i; | 490 | int i; |
489 | const SSL_CIPHER *c; | ||
490 | 491 | ||
491 | c = s->cipher; | ||
492 | if (c == NULL) | ||
493 | return (0); | ||
494 | if (comp != NULL) { | ||
495 | SSL_COMP ctmp; | ||
496 | #ifndef OPENSSL_NO_COMP | 492 | #ifndef OPENSSL_NO_COMP |
497 | load_builtin_compressions(); | 493 | load_builtin_compressions(); |
498 | #endif | 494 | #endif |
499 | 495 | ||
500 | *comp = NULL; | 496 | *comp = NULL; |
501 | ctmp.id = s->compress_meth; | 497 | if (s->compress_meth == 0) |
502 | if (ssl_comp_methods != NULL) { | 498 | return 1; |
503 | i = sk_SSL_COMP_find(ssl_comp_methods, &ctmp); | 499 | if (ssl_comp_methods == NULL) |
504 | if (i >= 0) | 500 | return 0; |
505 | *comp = sk_SSL_COMP_value(ssl_comp_methods, i); | 501 | |
506 | else | 502 | ctmp.id = s->compress_meth; |
507 | *comp = NULL; | 503 | i = sk_SSL_COMP_find(ssl_comp_methods, &ctmp); |
508 | } | 504 | if (i >= 0) { |
505 | *comp = sk_SSL_COMP_value(ssl_comp_methods, i); | ||
506 | return 1; | ||
509 | } | 507 | } |
510 | 508 | ||
509 | return 0; | ||
510 | } | ||
511 | |||
512 | int | ||
513 | ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, | ||
514 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size) | ||
515 | { | ||
516 | const SSL_CIPHER *c; | ||
517 | int i; | ||
518 | |||
519 | c = s->cipher; | ||
520 | if (c == NULL) | ||
521 | return (0); | ||
522 | |||
511 | if ((enc == NULL) || (md == NULL)) | 523 | if ((enc == NULL) || (md == NULL)) |
512 | return (0); | 524 | return (0); |
513 | 525 | ||
@@ -732,8 +744,6 @@ ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth, unsigned long | |||
732 | *enc |= SSL_eNULL; | 744 | *enc |= SSL_eNULL; |
733 | #endif | 745 | #endif |
734 | 746 | ||
735 | |||
736 | |||
737 | *enc |= (ssl_cipher_methods[SSL_ENC_DES_IDX ] == NULL) ? SSL_DES : 0; | 747 | *enc |= (ssl_cipher_methods[SSL_ENC_DES_IDX ] == NULL) ? SSL_DES : 0; |
738 | *enc |= (ssl_cipher_methods[SSL_ENC_3DES_IDX] == NULL) ? SSL_3DES : 0; | 748 | *enc |= (ssl_cipher_methods[SSL_ENC_3DES_IDX] == NULL) ? SSL_3DES : 0; |
739 | *enc |= (ssl_cipher_methods[SSL_ENC_RC4_IDX ] == NULL) ? SSL_RC4 : 0; | 749 | *enc |= (ssl_cipher_methods[SSL_ENC_RC4_IDX ] == NULL) ? SSL_RC4 : 0; |
@@ -1684,8 +1694,8 @@ ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n) | |||
1684 | SSL_COMP *ctmp; | 1694 | SSL_COMP *ctmp; |
1685 | int i, nn; | 1695 | int i, nn; |
1686 | 1696 | ||
1687 | if ((n == 0) | 1697 | if ((n == 0) || (sk == NULL)) |
1688 | || (sk == NULL)) return (NULL); | 1698 | return (NULL); |
1689 | nn = sk_SSL_COMP_num(sk); | 1699 | nn = sk_SSL_COMP_num(sk); |
1690 | for (i = 0; i < nn; i++) { | 1700 | for (i = 0; i < nn; i++) { |
1691 | ctmp = sk_SSL_COMP_value(sk, i); | 1701 | ctmp = sk_SSL_COMP_value(sk, i); |
diff --git a/src/lib/libssl/src/ssl/ssl_err.c b/src/lib/libssl/src/ssl/ssl_err.c index 67ba3c7699..7bea7fafa1 100644 --- a/src/lib/libssl/src/ssl/ssl_err.c +++ b/src/lib/libssl/src/ssl/ssl_err.c | |||
@@ -344,6 +344,7 @@ static ERR_STRING_DATA SSL_str_reasons[]= { | |||
344 | {ERR_REASON(SSL_R_CERT_LENGTH_MISMATCH) , "cert length mismatch"}, | 344 | {ERR_REASON(SSL_R_CERT_LENGTH_MISMATCH) , "cert length mismatch"}, |
345 | {ERR_REASON(SSL_R_CHALLENGE_IS_DIFFERENT), "challenge is different"}, | 345 | {ERR_REASON(SSL_R_CHALLENGE_IS_DIFFERENT), "challenge is different"}, |
346 | {ERR_REASON(SSL_R_CIPHER_CODE_WRONG_LENGTH), "cipher code wrong length"}, | 346 | {ERR_REASON(SSL_R_CIPHER_CODE_WRONG_LENGTH), "cipher code wrong length"}, |
347 | {ERR_REASON(SSL_R_CIPHER_COMPRESSION_UNAVAILABLE), "cipher compression unavailable"}, | ||
347 | {ERR_REASON(SSL_R_CIPHER_OR_HASH_UNAVAILABLE), "cipher or hash unavailable"}, | 348 | {ERR_REASON(SSL_R_CIPHER_OR_HASH_UNAVAILABLE), "cipher or hash unavailable"}, |
348 | {ERR_REASON(SSL_R_CIPHER_TABLE_SRC_ERROR), "cipher table src error"}, | 349 | {ERR_REASON(SSL_R_CIPHER_TABLE_SRC_ERROR), "cipher table src error"}, |
349 | {ERR_REASON(SSL_R_CLIENTHELLO_TLSEXT) , "clienthello tlsext"}, | 350 | {ERR_REASON(SSL_R_CLIENTHELLO_TLSEXT) , "clienthello tlsext"}, |
diff --git a/src/lib/libssl/src/ssl/ssl_locl.h b/src/lib/libssl/src/ssl/ssl_locl.h index 3a4656ef62..06f37b69e6 100644 --- a/src/lib/libssl/src/ssl/ssl_locl.h +++ b/src/lib/libssl/src/ssl/ssl_locl.h | |||
@@ -599,9 +599,9 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *meth, | |||
599 | STACK_OF(SSL_CIPHER) **pref, STACK_OF(SSL_CIPHER) **sorted, | 599 | STACK_OF(SSL_CIPHER) **pref, STACK_OF(SSL_CIPHER) **sorted, |
600 | const char *rule_str); | 600 | const char *rule_str); |
601 | void ssl_update_cache(SSL *s, int mode); | 601 | void ssl_update_cache(SSL *s, int mode); |
602 | int ssl_cipher_get_comp(const SSL_SESSION *s, SSL_COMP **comp); | ||
602 | int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, | 603 | int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, |
603 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size, | 604 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size); |
604 | SSL_COMP **comp); | ||
605 | int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md); | 605 | int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md); |
606 | 606 | ||
607 | int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk); | 607 | int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk); |
diff --git a/src/lib/libssl/src/ssl/ssl_txt.c b/src/lib/libssl/src/ssl/ssl_txt.c index 01dd846596..734e0c0755 100644 --- a/src/lib/libssl/src/ssl/ssl_txt.c +++ b/src/lib/libssl/src/ssl/ssl_txt.c | |||
@@ -190,7 +190,9 @@ SSL_SESSION_print(BIO *bp, const SSL_SESSION *x) | |||
190 | if (x->compress_meth != 0) { | 190 | if (x->compress_meth != 0) { |
191 | SSL_COMP *comp = NULL; | 191 | SSL_COMP *comp = NULL; |
192 | 192 | ||
193 | ssl_cipher_get_evp(x, NULL, NULL, NULL, NULL, &comp); | 193 | if (!ssl_cipher_get_comp(x, &comp)) |
194 | goto err; | ||
195 | |||
194 | if (comp == NULL) { | 196 | if (comp == NULL) { |
195 | if (BIO_printf(bp, "\n Compression: %d", x->compress_meth) <= 0) | 197 | if (BIO_printf(bp, "\n Compression: %d", x->compress_meth) <= 0) |
196 | goto err; | 198 | goto err; |
diff --git a/src/lib/libssl/src/ssl/t1_enc.c b/src/lib/libssl/src/ssl/t1_enc.c index 2599122078..5f17a4a94a 100644 --- a/src/lib/libssl/src/ssl/t1_enc.c +++ b/src/lib/libssl/src/ssl/t1_enc.c | |||
@@ -532,12 +532,19 @@ tls1_setup_key_block(SSL *s) | |||
532 | int mac_type = NID_undef, mac_secret_size = 0; | 532 | int mac_type = NID_undef, mac_secret_size = 0; |
533 | int ret = 0; | 533 | int ret = 0; |
534 | 534 | ||
535 | |||
536 | if (s->s3->tmp.key_block_length != 0) | 535 | if (s->s3->tmp.key_block_length != 0) |
537 | return (1); | 536 | return (1); |
538 | 537 | ||
539 | if (!ssl_cipher_get_evp(s->session, &c, &hash, &mac_type, &mac_secret_size, &comp)) { | 538 | if (!ssl_cipher_get_comp(s->session, &comp)) { |
540 | SSLerr(SSL_F_TLS1_SETUP_KEY_BLOCK, SSL_R_CIPHER_OR_HASH_UNAVAILABLE); | 539 | SSLerr(SSL_F_TLS1_SETUP_KEY_BLOCK, |
540 | SSL_R_CIPHER_COMPRESSION_UNAVAILABLE); | ||
541 | return (0); | ||
542 | } | ||
543 | |||
544 | if (!ssl_cipher_get_evp(s->session, &c, &hash, &mac_type, | ||
545 | &mac_secret_size)) { | ||
546 | SSLerr(SSL_F_TLS1_SETUP_KEY_BLOCK, | ||
547 | SSL_R_CIPHER_OR_HASH_UNAVAILABLE); | ||
541 | return (0); | 548 | return (0); |
542 | } | 549 | } |
543 | 550 | ||
diff --git a/src/lib/libssl/ssl.h b/src/lib/libssl/ssl.h index 9744d9783c..6765e3560a 100644 --- a/src/lib/libssl/ssl.h +++ b/src/lib/libssl/ssl.h | |||
@@ -2197,6 +2197,7 @@ void ERR_load_SSL_strings(void); | |||
2197 | #define SSL_R_CERT_LENGTH_MISMATCH 135 | 2197 | #define SSL_R_CERT_LENGTH_MISMATCH 135 |
2198 | #define SSL_R_CHALLENGE_IS_DIFFERENT 136 | 2198 | #define SSL_R_CHALLENGE_IS_DIFFERENT 136 |
2199 | #define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 | 2199 | #define SSL_R_CIPHER_CODE_WRONG_LENGTH 137 |
2200 | #define SSL_R_CIPHER_COMPRESSION_UNAVAILABLE 371 | ||
2200 | #define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 | 2201 | #define SSL_R_CIPHER_OR_HASH_UNAVAILABLE 138 |
2201 | #define SSL_R_CIPHER_TABLE_SRC_ERROR 139 | 2202 | #define SSL_R_CIPHER_TABLE_SRC_ERROR 139 |
2202 | #define SSL_R_CLIENTHELLO_TLSEXT 226 | 2203 | #define SSL_R_CLIENTHELLO_TLSEXT 226 |
diff --git a/src/lib/libssl/ssl_ciph.c b/src/lib/libssl/ssl_ciph.c index 4ae3312a1a..bd939b7563 100644 --- a/src/lib/libssl/ssl_ciph.c +++ b/src/lib/libssl/ssl_ciph.c | |||
@@ -481,33 +481,45 @@ load_builtin_compressions(void) | |||
481 | } | 481 | } |
482 | #endif | 482 | #endif |
483 | 483 | ||
484 | /* ssl_cipher_get_comp sets comp to the correct SSL_COMP for the given | ||
485 | * session and returns 1. On error it returns 0. */ | ||
484 | int | 486 | int |
485 | ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, | 487 | ssl_cipher_get_comp(const SSL_SESSION *s, SSL_COMP **comp) |
486 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size, SSL_COMP **comp) | ||
487 | { | 488 | { |
489 | SSL_COMP ctmp; | ||
488 | int i; | 490 | int i; |
489 | const SSL_CIPHER *c; | ||
490 | 491 | ||
491 | c = s->cipher; | ||
492 | if (c == NULL) | ||
493 | return (0); | ||
494 | if (comp != NULL) { | ||
495 | SSL_COMP ctmp; | ||
496 | #ifndef OPENSSL_NO_COMP | 492 | #ifndef OPENSSL_NO_COMP |
497 | load_builtin_compressions(); | 493 | load_builtin_compressions(); |
498 | #endif | 494 | #endif |
499 | 495 | ||
500 | *comp = NULL; | 496 | *comp = NULL; |
501 | ctmp.id = s->compress_meth; | 497 | if (s->compress_meth == 0) |
502 | if (ssl_comp_methods != NULL) { | 498 | return 1; |
503 | i = sk_SSL_COMP_find(ssl_comp_methods, &ctmp); | 499 | if (ssl_comp_methods == NULL) |
504 | if (i >= 0) | 500 | return 0; |
505 | *comp = sk_SSL_COMP_value(ssl_comp_methods, i); | 501 | |
506 | else | 502 | ctmp.id = s->compress_meth; |
507 | *comp = NULL; | 503 | i = sk_SSL_COMP_find(ssl_comp_methods, &ctmp); |
508 | } | 504 | if (i >= 0) { |
505 | *comp = sk_SSL_COMP_value(ssl_comp_methods, i); | ||
506 | return 1; | ||
509 | } | 507 | } |
510 | 508 | ||
509 | return 0; | ||
510 | } | ||
511 | |||
512 | int | ||
513 | ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, | ||
514 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size) | ||
515 | { | ||
516 | const SSL_CIPHER *c; | ||
517 | int i; | ||
518 | |||
519 | c = s->cipher; | ||
520 | if (c == NULL) | ||
521 | return (0); | ||
522 | |||
511 | if ((enc == NULL) || (md == NULL)) | 523 | if ((enc == NULL) || (md == NULL)) |
512 | return (0); | 524 | return (0); |
513 | 525 | ||
@@ -732,8 +744,6 @@ ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth, unsigned long | |||
732 | *enc |= SSL_eNULL; | 744 | *enc |= SSL_eNULL; |
733 | #endif | 745 | #endif |
734 | 746 | ||
735 | |||
736 | |||
737 | *enc |= (ssl_cipher_methods[SSL_ENC_DES_IDX ] == NULL) ? SSL_DES : 0; | 747 | *enc |= (ssl_cipher_methods[SSL_ENC_DES_IDX ] == NULL) ? SSL_DES : 0; |
738 | *enc |= (ssl_cipher_methods[SSL_ENC_3DES_IDX] == NULL) ? SSL_3DES : 0; | 748 | *enc |= (ssl_cipher_methods[SSL_ENC_3DES_IDX] == NULL) ? SSL_3DES : 0; |
739 | *enc |= (ssl_cipher_methods[SSL_ENC_RC4_IDX ] == NULL) ? SSL_RC4 : 0; | 749 | *enc |= (ssl_cipher_methods[SSL_ENC_RC4_IDX ] == NULL) ? SSL_RC4 : 0; |
@@ -1684,8 +1694,8 @@ ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n) | |||
1684 | SSL_COMP *ctmp; | 1694 | SSL_COMP *ctmp; |
1685 | int i, nn; | 1695 | int i, nn; |
1686 | 1696 | ||
1687 | if ((n == 0) | 1697 | if ((n == 0) || (sk == NULL)) |
1688 | || (sk == NULL)) return (NULL); | 1698 | return (NULL); |
1689 | nn = sk_SSL_COMP_num(sk); | 1699 | nn = sk_SSL_COMP_num(sk); |
1690 | for (i = 0; i < nn; i++) { | 1700 | for (i = 0; i < nn; i++) { |
1691 | ctmp = sk_SSL_COMP_value(sk, i); | 1701 | ctmp = sk_SSL_COMP_value(sk, i); |
diff --git a/src/lib/libssl/ssl_err.c b/src/lib/libssl/ssl_err.c index 67ba3c7699..7bea7fafa1 100644 --- a/src/lib/libssl/ssl_err.c +++ b/src/lib/libssl/ssl_err.c | |||
@@ -344,6 +344,7 @@ static ERR_STRING_DATA SSL_str_reasons[]= { | |||
344 | {ERR_REASON(SSL_R_CERT_LENGTH_MISMATCH) , "cert length mismatch"}, | 344 | {ERR_REASON(SSL_R_CERT_LENGTH_MISMATCH) , "cert length mismatch"}, |
345 | {ERR_REASON(SSL_R_CHALLENGE_IS_DIFFERENT), "challenge is different"}, | 345 | {ERR_REASON(SSL_R_CHALLENGE_IS_DIFFERENT), "challenge is different"}, |
346 | {ERR_REASON(SSL_R_CIPHER_CODE_WRONG_LENGTH), "cipher code wrong length"}, | 346 | {ERR_REASON(SSL_R_CIPHER_CODE_WRONG_LENGTH), "cipher code wrong length"}, |
347 | {ERR_REASON(SSL_R_CIPHER_COMPRESSION_UNAVAILABLE), "cipher compression unavailable"}, | ||
347 | {ERR_REASON(SSL_R_CIPHER_OR_HASH_UNAVAILABLE), "cipher or hash unavailable"}, | 348 | {ERR_REASON(SSL_R_CIPHER_OR_HASH_UNAVAILABLE), "cipher or hash unavailable"}, |
348 | {ERR_REASON(SSL_R_CIPHER_TABLE_SRC_ERROR), "cipher table src error"}, | 349 | {ERR_REASON(SSL_R_CIPHER_TABLE_SRC_ERROR), "cipher table src error"}, |
349 | {ERR_REASON(SSL_R_CLIENTHELLO_TLSEXT) , "clienthello tlsext"}, | 350 | {ERR_REASON(SSL_R_CLIENTHELLO_TLSEXT) , "clienthello tlsext"}, |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index 3a4656ef62..06f37b69e6 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
@@ -599,9 +599,9 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *meth, | |||
599 | STACK_OF(SSL_CIPHER) **pref, STACK_OF(SSL_CIPHER) **sorted, | 599 | STACK_OF(SSL_CIPHER) **pref, STACK_OF(SSL_CIPHER) **sorted, |
600 | const char *rule_str); | 600 | const char *rule_str); |
601 | void ssl_update_cache(SSL *s, int mode); | 601 | void ssl_update_cache(SSL *s, int mode); |
602 | int ssl_cipher_get_comp(const SSL_SESSION *s, SSL_COMP **comp); | ||
602 | int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, | 603 | int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, |
603 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size, | 604 | const EVP_MD **md, int *mac_pkey_type, int *mac_secret_size); |
604 | SSL_COMP **comp); | ||
605 | int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md); | 605 | int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md); |
606 | 606 | ||
607 | int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk); | 607 | int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk); |
diff --git a/src/lib/libssl/ssl_txt.c b/src/lib/libssl/ssl_txt.c index 01dd846596..734e0c0755 100644 --- a/src/lib/libssl/ssl_txt.c +++ b/src/lib/libssl/ssl_txt.c | |||
@@ -190,7 +190,9 @@ SSL_SESSION_print(BIO *bp, const SSL_SESSION *x) | |||
190 | if (x->compress_meth != 0) { | 190 | if (x->compress_meth != 0) { |
191 | SSL_COMP *comp = NULL; | 191 | SSL_COMP *comp = NULL; |
192 | 192 | ||
193 | ssl_cipher_get_evp(x, NULL, NULL, NULL, NULL, &comp); | 193 | if (!ssl_cipher_get_comp(x, &comp)) |
194 | goto err; | ||
195 | |||
194 | if (comp == NULL) { | 196 | if (comp == NULL) { |
195 | if (BIO_printf(bp, "\n Compression: %d", x->compress_meth) <= 0) | 197 | if (BIO_printf(bp, "\n Compression: %d", x->compress_meth) <= 0) |
196 | goto err; | 198 | goto err; |
diff --git a/src/lib/libssl/t1_enc.c b/src/lib/libssl/t1_enc.c index 2599122078..5f17a4a94a 100644 --- a/src/lib/libssl/t1_enc.c +++ b/src/lib/libssl/t1_enc.c | |||
@@ -532,12 +532,19 @@ tls1_setup_key_block(SSL *s) | |||
532 | int mac_type = NID_undef, mac_secret_size = 0; | 532 | int mac_type = NID_undef, mac_secret_size = 0; |
533 | int ret = 0; | 533 | int ret = 0; |
534 | 534 | ||
535 | |||
536 | if (s->s3->tmp.key_block_length != 0) | 535 | if (s->s3->tmp.key_block_length != 0) |
537 | return (1); | 536 | return (1); |
538 | 537 | ||
539 | if (!ssl_cipher_get_evp(s->session, &c, &hash, &mac_type, &mac_secret_size, &comp)) { | 538 | if (!ssl_cipher_get_comp(s->session, &comp)) { |
540 | SSLerr(SSL_F_TLS1_SETUP_KEY_BLOCK, SSL_R_CIPHER_OR_HASH_UNAVAILABLE); | 539 | SSLerr(SSL_F_TLS1_SETUP_KEY_BLOCK, |
540 | SSL_R_CIPHER_COMPRESSION_UNAVAILABLE); | ||
541 | return (0); | ||
542 | } | ||
543 | |||
544 | if (!ssl_cipher_get_evp(s->session, &c, &hash, &mac_type, | ||
545 | &mac_secret_size)) { | ||
546 | SSLerr(SSL_F_TLS1_SETUP_KEY_BLOCK, | ||
547 | SSL_R_CIPHER_OR_HASH_UNAVAILABLE); | ||
541 | return (0); | 548 | return (0); |
542 | } | 549 | } |
543 | 550 | ||