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 /src/lib/libssl/ssl_ciph.c | |
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@
Diffstat (limited to 'src/lib/libssl/ssl_ciph.c')
-rw-r--r-- | src/lib/libssl/ssl_ciph.c | 54 |
1 files changed, 32 insertions, 22 deletions
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); |