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; |