Chromium Code Reviews| 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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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(const std::string& client_cert_pem, |
| 165 const std::string& client_private_key_pem, | 165 const std::string& client_private_key_pem, |
| 166 bool dtls, | 166 bool dtls, |
| 167 rtc::KeyType client_key_type = rtc::KT_DEFAULT, | 167 rtc::KeyType client_key_type = rtc::KT_DEFAULT, |
| 168 rtc::KeyType server_key_type = rtc::KT_DEFAULT) | 168 rtc::KeyType server_key_type = rtc::KT_DEFAULT) : |
|
tommi (sloooow) - chröme
2015/08/18 14:49:35
nit: no need to change this
| |
| 169 : client_buffer_(kFifoBufferSize), | 169 client_buffer_(kFifoBufferSize), |
| 170 server_buffer_(kFifoBufferSize), | 170 server_buffer_(kFifoBufferSize), |
| 171 client_stream_( | 171 client_stream_( |
| 172 new SSLDummyStream(this, "c2s", &client_buffer_, &server_buffer_)), | 172 new SSLDummyStream(this, "c2s", &client_buffer_, &server_buffer_)), |
| 173 server_stream_( | 173 server_stream_( |
| 174 new SSLDummyStream(this, "s2c", &server_buffer_, &client_buffer_)), | 174 new SSLDummyStream(this, "s2c", &server_buffer_, &client_buffer_)), |
| 175 client_ssl_(rtc::SSLStreamAdapter::Create(client_stream_)), | 175 client_ssl_(rtc::SSLStreamAdapter::Create(client_stream_)), |
| 176 server_ssl_(rtc::SSLStreamAdapter::Create(server_stream_)), | 176 server_ssl_(rtc::SSLStreamAdapter::Create(server_stream_)), |
| 177 client_identity_(NULL), | 177 delay_(0), |
| 178 server_identity_(NULL), | 178 mtu_(1460), |
| 179 delay_(0), | 179 loss_(0), |
| 180 mtu_(1460), | 180 lose_first_packet_(false), |
| 181 loss_(0), | 181 damage_(false), |
| 182 lose_first_packet_(false), | 182 dtls_(dtls), |
| 183 damage_(false), | 183 handshake_wait_(5000), |
| 184 dtls_(dtls), | 184 identities_set_(false) { |
| 185 handshake_wait_(5000), | |
| 186 identities_set_(false) { | |
| 187 // Set use of the test RNG to get predictable loss patterns. | 185 // Set use of the test RNG to get predictable loss patterns. |
| 188 rtc::SetRandomTestMode(true); | 186 rtc::SetRandomTestMode(true); |
| 189 | 187 |
| 190 // Set up the slots | 188 // Set up the slots |
| 191 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); | 189 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); |
| 192 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); | 190 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); |
| 193 | 191 |
| 194 if (!client_cert_pem.empty() && !client_private_key_pem.empty()) { | 192 if (!client_cert_pem.empty() && !client_private_key_pem.empty()) { |
| 195 client_identity_ = rtc::SSLIdentity::FromPEMStrings( | 193 client_certificate_ = webrtc::DtlsCertificate::Create( |
| 196 client_private_key_pem, client_cert_pem); | 194 rtc::scoped_ptr<rtc::SSLIdentity>( |
| 195 rtc::SSLIdentity::FromPEMStrings(client_private_key_pem, | |
| 196 client_cert_pem)).Pass()); | |
| 197 } else { | 197 } else { |
| 198 client_identity_ = rtc::SSLIdentity::Generate("client", client_key_type); | 198 client_certificate_ = webrtc::DtlsCertificate::Create( |
| 199 rtc::scoped_ptr<rtc::SSLIdentity>( | |
| 200 rtc::SSLIdentity::Generate("client", client_key_type)).Pass()); | |
| 199 } | 201 } |
| 200 server_identity_ = rtc::SSLIdentity::Generate("server", server_key_type); | 202 server_certificate_ = webrtc::DtlsCertificate::Create( |
| 203 rtc::scoped_ptr<rtc::SSLIdentity>( | |
| 204 rtc::SSLIdentity::Generate("server", server_key_type)).Pass()); | |
| 201 | 205 |
| 202 client_ssl_->SetIdentity(client_identity_); | 206 client_ssl_->SetCertificate(client_certificate_); |
| 203 server_ssl_->SetIdentity(server_identity_); | 207 server_ssl_->SetCertificate(server_certificate_); |
| 204 } | 208 } |
| 205 | 209 |
| 206 ~SSLStreamAdapterTestBase() { | 210 ~SSLStreamAdapterTestBase() { |
| 207 // Put it back for the next test. | 211 // Put it back for the next test. |
| 208 rtc::SetRandomTestMode(false); | 212 rtc::SetRandomTestMode(false); |
| 209 } | 213 } |
| 210 | 214 |
| 211 // Recreate the client/server identities with the specified validity period. | 215 // Recreate the client/server identities with the specified validity period. |
| 212 // |not_before| and |not_after| are offsets from the current time in number | 216 // |not_before| and |not_after| are offsets from the current time in number |
| 213 // of seconds. | 217 // of seconds. |
| 214 void ResetIdentitiesWithValidity(int not_before, int not_after) { | 218 void ResetIdentitiesWithValidity(int not_before, int not_after) { |
| 215 client_stream_ = | 219 client_stream_ = |
| 216 new SSLDummyStream(this, "c2s", &client_buffer_, &server_buffer_); | 220 new SSLDummyStream(this, "c2s", &client_buffer_, &server_buffer_); |
| 217 server_stream_ = | 221 server_stream_ = |
| 218 new SSLDummyStream(this, "s2c", &server_buffer_, &client_buffer_); | 222 new SSLDummyStream(this, "s2c", &server_buffer_, &client_buffer_); |
| 219 | 223 |
| 220 client_ssl_.reset(rtc::SSLStreamAdapter::Create(client_stream_)); | 224 client_ssl_.reset(rtc::SSLStreamAdapter::Create(client_stream_)); |
| 221 server_ssl_.reset(rtc::SSLStreamAdapter::Create(server_stream_)); | 225 server_ssl_.reset(rtc::SSLStreamAdapter::Create(server_stream_)); |
| 222 | 226 |
| 223 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); | 227 client_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); |
| 224 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); | 228 server_ssl_->SignalEvent.connect(this, &SSLStreamAdapterTestBase::OnEvent); |
| 225 | 229 |
| 226 rtc::SSLIdentityParams client_params; | 230 rtc::SSLIdentityParams client_params; |
| 227 client_params.common_name = "client"; | 231 client_params.common_name = "client"; |
| 228 client_params.not_before = not_before; | 232 client_params.not_before = not_before; |
| 229 client_params.not_after = not_after; | 233 client_params.not_after = not_after; |
| 230 client_params.key_type = rtc::KT_DEFAULT; | 234 client_params.key_type = rtc::KT_DEFAULT; |
| 231 client_identity_ = rtc::SSLIdentity::GenerateForTest(client_params); | 235 client_certificate_ = webrtc::DtlsCertificate::Create( |
| 236 rtc::scoped_ptr<rtc::SSLIdentity>( | |
| 237 rtc::SSLIdentity::GenerateForTest(client_params)).Pass()); | |
| 232 | 238 |
| 233 rtc::SSLIdentityParams server_params; | 239 rtc::SSLIdentityParams server_params; |
| 234 server_params.common_name = "server"; | 240 server_params.common_name = "server"; |
| 235 server_params.not_before = not_before; | 241 server_params.not_before = not_before; |
| 236 server_params.not_after = not_after; | 242 server_params.not_after = not_after; |
| 237 server_params.key_type = rtc::KT_DEFAULT; | 243 server_params.key_type = rtc::KT_DEFAULT; |
| 238 server_identity_ = rtc::SSLIdentity::GenerateForTest(server_params); | 244 server_certificate_ = webrtc::DtlsCertificate::Create( |
| 245 rtc::scoped_ptr<rtc::SSLIdentity>( | |
| 246 rtc::SSLIdentity::GenerateForTest(server_params)).Pass()); | |
| 239 | 247 |
| 240 client_ssl_->SetIdentity(client_identity_); | 248 client_ssl_->SetCertificate(client_certificate_); |
| 241 server_ssl_->SetIdentity(server_identity_); | 249 server_ssl_->SetCertificate(server_certificate_); |
| 242 } | 250 } |
| 243 | 251 |
| 244 virtual void OnEvent(rtc::StreamInterface *stream, int sig, int err) { | 252 virtual void OnEvent(rtc::StreamInterface *stream, int sig, int err) { |
| 245 LOG(LS_INFO) << "SSLStreamAdapterTestBase::OnEvent sig=" << sig; | 253 LOG(LS_INFO) << "SSLStreamAdapterTestBase::OnEvent sig=" << sig; |
| 246 | 254 |
| 247 if (sig & rtc::SE_READ) { | 255 if (sig & rtc::SE_READ) { |
| 248 ReadData(stream); | 256 ReadData(stream); |
| 249 } | 257 } |
| 250 | 258 |
| 251 if ((stream == client_ssl_.get()) && (sig & rtc::SE_WRITE)) { | 259 if ((stream == client_ssl_.get()) && (sig & rtc::SE_WRITE)) { |
| 252 WriteData(); | 260 WriteData(); |
| 253 } | 261 } |
| 254 } | 262 } |
| 255 | 263 |
| 256 void SetPeerIdentitiesByDigest(bool correct) { | 264 void SetPeerIdentitiesByDigest(bool correct) { |
| 257 unsigned char digest[20]; | 265 unsigned char digest[20]; |
| 258 size_t digest_len; | 266 size_t digest_len; |
| 259 bool rv; | 267 bool rv; |
| 260 | 268 |
| 261 LOG(LS_INFO) << "Setting peer identities by digest"; | 269 LOG(LS_INFO) << "Setting peer identities by digest"; |
| 262 | 270 |
| 263 rv = server_identity_->certificate().ComputeDigest(rtc::DIGEST_SHA_1, | 271 rv = server_certificate_->identity()->certificate().ComputeDigest( |
| 264 digest, 20, | 272 rtc::DIGEST_SHA_1, digest, 20, &digest_len); |
| 265 &digest_len); | |
| 266 ASSERT_TRUE(rv); | 273 ASSERT_TRUE(rv); |
| 267 if (!correct) { | 274 if (!correct) { |
| 268 LOG(LS_INFO) << "Setting bogus digest for server cert"; | 275 LOG(LS_INFO) << "Setting bogus digest for server cert"; |
| 269 digest[0]++; | 276 digest[0]++; |
| 270 } | 277 } |
| 271 rv = client_ssl_->SetPeerCertificateDigest(rtc::DIGEST_SHA_1, digest, | 278 rv = client_ssl_->SetPeerCertificateDigest(rtc::DIGEST_SHA_1, digest, |
| 272 digest_len); | 279 digest_len); |
| 273 ASSERT_TRUE(rv); | 280 ASSERT_TRUE(rv); |
| 274 | 281 |
| 275 | 282 |
| 276 rv = client_identity_->certificate().ComputeDigest(rtc::DIGEST_SHA_1, | 283 rv = client_certificate_->identity()->certificate().ComputeDigest( |
| 277 digest, 20, &digest_len); | 284 rtc::DIGEST_SHA_1, digest, 20, &digest_len); |
| 278 ASSERT_TRUE(rv); | 285 ASSERT_TRUE(rv); |
| 279 if (!correct) { | 286 if (!correct) { |
| 280 LOG(LS_INFO) << "Setting bogus digest for client cert"; | 287 LOG(LS_INFO) << "Setting bogus digest for client cert"; |
| 281 digest[0]++; | 288 digest[0]++; |
| 282 } | 289 } |
| 283 rv = server_ssl_->SetPeerCertificateDigest(rtc::DIGEST_SHA_1, digest, | 290 rv = server_ssl_->SetPeerCertificateDigest(rtc::DIGEST_SHA_1, digest, |
| 284 digest_len); | 291 digest_len); |
| 285 ASSERT_TRUE(rv); | 292 ASSERT_TRUE(rv); |
| 286 | 293 |
| 287 identities_set_ = true; | 294 identities_set_ = true; |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 441 virtual void ReadData(rtc::StreamInterface *stream) = 0; | 448 virtual void ReadData(rtc::StreamInterface *stream) = 0; |
| 442 virtual void TestTransfer(int size) = 0; | 449 virtual void TestTransfer(int size) = 0; |
| 443 | 450 |
| 444 protected: | 451 protected: |
| 445 rtc::FifoBuffer client_buffer_; | 452 rtc::FifoBuffer client_buffer_; |
| 446 rtc::FifoBuffer server_buffer_; | 453 rtc::FifoBuffer server_buffer_; |
| 447 SSLDummyStream *client_stream_; // freed by client_ssl_ destructor | 454 SSLDummyStream *client_stream_; // freed by client_ssl_ destructor |
| 448 SSLDummyStream *server_stream_; // freed by server_ssl_ destructor | 455 SSLDummyStream *server_stream_; // freed by server_ssl_ destructor |
| 449 rtc::scoped_ptr<rtc::SSLStreamAdapter> client_ssl_; | 456 rtc::scoped_ptr<rtc::SSLStreamAdapter> client_ssl_; |
| 450 rtc::scoped_ptr<rtc::SSLStreamAdapter> server_ssl_; | 457 rtc::scoped_ptr<rtc::SSLStreamAdapter> server_ssl_; |
| 451 rtc::SSLIdentity *client_identity_; // freed by client_ssl_ destructor | 458 rtc::scoped_refptr<webrtc::DtlsCertificate> client_certificate_; |
| 452 rtc::SSLIdentity *server_identity_; // freed by server_ssl_ destructor | 459 rtc::scoped_refptr<webrtc::DtlsCertificate> server_certificate_; |
| 453 int delay_; | 460 int delay_; |
| 454 size_t mtu_; | 461 size_t mtu_; |
| 455 int loss_; | 462 int loss_; |
| 456 bool lose_first_packet_; | 463 bool lose_first_packet_; |
| 457 bool damage_; | 464 bool damage_; |
| 458 bool dtls_; | 465 bool dtls_; |
| 459 int handshake_wait_; | 466 int handshake_wait_; |
| 460 bool identities_set_; | 467 bool identities_set_; |
| 461 }; | 468 }; |
| 462 | 469 |
| (...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1051 } | 1058 } |
| 1052 | 1059 |
| 1053 INSTANTIATE_TEST_CASE_P(SSLStreamAdapterTestsTLS, | 1060 INSTANTIATE_TEST_CASE_P(SSLStreamAdapterTestsTLS, |
| 1054 SSLStreamAdapterTestTLS, | 1061 SSLStreamAdapterTestTLS, |
| 1055 Combine(Values(rtc::KT_RSA, rtc::KT_ECDSA), | 1062 Combine(Values(rtc::KT_RSA, rtc::KT_ECDSA), |
| 1056 Values(rtc::KT_RSA, rtc::KT_ECDSA))); | 1063 Values(rtc::KT_RSA, rtc::KT_ECDSA))); |
| 1057 INSTANTIATE_TEST_CASE_P(SSLStreamAdapterTestsDTLS, | 1064 INSTANTIATE_TEST_CASE_P(SSLStreamAdapterTestsDTLS, |
| 1058 SSLStreamAdapterTestDTLS, | 1065 SSLStreamAdapterTestDTLS, |
| 1059 Combine(Values(rtc::KT_RSA, rtc::KT_ECDSA), | 1066 Combine(Values(rtc::KT_RSA, rtc::KT_ECDSA), |
| 1060 Values(rtc::KT_RSA, rtc::KT_ECDSA))); | 1067 Values(rtc::KT_RSA, rtc::KT_ECDSA))); |
| OLD | NEW |