| Index: webrtc/base/opensslstreamadapter.cc
|
| diff --git a/webrtc/base/opensslstreamadapter.cc b/webrtc/base/opensslstreamadapter.cc
|
| index 51921f143153a171b3573edabd571f265fc9fe22..3d1760721f1f55c136306b7fb5f371453fb92ff4 100644
|
| --- a/webrtc/base/opensslstreamadapter.cc
|
| +++ b/webrtc/base/opensslstreamadapter.cc
|
| @@ -143,18 +143,26 @@ static const SslCipherMapEntry kSslCipherMap[] = {
|
| // This needs to be updated when the default of the SSL library changes.
|
| static const char kDefaultSslCipher10[] =
|
| "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA";
|
| +static const char kDefaultSslEcCipher10[] =
|
| + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA";
|
|
|
| #ifdef OPENSSL_IS_BORINGSSL
|
| static const char kDefaultSslCipher12[] =
|
| "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
|
| +static const char kDefaultSslEcCipher12[] =
|
| + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256";
|
| // Fallback cipher for DTLS 1.2 if hardware-accelerated AES-GCM is unavailable.
|
| static const char kDefaultSslCipher12NoAesGcm[] =
|
| "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256";
|
| +static const char kDefaultSslEcCipher12NoAesGcm[] =
|
| + "TLS_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.
|
| static const char kDefaultSslCipher12[] =
|
| "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA";
|
| +static const char kDefaultSslEcCipher12[] =
|
| + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA";
|
| #endif
|
|
|
| //////////////////////////////////////////////////////////////////////
|
| @@ -1118,22 +1126,44 @@ bool OpenSSLStreamAdapter::HaveExporter() {
|
| }
|
|
|
| std::string OpenSSLStreamAdapter::GetDefaultSslCipher(
|
| - SSLProtocolVersion version) {
|
| - switch (version) {
|
| - case SSL_PROTOCOL_TLS_10:
|
| - case SSL_PROTOCOL_TLS_11:
|
| - return kDefaultSslCipher10;
|
| - case SSL_PROTOCOL_TLS_12:
|
| - default:
|
| + SSLProtocolVersion version,
|
| + KeyType key_type) {
|
| + if (key_type == KT_RSA) {
|
| + switch (version) {
|
| + case SSL_PROTOCOL_TLS_10:
|
| + case SSL_PROTOCOL_TLS_11:
|
| + return kDefaultSslCipher10;
|
| + case SSL_PROTOCOL_TLS_12:
|
| + default:
|
| #ifdef OPENSSL_IS_BORINGSSL
|
| - if (EVP_has_aes_hardware()) {
|
| + if (EVP_has_aes_hardware()) {
|
| + return kDefaultSslCipher12;
|
| + } else {
|
| + return kDefaultSslCipher12NoAesGcm;
|
| + }
|
| +#else // !OPENSSL_IS_BORINGSSL
|
| return kDefaultSslCipher12;
|
| - } else {
|
| - return kDefaultSslCipher12NoAesGcm;
|
| - }
|
| +#endif
|
| + }
|
| + } else if (key_type == KT_ECDSA) {
|
| + switch (version) {
|
| + case SSL_PROTOCOL_TLS_10:
|
| + case SSL_PROTOCOL_TLS_11:
|
| + return kDefaultSslEcCipher10;
|
| + case SSL_PROTOCOL_TLS_12:
|
| + default:
|
| +#ifdef OPENSSL_IS_BORINGSSL
|
| + if (EVP_has_aes_hardware()) {
|
| + return kDefaultSslEcCipher12;
|
| + } else {
|
| + return kDefaultSslEcCipher12NoAesGcm;
|
| + }
|
| #else // !OPENSSL_IS_BORINGSSL
|
| - return kDefaultSslCipher12;
|
| + return kDefaultSslEcCipher12;
|
| #endif
|
| + }
|
| + } else {
|
| + return std::string();
|
| }
|
| }
|
|
|
|
|