| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2011 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 rtc::FifoBuffer *in_; | 154 rtc::FifoBuffer *in_; |
| 155 rtc::FifoBuffer *out_; | 155 rtc::FifoBuffer *out_; |
| 156 bool first_packet_; | 156 bool first_packet_; |
| 157 }; | 157 }; |
| 158 | 158 |
| 159 static const int kFifoBufferSize = 4096; | 159 static const int kFifoBufferSize = 4096; |
| 160 | 160 |
| 161 class SSLStreamAdapterTestBase : public testing::Test, | 161 class SSLStreamAdapterTestBase : public testing::Test, |
| 162 public sigslot::has_slots<> { | 162 public sigslot::has_slots<> { |
| 163 public: | 163 public: |
| 164 SSLStreamAdapterTestBase(const std::string& client_cert_pem, | 164 SSLStreamAdapterTestBase( |
| 165 const std::string& client_private_key_pem, | 165 const std::string& client_cert_pem, |
| 166 bool dtls, | 166 const std::string& client_private_key_pem, |
| 167 rtc::KeyType client_key_type = rtc::KT_DEFAULT, | 167 bool dtls, |
| 168 rtc::KeyType server_key_type = rtc::KT_DEFAULT) | 168 rtc::KeyParams client_key_type = rtc::KeyParams(rtc::KT_DEFAULT), |
| 169 rtc::KeyParams server_key_type = rtc::KeyParams(rtc::KT_DEFAULT)) |
| 169 : client_buffer_(kFifoBufferSize), | 170 : client_buffer_(kFifoBufferSize), |
| 170 server_buffer_(kFifoBufferSize), | 171 server_buffer_(kFifoBufferSize), |
| 171 client_stream_( | 172 client_stream_( |
| 172 new SSLDummyStream(this, "c2s", &client_buffer_, &server_buffer_)), | 173 new SSLDummyStream(this, "c2s", &client_buffer_, &server_buffer_)), |
| 173 server_stream_( | 174 server_stream_( |
| 174 new SSLDummyStream(this, "s2c", &server_buffer_, &client_buffer_)), | 175 new SSLDummyStream(this, "s2c", &server_buffer_, &client_buffer_)), |
| 175 client_ssl_(rtc::SSLStreamAdapter::Create(client_stream_)), | 176 client_ssl_(rtc::SSLStreamAdapter::Create(client_stream_)), |
| 176 server_ssl_(rtc::SSLStreamAdapter::Create(server_stream_)), | 177 server_ssl_(rtc::SSLStreamAdapter::Create(server_stream_)), |
| 177 client_identity_(NULL), | 178 client_identity_(NULL), |
| 178 server_identity_(NULL), | 179 server_identity_(NULL), |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 server_stream_ = | 218 server_stream_ = |
| 218 new SSLDummyStream(this, "s2c", &server_buffer_, &client_buffer_); | 219 new SSLDummyStream(this, "s2c", &server_buffer_, &client_buffer_); |
| 219 | 220 |
| 220 client_ssl_.reset(rtc::SSLStreamAdapter::Create(client_stream_)); | 221 client_ssl_.reset(rtc::SSLStreamAdapter::Create(client_stream_)); |
| 221 server_ssl_.reset(rtc::SSLStreamAdapter::Create(server_stream_)); | 222 server_ssl_.reset(rtc::SSLStreamAdapter::Create(server_stream_)); |
| 222 | 223 |
| 223 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); | 224 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); |
| 224 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); | 225 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); |
| 225 | 226 |
| 226 rtc::SSLIdentityParams client_params; | 227 rtc::SSLIdentityParams client_params; |
| 228 client_params.key_params = rtc::KeyParams(rtc::KT_DEFAULT); |
| 227 client_params.common_name = "client"; | 229 client_params.common_name = "client"; |
| 228 client_params.not_before = not_before; | 230 client_params.not_before = not_before; |
| 229 client_params.not_after = not_after; | 231 client_params.not_after = not_after; |
| 230 client_params.key_type = rtc::KT_DEFAULT; | |
| 231 client_identity_ = rtc::SSLIdentity::GenerateForTest(client_params); | 232 client_identity_ = rtc::SSLIdentity::GenerateForTest(client_params); |
| 232 | 233 |
| 233 rtc::SSLIdentityParams server_params; | 234 rtc::SSLIdentityParams server_params; |
| 235 server_params.key_params = rtc::KeyParams(rtc::KT_DEFAULT); |
| 234 server_params.common_name = "server"; | 236 server_params.common_name = "server"; |
| 235 server_params.not_before = not_before; | 237 server_params.not_before = not_before; |
| 236 server_params.not_after = not_after; | 238 server_params.not_after = not_after; |
| 237 server_params.key_type = rtc::KT_DEFAULT; | |
| 238 server_identity_ = rtc::SSLIdentity::GenerateForTest(server_params); | 239 server_identity_ = rtc::SSLIdentity::GenerateForTest(server_params); |
| 239 | 240 |
| 240 client_ssl_->SetIdentity(client_identity_); | 241 client_ssl_->SetIdentity(client_identity_); |
| 241 server_ssl_->SetIdentity(server_identity_); | 242 server_ssl_->SetIdentity(server_identity_); |
| 242 } | 243 } |
| 243 | 244 |
| 244 virtual void OnEvent(rtc::StreamInterface *stream, int sig, int err) { | 245 virtual void OnEvent(rtc::StreamInterface *stream, int sig, int err) { |
| 245 LOG(LS_INFO) << "SSLStreamAdapterTestBase::OnEvent sig=" << sig; | 246 LOG(LS_INFO) << "SSLStreamAdapterTestBase::OnEvent sig=" << sig; |
| 246 | 247 |
| 247 if (sig & rtc::SE_READ) { | 248 if (sig & rtc::SE_READ) { |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 int loss_; | 456 int loss_; |
| 456 bool lose_first_packet_; | 457 bool lose_first_packet_; |
| 457 bool damage_; | 458 bool damage_; |
| 458 bool dtls_; | 459 bool dtls_; |
| 459 int handshake_wait_; | 460 int handshake_wait_; |
| 460 bool identities_set_; | 461 bool identities_set_; |
| 461 }; | 462 }; |
| 462 | 463 |
| 463 class SSLStreamAdapterTestTLS | 464 class SSLStreamAdapterTestTLS |
| 464 : public SSLStreamAdapterTestBase, | 465 : public SSLStreamAdapterTestBase, |
| 465 public WithParamInterface<tuple<rtc::KeyType, rtc::KeyType>> { | 466 public WithParamInterface<tuple<rtc::KeyParams, rtc::KeyParams>> { |
| 466 public: | 467 public: |
| 467 SSLStreamAdapterTestTLS() | 468 SSLStreamAdapterTestTLS() |
| 468 : SSLStreamAdapterTestBase("", | 469 : SSLStreamAdapterTestBase("", |
| 469 "", | 470 "", |
| 470 false, | 471 false, |
| 471 ::testing::get<0>(GetParam()), | 472 ::testing::get<0>(GetParam()), |
| 472 ::testing::get<1>(GetParam())){}; | 473 ::testing::get<1>(GetParam())){}; |
| 473 | 474 |
| 474 // Test data transfer for TLS | 475 // Test data transfer for TLS |
| 475 virtual void TestTransfer(int size) { | 476 virtual void TestTransfer(int size) { |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 } | 564 } |
| 564 } | 565 } |
| 565 | 566 |
| 566 private: | 567 private: |
| 567 rtc::MemoryStream send_stream_; | 568 rtc::MemoryStream send_stream_; |
| 568 rtc::MemoryStream recv_stream_; | 569 rtc::MemoryStream recv_stream_; |
| 569 }; | 570 }; |
| 570 | 571 |
| 571 class SSLStreamAdapterTestDTLS | 572 class SSLStreamAdapterTestDTLS |
| 572 : public SSLStreamAdapterTestBase, | 573 : public SSLStreamAdapterTestBase, |
| 573 public WithParamInterface<tuple<rtc::KeyType, rtc::KeyType>> { | 574 public WithParamInterface<tuple<rtc::KeyParams, rtc::KeyParams>> { |
| 574 public: | 575 public: |
| 575 SSLStreamAdapterTestDTLS() | 576 SSLStreamAdapterTestDTLS() |
| 576 : SSLStreamAdapterTestBase("", | 577 : SSLStreamAdapterTestBase("", |
| 577 "", | 578 "", |
| 578 true, | 579 true, |
| 579 ::testing::get<0>(GetParam()), | 580 ::testing::get<0>(GetParam()), |
| 580 ::testing::get<1>(GetParam())), | 581 ::testing::get<1>(GetParam())), |
| 581 packet_size_(1000), | 582 packet_size_(1000), |
| 582 count_(0), | 583 count_(0), |
| 583 sent_(0) {} | 584 sent_(0) {} |
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 971 MAYBE_SKIP_TEST(HaveDtls); | 972 MAYBE_SKIP_TEST(HaveDtls); |
| 972 SetupProtocolVersions(rtc::SSL_PROTOCOL_DTLS_10, rtc::SSL_PROTOCOL_DTLS_10); | 973 SetupProtocolVersions(rtc::SSL_PROTOCOL_DTLS_10, rtc::SSL_PROTOCOL_DTLS_10); |
| 973 TestHandshake(); | 974 TestHandshake(); |
| 974 | 975 |
| 975 int client_cipher; | 976 int client_cipher; |
| 976 ASSERT_TRUE(GetSslCipherSuite(true, &client_cipher)); | 977 ASSERT_TRUE(GetSslCipherSuite(true, &client_cipher)); |
| 977 int server_cipher; | 978 int server_cipher; |
| 978 ASSERT_TRUE(GetSslCipherSuite(false, &server_cipher)); | 979 ASSERT_TRUE(GetSslCipherSuite(false, &server_cipher)); |
| 979 | 980 |
| 980 ASSERT_EQ(client_cipher, server_cipher); | 981 ASSERT_EQ(client_cipher, server_cipher); |
| 981 ASSERT_EQ(rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( | 982 ASSERT_EQ( |
| 982 rtc::SSL_PROTOCOL_DTLS_10, ::testing::get<1>(GetParam())), | 983 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( |
| 983 server_cipher); | 984 rtc::SSL_PROTOCOL_DTLS_10, ::testing::get<1>(GetParam()).type()), |
| 985 server_cipher); |
| 984 } | 986 } |
| 985 | 987 |
| 986 // Test getting the used DTLS 1.2 ciphers. | 988 // Test getting the used DTLS 1.2 ciphers. |
| 987 // DTLS 1.2 enabled for client and server -> DTLS 1.2 will be used. | 989 // DTLS 1.2 enabled for client and server -> DTLS 1.2 will be used. |
| 988 TEST_P(SSLStreamAdapterTestDTLS, TestGetSslCipherSuiteDtls12Both) { | 990 TEST_P(SSLStreamAdapterTestDTLS, TestGetSslCipherSuiteDtls12Both) { |
| 989 MAYBE_SKIP_TEST(HaveDtls); | 991 MAYBE_SKIP_TEST(HaveDtls); |
| 990 SetupProtocolVersions(rtc::SSL_PROTOCOL_DTLS_12, rtc::SSL_PROTOCOL_DTLS_12); | 992 SetupProtocolVersions(rtc::SSL_PROTOCOL_DTLS_12, rtc::SSL_PROTOCOL_DTLS_12); |
| 991 TestHandshake(); | 993 TestHandshake(); |
| 992 | 994 |
| 993 int client_cipher; | 995 int client_cipher; |
| 994 ASSERT_TRUE(GetSslCipherSuite(true, &client_cipher)); | 996 ASSERT_TRUE(GetSslCipherSuite(true, &client_cipher)); |
| 995 int server_cipher; | 997 int server_cipher; |
| 996 ASSERT_TRUE(GetSslCipherSuite(false, &server_cipher)); | 998 ASSERT_TRUE(GetSslCipherSuite(false, &server_cipher)); |
| 997 | 999 |
| 998 ASSERT_EQ(client_cipher, server_cipher); | 1000 ASSERT_EQ(client_cipher, server_cipher); |
| 999 ASSERT_EQ(rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( | 1001 ASSERT_EQ( |
| 1000 rtc::SSL_PROTOCOL_DTLS_12, ::testing::get<1>(GetParam())), | 1002 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( |
| 1001 server_cipher); | 1003 rtc::SSL_PROTOCOL_DTLS_12, ::testing::get<1>(GetParam()).type()), |
| 1004 server_cipher); |
| 1002 } | 1005 } |
| 1003 | 1006 |
| 1004 // DTLS 1.2 enabled for client only -> DTLS 1.0 will be used. | 1007 // DTLS 1.2 enabled for client only -> DTLS 1.0 will be used. |
| 1005 TEST_P(SSLStreamAdapterTestDTLS, TestGetSslCipherSuiteDtls12Client) { | 1008 TEST_P(SSLStreamAdapterTestDTLS, TestGetSslCipherSuiteDtls12Client) { |
| 1006 MAYBE_SKIP_TEST(HaveDtls); | 1009 MAYBE_SKIP_TEST(HaveDtls); |
| 1007 SetupProtocolVersions(rtc::SSL_PROTOCOL_DTLS_10, rtc::SSL_PROTOCOL_DTLS_12); | 1010 SetupProtocolVersions(rtc::SSL_PROTOCOL_DTLS_10, rtc::SSL_PROTOCOL_DTLS_12); |
| 1008 TestHandshake(); | 1011 TestHandshake(); |
| 1009 | 1012 |
| 1010 int client_cipher; | 1013 int client_cipher; |
| 1011 ASSERT_TRUE(GetSslCipherSuite(true, &client_cipher)); | 1014 ASSERT_TRUE(GetSslCipherSuite(true, &client_cipher)); |
| 1012 int server_cipher; | 1015 int server_cipher; |
| 1013 ASSERT_TRUE(GetSslCipherSuite(false, &server_cipher)); | 1016 ASSERT_TRUE(GetSslCipherSuite(false, &server_cipher)); |
| 1014 | 1017 |
| 1015 ASSERT_EQ(client_cipher, server_cipher); | 1018 ASSERT_EQ(client_cipher, server_cipher); |
| 1016 ASSERT_EQ(rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( | 1019 ASSERT_EQ( |
| 1017 rtc::SSL_PROTOCOL_DTLS_10, ::testing::get<1>(GetParam())), | 1020 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( |
| 1018 server_cipher); | 1021 rtc::SSL_PROTOCOL_DTLS_10, ::testing::get<1>(GetParam()).type()), |
| 1022 server_cipher); |
| 1019 } | 1023 } |
| 1020 | 1024 |
| 1021 // DTLS 1.2 enabled for server only -> DTLS 1.0 will be used. | 1025 // DTLS 1.2 enabled for server only -> DTLS 1.0 will be used. |
| 1022 TEST_P(SSLStreamAdapterTestDTLS, TestGetSslCipherSuiteDtls12Server) { | 1026 TEST_P(SSLStreamAdapterTestDTLS, TestGetSslCipherSuiteDtls12Server) { |
| 1023 MAYBE_SKIP_TEST(HaveDtls); | 1027 MAYBE_SKIP_TEST(HaveDtls); |
| 1024 SetupProtocolVersions(rtc::SSL_PROTOCOL_DTLS_12, rtc::SSL_PROTOCOL_DTLS_10); | 1028 SetupProtocolVersions(rtc::SSL_PROTOCOL_DTLS_12, rtc::SSL_PROTOCOL_DTLS_10); |
| 1025 TestHandshake(); | 1029 TestHandshake(); |
| 1026 | 1030 |
| 1027 int client_cipher; | 1031 int client_cipher; |
| 1028 ASSERT_TRUE(GetSslCipherSuite(true, &client_cipher)); | 1032 ASSERT_TRUE(GetSslCipherSuite(true, &client_cipher)); |
| 1029 int server_cipher; | 1033 int server_cipher; |
| 1030 ASSERT_TRUE(GetSslCipherSuite(false, &server_cipher)); | 1034 ASSERT_TRUE(GetSslCipherSuite(false, &server_cipher)); |
| 1031 | 1035 |
| 1032 ASSERT_EQ(client_cipher, server_cipher); | 1036 ASSERT_EQ(client_cipher, server_cipher); |
| 1033 ASSERT_EQ(rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( | 1037 ASSERT_EQ( |
| 1034 rtc::SSL_PROTOCOL_DTLS_10, ::testing::get<1>(GetParam())), | 1038 rtc::SSLStreamAdapter::GetDefaultSslCipherForTest( |
| 1035 server_cipher); | 1039 rtc::SSL_PROTOCOL_DTLS_10, ::testing::get<1>(GetParam()).type()), |
| 1040 server_cipher); |
| 1036 } | 1041 } |
| 1037 | 1042 |
| 1038 INSTANTIATE_TEST_CASE_P(SSLStreamAdapterTestsTLS, | 1043 // The RSA keysizes here might look strange, why not include the RFC's size |
| 1039 SSLStreamAdapterTestTLS, | 1044 // 2048?. The reason is test case slowness; testing two sizes to exercise |
| 1040 Combine(Values(rtc::KT_RSA, rtc::KT_ECDSA), | 1045 // parametrization is sufficient. |
| 1041 Values(rtc::KT_RSA, rtc::KT_ECDSA))); | 1046 INSTANTIATE_TEST_CASE_P( |
| 1042 INSTANTIATE_TEST_CASE_P(SSLStreamAdapterTestsDTLS, | 1047 SSLStreamAdapterTestsTLS, |
| 1043 SSLStreamAdapterTestDTLS, | 1048 SSLStreamAdapterTestTLS, |
| 1044 Combine(Values(rtc::KT_RSA, rtc::KT_ECDSA), | 1049 Combine(Values(rtc::KeyParams::RSA(1024, 65537), |
| 1045 Values(rtc::KT_RSA, rtc::KT_ECDSA))); | 1050 rtc::KeyParams::RSA(1152, 65537), |
| 1051 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)), |
| 1052 Values(rtc::KeyParams::RSA(1024, 65537), |
| 1053 rtc::KeyParams::RSA(1152, 65537), |
| 1054 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)))); |
| 1055 INSTANTIATE_TEST_CASE_P( |
| 1056 SSLStreamAdapterTestsDTLS, |
| 1057 SSLStreamAdapterTestDTLS, |
| 1058 Combine(Values(rtc::KeyParams::RSA(1024, 65537), |
| 1059 rtc::KeyParams::RSA(1152, 65537), |
| 1060 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)), |
| 1061 Values(rtc::KeyParams::RSA(1024, 65537), |
| 1062 rtc::KeyParams::RSA(1152, 65537), |
| 1063 rtc::KeyParams::ECDSA(rtc::EC_NIST_P256)))); |
| OLD | NEW |