Chromium Code Reviews| Index: webrtc/base/opensslstreamadapter.cc |
| diff --git a/webrtc/base/opensslstreamadapter.cc b/webrtc/base/opensslstreamadapter.cc |
| index 270faa0809f42013c01aeb35854d7c98b3b9cc1f..b6792523d9fd99fcf9ee96ee6315769890ad36dd 100644 |
| --- a/webrtc/base/opensslstreamadapter.cc |
| +++ b/webrtc/base/opensslstreamadapter.cc |
| @@ -25,6 +25,7 @@ |
| #include <vector> |
| +#include "webrtc/base/checks.h" |
| #include "webrtc/base/common.h" |
| #include "webrtc/base/logging.h" |
| #include "webrtc/base/safe_conversions.h" |
| @@ -162,10 +163,14 @@ static int kDefaultSslEcCipher12 = |
| // Fallback cipher for DTLS 1.2 if hardware-accelerated AES-GCM is unavailable. |
| // TODO(davidben): Switch to the standardized CHACHA20_POLY1305 variant when |
| // available. |
| -static int kDefaultSslCipher12NoAesGcm = |
| +static int kDefaultSslCipher12NoAesGcmNonStandard = |
| static_cast<uint16_t>(TLS1_CK_ECDHE_RSA_CHACHA20_POLY1305_OLD); |
| -static int kDefaultSslEcCipher12NoAesGcm = |
| +static int kDefaultSslEcCipher12NoAesGcmNonStandard = |
| static_cast<uint16_t>(TLS1_CK_ECDHE_ECDSA_CHACHA20_POLY1305_OLD); |
| +static int kDefaultSslCipher12NoAesGcm = |
| + static_cast<uint16_t>(TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256); |
| +static int kDefaultSslEcCipher12NoAesGcm = |
| + static_cast<uint16_t>(TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256); |
| #else // !OPENSSL_IS_BORINGSSL |
| // OpenSSL sorts differently than BoringSSL, so the default cipher doesn't |
| // change between TLS 1.0 and TLS 1.2 with the current setup. |
| @@ -301,12 +306,13 @@ OpenSSLStreamAdapter::OpenSSLStreamAdapter(StreamInterface* stream) |
| : SSLStreamAdapter(stream), |
| state_(SSL_NONE), |
| role_(SSL_CLIENT), |
| - ssl_read_needs_write_(false), ssl_write_needs_read_(false), |
| - ssl_(NULL), ssl_ctx_(NULL), |
| + ssl_read_needs_write_(false), |
| + ssl_write_needs_read_(false), |
| + ssl_(NULL), |
| + ssl_ctx_(NULL), |
| custom_verification_succeeded_(false), |
| ssl_mode_(SSL_MODE_TLS), |
| - ssl_max_version_(SSL_PROTOCOL_TLS_11) { |
| -} |
| + ssl_max_version_(SSL_PROTOCOL_TLS_12) {} |
| OpenSSLStreamAdapter::~OpenSSLStreamAdapter() { |
| Cleanup(); |
| @@ -1138,7 +1144,12 @@ int OpenSSLStreamAdapter::GetDefaultSslCipherForTest(SSLProtocolVersion version, |
| if (EVP_has_aes_hardware()) { |
| return kDefaultSslCipher12; |
| } else { |
| - return kDefaultSslCipher12NoAesGcm; |
| + if (EVP_aead_chacha20_poly1305()) { |
| + return kDefaultSslCipher12NoAesGcm; |
| + } else { |
| + RTC_CHECK(EVP_aead_chacha20_poly1305_old()); |
| + return kDefaultSslCipher12NoAesGcmNonStandard; |
| + } |
|
davidben_webrtc
2016/01/11 21:10:55
Eh? Both of these functions will only ever return
|
| } |
| #else // !OPENSSL_IS_BORINGSSL |
| return kDefaultSslCipher12; |
| @@ -1155,7 +1166,12 @@ int OpenSSLStreamAdapter::GetDefaultSslCipherForTest(SSLProtocolVersion version, |
| if (EVP_has_aes_hardware()) { |
| return kDefaultSslEcCipher12; |
| } else { |
| - return kDefaultSslEcCipher12NoAesGcm; |
| + if (EVP_aead_chacha20_poly1305()) { |
| + return kDefaultSslEcCipher12NoAesGcm; |
| + } else { |
| + RTC_CHECK(EVP_aead_chacha20_poly1305_old()); |
| + return kDefaultSslEcCipher12NoAesGcmNonStandard; |
| + } |
| } |
| #else // !OPENSSL_IS_BORINGSSL |
| return kDefaultSslEcCipher12; |