summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjsing <>2014-05-25 13:27:38 +0000
committerjsing <>2014-05-25 13:27:38 +0000
commitfc3ae41e6c3f587c173aca34af47208c06c01668 (patch)
tree1981463f492523e729cbfd564646012bb0a6574c
parent272e873b19ba05dbb966cb20a3fa0ca5533b84e2 (diff)
downloadopenbsd-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.c15
-rw-r--r--src/lib/libssl/src/ssl/ssl.h1
-rw-r--r--src/lib/libssl/src/ssl/ssl_ciph.c54
-rw-r--r--src/lib/libssl/src/ssl/ssl_err.c1
-rw-r--r--src/lib/libssl/src/ssl/ssl_locl.h4
-rw-r--r--src/lib/libssl/src/ssl/ssl_txt.c4
-rw-r--r--src/lib/libssl/src/ssl/t1_enc.c13
-rw-r--r--src/lib/libssl/ssl.h1
-rw-r--r--src/lib/libssl/ssl_ciph.c54
-rw-r--r--src/lib/libssl/ssl_err.c1
-rw-r--r--src/lib/libssl/ssl_locl.h4
-rw-r--r--src/lib/libssl/ssl_txt.c4
-rw-r--r--src/lib/libssl/t1_enc.c13
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. */
484int 486int
485ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, 487ssl_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
512int
513ssl_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);
601void ssl_update_cache(SSL *s, int mode); 601void ssl_update_cache(SSL *s, int mode);
602int ssl_cipher_get_comp(const SSL_SESSION *s, SSL_COMP **comp);
602int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, 603int 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);
605int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md); 605int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md);
606 606
607int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk); 607int 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. */
484int 486int
485ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, 487ssl_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
512int
513ssl_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);
601void ssl_update_cache(SSL *s, int mode); 601void ssl_update_cache(SSL *s, int mode);
602int ssl_cipher_get_comp(const SSL_SESSION *s, SSL_COMP **comp);
602int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc, 603int 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);
605int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md); 605int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md);
606 606
607int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk); 607int 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