Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: net/quic/crypto/quic_crypto_server_config_test.cc

Issue 839143002: Roll Chrome into Mojo. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Rebase Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/congestion_control/rtt_stats.h ('k') | net/quic/quic_client_session.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/crypto/quic_crypto_server_config.h" 5 #include "net/quic/crypto/quic_crypto_server_config.h"
6 6
7 #include <stdarg.h> 7 #include <stdarg.h>
8 8
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "net/quic/crypto/aes_128_gcm_12_encrypter.h" 10 #include "net/quic/crypto/aes_128_gcm_12_encrypter.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 } 45 }
46 } 46 }
47 47
48 bool ConfigHasDefaultSourceAddressTokenBoxer(string config_id) { 48 bool ConfigHasDefaultSourceAddressTokenBoxer(string config_id) {
49 scoped_refptr<QuicCryptoServerConfig::Config> config = GetConfig(config_id); 49 scoped_refptr<QuicCryptoServerConfig::Config> config = GetConfig(config_id);
50 return config->source_address_token_boxer == 50 return config->source_address_token_boxer ==
51 &(server_config_->default_source_address_token_boxer_); 51 &(server_config_->default_source_address_token_boxer_);
52 } 52 }
53 53
54 string NewSourceAddressToken(string config_id, 54 string NewSourceAddressToken(string config_id,
55 const IPEndPoint& ip, 55 SourceAddressTokens previous_tokens,
56 QuicRandom* rand,
57 QuicWallTime now) {
58 return NewSourceAddressToken(config_id, ip, rand, now, NULL);
59 }
60
61 string NewSourceAddressToken(string config_id,
62 const IPEndPoint& ip,
63 QuicRandom* rand,
64 QuicWallTime now,
65 const SourceAddressTokens& previous_tokens) {
66 return server_config_->NewSourceAddressToken(
67 *GetConfig(config_id), previous_tokens, ip, rand, now, NULL);
68 }
69
70 string NewSourceAddressToken(string config_id,
71 const IPEndPoint& ip, 56 const IPEndPoint& ip,
72 QuicRandom* rand, 57 QuicRandom* rand,
73 QuicWallTime now, 58 QuicWallTime now,
74 CachedNetworkParameters* cached_network_params) { 59 CachedNetworkParameters* cached_network_params) {
75 SourceAddressTokens previous_tokens;
76 return server_config_->NewSourceAddressToken(*GetConfig(config_id), 60 return server_config_->NewSourceAddressToken(*GetConfig(config_id),
77 previous_tokens, ip, rand, now, 61 previous_tokens, ip, rand, now,
78 cached_network_params); 62 cached_network_params);
79 } 63 }
80 64
81 HandshakeFailureReason ValidateSourceAddressToken(string config_id, 65 HandshakeFailureReason ValidateSourceAddressToken(string config_id,
82 StringPiece srct, 66 StringPiece srct,
83 const IPEndPoint& ip, 67 const IPEndPoint& ip,
84 QuicWallTime now) { 68 QuicWallTime now) {
85 return ValidateSourceAddressToken(config_id, srct, ip, now, NULL); 69 return ValidateSourceAddressToken(config_id, srct, ip, now, NULL);
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 override_config_protobuf_.reset( 298 override_config_protobuf_.reset(
315 QuicCryptoServerConfig::GenerateConfig(rand_, &clock_, options)); 299 QuicCryptoServerConfig::GenerateConfig(rand_, &clock_, options));
316 override_config_protobuf_->set_source_address_token_secret_override( 300 override_config_protobuf_->set_source_address_token_secret_override(
317 "a secret key"); 301 "a secret key");
318 // Lower priority than the default config. 302 // Lower priority than the default config.
319 override_config_protobuf_->set_priority(1); 303 override_config_protobuf_->set_priority(1);
320 override_config_.reset( 304 override_config_.reset(
321 server_.AddConfig(override_config_protobuf_.get(), original_time_)); 305 server_.AddConfig(override_config_protobuf_.get(), original_time_));
322 } 306 }
323 307
308 string NewSourceAddressToken(string config_id, const IPEndPoint& ip) {
309 return NewSourceAddressToken(config_id, ip, NULL);
310 }
311
312 string NewSourceAddressToken(string config_id,
313 const IPEndPoint& ip,
314 const SourceAddressTokens& previous_tokens) {
315 return peer_.NewSourceAddressToken(config_id, previous_tokens, ip, rand_,
316 clock_.WallNow(), NULL);
317 }
318
319 string NewSourceAddressToken(string config_id,
320 const IPEndPoint& ip,
321 CachedNetworkParameters* cached_network_params) {
322 SourceAddressTokens previous_tokens;
323 return peer_.NewSourceAddressToken(config_id, previous_tokens, ip, rand_,
324 clock_.WallNow(), cached_network_params);
325 }
326
327 HandshakeFailureReason ValidateSourceAddressToken(string config_id,
328 StringPiece srct,
329 const IPEndPoint& ip) {
330 return ValidateSourceAddressToken(config_id, srct, ip, NULL);
331 }
332
333 HandshakeFailureReason ValidateSourceAddressToken(
334 string config_id,
335 StringPiece srct,
336 const IPEndPoint& ip,
337 CachedNetworkParameters* cached_network_params) {
338 return peer_.ValidateSourceAddressToken(
339 config_id, srct, ip, clock_.WallNow(), cached_network_params);
340 }
341
342 HandshakeFailureReason ValidateSourceAddressTokens(string config_id,
343 StringPiece srct,
344 const IPEndPoint& ip) {
345 return ValidateSourceAddressTokens(config_id, srct, ip, NULL);
346 }
347
348 HandshakeFailureReason ValidateSourceAddressTokens(
349 string config_id,
350 StringPiece srct,
351 const IPEndPoint& ip,
352 CachedNetworkParameters* cached_network_params) {
353 return peer_.ValidateSourceAddressTokens(
354 config_id, srct, ip, clock_.WallNow(), cached_network_params);
355 }
356
324 const string kPrimary = "<primary>"; 357 const string kPrimary = "<primary>";
325 const string kOverride = "Config with custom source address token key"; 358 const string kOverride = "Config with custom source address token key";
326 359
327 IPEndPoint ip4_; 360 IPEndPoint ip4_;
328 IPEndPoint ip4_dual_; 361 IPEndPoint ip4_dual_;
329 IPEndPoint ip6_; 362 IPEndPoint ip6_;
330 363
331 MockClock clock_; 364 MockClock clock_;
332 QuicWallTime original_time_; 365 QuicWallTime original_time_;
333 QuicRandom* rand_ = QuicRandom::GetInstance(); 366 QuicRandom* rand_ = QuicRandom::GetInstance();
334 QuicCryptoServerConfig server_; 367 QuicCryptoServerConfig server_;
335 QuicCryptoServerConfigPeer peer_; 368 QuicCryptoServerConfigPeer peer_;
336 // Stores the primary config. 369 // Stores the primary config.
337 scoped_ptr<CryptoHandshakeMessage> primary_config_; 370 scoped_ptr<CryptoHandshakeMessage> primary_config_;
338 scoped_ptr<QuicServerConfigProtobuf> override_config_protobuf_; 371 scoped_ptr<QuicServerConfigProtobuf> override_config_protobuf_;
339 scoped_ptr<CryptoHandshakeMessage> override_config_; 372 scoped_ptr<CryptoHandshakeMessage> override_config_;
340 }; 373 };
341 374
342 TEST_F(SourceAddressTokenTest, SourceAddressToken) { 375 TEST_F(SourceAddressTokenTest, SourceAddressToken) {
343 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens, 376 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens,
344 false); 377 false);
345 378
346 QuicWallTime now = clock_.WallNow();
347
348 EXPECT_TRUE(peer_.ConfigHasDefaultSourceAddressTokenBoxer(kPrimary)); 379 EXPECT_TRUE(peer_.ConfigHasDefaultSourceAddressTokenBoxer(kPrimary));
349 EXPECT_FALSE(peer_.ConfigHasDefaultSourceAddressTokenBoxer(kOverride)); 380 EXPECT_FALSE(peer_.ConfigHasDefaultSourceAddressTokenBoxer(kOverride));
350 381
351 // Primary config generates configs that validate successfully. 382 // Primary config generates configs that validate successfully.
352 const string token4 = peer_.NewSourceAddressToken(kPrimary, ip4_, rand_, now); 383 const string token4 = NewSourceAddressToken(kPrimary, ip4_);
353 const string token4d = 384 const string token4d = NewSourceAddressToken(kPrimary, ip4_dual_);
354 peer_.NewSourceAddressToken(kPrimary, ip4_dual_, rand_, now); 385 const string token6 = NewSourceAddressToken(kPrimary, ip6_);
355 const string token6 = peer_.NewSourceAddressToken(kPrimary, ip6_, rand_, now); 386 EXPECT_EQ(HANDSHAKE_OK, ValidateSourceAddressToken(kPrimary, token4, ip4_));
356 EXPECT_EQ(HANDSHAKE_OK,
357 peer_.ValidateSourceAddressToken(kPrimary, token4, ip4_, now));
358 ASSERT_EQ(HANDSHAKE_OK, 387 ASSERT_EQ(HANDSHAKE_OK,
359 peer_.ValidateSourceAddressToken(kPrimary, token4, ip4_dual_, now)); 388 ValidateSourceAddressToken(kPrimary, token4, ip4_dual_));
360 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE, 389 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,
361 peer_.ValidateSourceAddressToken(kPrimary, token4, ip6_, now)); 390 ValidateSourceAddressToken(kPrimary, token4, ip6_));
391 ASSERT_EQ(HANDSHAKE_OK, ValidateSourceAddressToken(kPrimary, token4d, ip4_));
362 ASSERT_EQ(HANDSHAKE_OK, 392 ASSERT_EQ(HANDSHAKE_OK,
363 peer_.ValidateSourceAddressToken(kPrimary, token4d, ip4_, now)); 393 ValidateSourceAddressToken(kPrimary, token4d, ip4_dual_));
364 ASSERT_EQ(HANDSHAKE_OK, peer_.ValidateSourceAddressToken(kPrimary, token4d,
365 ip4_dual_, now));
366 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE, 394 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,
367 peer_.ValidateSourceAddressToken(kPrimary, token4d, ip6_, now)); 395 ValidateSourceAddressToken(kPrimary, token4d, ip6_));
368 ASSERT_EQ(HANDSHAKE_OK, 396 ASSERT_EQ(HANDSHAKE_OK, ValidateSourceAddressToken(kPrimary, token6, ip6_));
369 peer_.ValidateSourceAddressToken(kPrimary, token6, ip6_, now));
370 397
371 // Override config generates configs that validate successfully. 398 // Override config generates configs that validate successfully.
372 const string override_token4 = 399 const string override_token4 = NewSourceAddressToken(kOverride, ip4_);
373 peer_.NewSourceAddressToken(kOverride, ip4_, rand_, now); 400 const string override_token6 = NewSourceAddressToken(kOverride, ip6_);
374 const string override_token6 = 401 ASSERT_EQ(HANDSHAKE_OK,
375 peer_.NewSourceAddressToken(kOverride, ip6_, rand_, now); 402 ValidateSourceAddressToken(kOverride, override_token4, ip4_));
376 ASSERT_EQ(HANDSHAKE_OK, peer_.ValidateSourceAddressToken( 403 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,
377 kOverride, override_token4, ip4_, now)); 404 ValidateSourceAddressToken(kOverride, override_token4, ip6_));
378 ASSERT_EQ( 405 ASSERT_EQ(HANDSHAKE_OK,
379 SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE, 406 ValidateSourceAddressToken(kOverride, override_token6, ip6_));
380 peer_.ValidateSourceAddressToken(kOverride, override_token4, ip6_, now));
381 ASSERT_EQ(HANDSHAKE_OK, peer_.ValidateSourceAddressToken(
382 kOverride, override_token6, ip6_, now));
383 407
384 // Tokens generated by the primary config do not validate 408 // Tokens generated by the primary config do not validate
385 // successfully against the override config, and vice versa. 409 // successfully against the override config, and vice versa.
386 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, 410 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
387 peer_.ValidateSourceAddressToken(kOverride, token4, ip4_, now)); 411 ValidateSourceAddressToken(kOverride, token4, ip4_));
388 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, 412 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
389 peer_.ValidateSourceAddressToken(kOverride, token6, ip6_, now)); 413 ValidateSourceAddressToken(kOverride, token6, ip6_));
390 ASSERT_EQ( 414 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
391 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, 415 ValidateSourceAddressToken(kPrimary, override_token4, ip4_));
392 peer_.ValidateSourceAddressToken(kPrimary, override_token4, ip4_, now)); 416 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
393 ASSERT_EQ( 417 ValidateSourceAddressToken(kPrimary, override_token6, ip6_));
394 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
395 peer_.ValidateSourceAddressToken(kPrimary, override_token6, ip6_, now));
396 } 418 }
397 419
398 TEST_F(SourceAddressTokenTest, SourceAddressTokenExpiration) { 420 TEST_F(SourceAddressTokenTest, SourceAddressTokenExpiration) {
399 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens, 421 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens,
400 false); 422 false);
401 423
402 QuicWallTime now = clock_.WallNow(); 424 const string token = NewSourceAddressToken(kPrimary, ip4_);
403 425
404 const string token = peer_.NewSourceAddressToken(kPrimary, ip4_, rand_, now); 426 // Validation fails if the token is from the future.
427 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(-3600 * 2));
428 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_CLOCK_SKEW_FAILURE,
429 ValidateSourceAddressToken(kPrimary, token, ip4_));
405 430
406 // Validation fails after tokens expire. 431 // Validation fails after tokens expire.
407 now = original_time_.Add(QuicTime::Delta::FromSeconds(86400 * 7)); 432 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(86400 * 7));
408 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE, 433 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE,
409 peer_.ValidateSourceAddressToken(kPrimary, token, ip4_, now)); 434 ValidateSourceAddressToken(kPrimary, token, ip4_));
410
411 now = original_time_.Subtract(QuicTime::Delta::FromSeconds(3600 * 2));
412 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_CLOCK_SKEW_FAILURE,
413 peer_.ValidateSourceAddressToken(kPrimary, token, ip4_, now));
414 } 435 }
415 436
416 TEST_F(SourceAddressTokenTest, SourceAddressTokenWithNetworkParams) { 437 TEST_F(SourceAddressTokenTest, SourceAddressTokenWithNetworkParams) {
417 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens, 438 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens,
418 false); 439 false);
419 440
420 QuicWallTime now = clock_.WallNow();
421
422 // Make sure that if the source address token contains CachedNetworkParameters 441 // Make sure that if the source address token contains CachedNetworkParameters
423 // that this gets written to ValidateSourceAddressToken output argument. 442 // that this gets written to ValidateSourceAddressToken output argument.
424 CachedNetworkParameters cached_network_params_input; 443 CachedNetworkParameters cached_network_params_input;
425 cached_network_params_input.set_bandwidth_estimate_bytes_per_second(1234); 444 cached_network_params_input.set_bandwidth_estimate_bytes_per_second(1234);
426 const string token4_with_cached_network_params = peer_.NewSourceAddressToken( 445 const string token4_with_cached_network_params =
427 kPrimary, ip4_, rand_, now, &cached_network_params_input); 446 NewSourceAddressToken(kPrimary, ip4_, &cached_network_params_input);
428 447
429 CachedNetworkParameters cached_network_params_output; 448 CachedNetworkParameters cached_network_params_output;
430 #if 0 449 #if 0
431 // TODO(rtenneti): For server, enable the following check after serialization 450 // TODO(rtenneti): For server, enable the following check after serialization
432 // of optional CachedNetworkParameters is implemented. 451 // of optional CachedNetworkParameters is implemented.
433 EXPECT_NE(cached_network_params_output.DebugString(), 452 EXPECT_NE(cached_network_params_output.DebugString(),
434 cached_network_params_input.DebugString()); 453 cached_network_params_input.DebugString());
435 #endif 454 #endif
436 peer_.ValidateSourceAddressToken(kPrimary, token4_with_cached_network_params, 455 ValidateSourceAddressToken(kPrimary, token4_with_cached_network_params, ip4_,
437 ip4_, now, &cached_network_params_output); 456 &cached_network_params_output);
438 #if 0 457 #if 0
439 // TODO(rtenneti): For server, enable the following check after serialization 458 // TODO(rtenneti): For server, enable the following check after serialization
440 // of optional CachedNetworkParameters is implemented. 459 // of optional CachedNetworkParameters is implemented.
441 EXPECT_EQ(cached_network_params_output.DebugString(), 460 EXPECT_EQ(cached_network_params_output.DebugString(),
442 cached_network_params_input.DebugString()); 461 cached_network_params_input.DebugString());
443 #endif 462 #endif
444 } 463 }
445 464
446 // Test basic behavior of source address tokens including being specific 465 // Test basic behavior of source address tokens including being specific
447 // to a single IP address and server config. 466 // to a single IP address and server config.
448 // 467 //
449 // TODO(rtenneti): For server, enable the following test after serialization of 468 // TODO(rtenneti): For server, enable the following test after serialization of
450 // SourceAddressTokens is implemented. 469 // SourceAddressTokens is implemented.
451 TEST_F(SourceAddressTokenTest, DISABLED_NewSourceAddressToken) { 470 TEST_F(SourceAddressTokenTest, DISABLED_NewSourceAddressToken) {
452 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens, 471 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens,
453 true); 472 true);
454 473
455 QuicWallTime now = clock_.WallNow();
456
457 // Primary config generates configs that validate successfully. 474 // Primary config generates configs that validate successfully.
458 const string token4 = peer_.NewSourceAddressToken(kPrimary, ip4_, rand_, now); 475 const string token4 = NewSourceAddressToken(kPrimary, ip4_);
459 const string token4d = 476 const string token4d = NewSourceAddressToken(kPrimary, ip4_dual_);
460 peer_.NewSourceAddressToken(kPrimary, ip4_dual_, rand_, now); 477 const string token6 = NewSourceAddressToken(kPrimary, ip6_);
461 const string token6 = peer_.NewSourceAddressToken(kPrimary, ip6_, rand_, now); 478 EXPECT_EQ(HANDSHAKE_OK, ValidateSourceAddressTokens(kPrimary, token4, ip4_));
462 EXPECT_EQ(HANDSHAKE_OK, 479 ASSERT_EQ(HANDSHAKE_OK,
463 peer_.ValidateSourceAddressTokens(kPrimary, token4, ip4_, now)); 480 ValidateSourceAddressTokens(kPrimary, token4, ip4_dual_));
464 ASSERT_EQ(HANDSHAKE_OK, peer_.ValidateSourceAddressTokens(kPrimary, token4,
465 ip4_dual_, now));
466 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE, 481 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,
467 peer_.ValidateSourceAddressTokens(kPrimary, token4, ip6_, now)); 482 ValidateSourceAddressTokens(kPrimary, token4, ip6_));
483 ASSERT_EQ(HANDSHAKE_OK, ValidateSourceAddressTokens(kPrimary, token4d, ip4_));
468 ASSERT_EQ(HANDSHAKE_OK, 484 ASSERT_EQ(HANDSHAKE_OK,
469 peer_.ValidateSourceAddressTokens(kPrimary, token4d, ip4_, now)); 485 ValidateSourceAddressTokens(kPrimary, token4d, ip4_dual_));
470 ASSERT_EQ(HANDSHAKE_OK, peer_.ValidateSourceAddressTokens(kPrimary, token4d,
471 ip4_dual_, now));
472 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE, 486 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,
473 peer_.ValidateSourceAddressTokens(kPrimary, token4d, ip6_, now)); 487 ValidateSourceAddressTokens(kPrimary, token4d, ip6_));
474 ASSERT_EQ(HANDSHAKE_OK, 488 ASSERT_EQ(HANDSHAKE_OK, ValidateSourceAddressTokens(kPrimary, token6, ip6_));
475 peer_.ValidateSourceAddressTokens(kPrimary, token6, ip6_, now));
476 489
477 // Override config generates configs that validate successfully. 490 // Override config generates configs that validate successfully.
478 const string override_token4 = 491 const string override_token4 = NewSourceAddressToken(kOverride, ip4_);
479 peer_.NewSourceAddressToken(kOverride, ip4_, rand_, now); 492 const string override_token6 = NewSourceAddressToken(kOverride, ip6_);
480 const string override_token6 = 493 ASSERT_EQ(HANDSHAKE_OK,
481 peer_.NewSourceAddressToken(kOverride, ip6_, rand_, now); 494 ValidateSourceAddressTokens(kOverride, override_token4, ip4_));
482 ASSERT_EQ(HANDSHAKE_OK, peer_.ValidateSourceAddressTokens( 495 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE,
483 kOverride, override_token4, ip4_, now)); 496 ValidateSourceAddressTokens(kOverride, override_token4, ip6_));
484 ASSERT_EQ( 497 ASSERT_EQ(HANDSHAKE_OK,
485 SOURCE_ADDRESS_TOKEN_DIFFERENT_IP_ADDRESS_FAILURE, 498 ValidateSourceAddressTokens(kOverride, override_token6, ip6_));
486 peer_.ValidateSourceAddressTokens(kOverride, override_token4, ip6_, now));
487 ASSERT_EQ(HANDSHAKE_OK, peer_.ValidateSourceAddressTokens(
488 kOverride, override_token6, ip6_, now));
489 499
490 // Tokens generated by the primary config do not validate 500 // Tokens generated by the primary config do not validate
491 // successfully against the override config, and vice versa. 501 // successfully against the override config, and vice versa.
492 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, 502 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
493 peer_.ValidateSourceAddressTokens(kOverride, token4, ip4_, now)); 503 ValidateSourceAddressTokens(kOverride, token4, ip4_));
494 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, 504 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
495 peer_.ValidateSourceAddressTokens(kOverride, token6, ip6_, now)); 505 ValidateSourceAddressTokens(kOverride, token6, ip6_));
496 ASSERT_EQ( 506 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
497 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE, 507 ValidateSourceAddressTokens(kPrimary, override_token4, ip4_));
498 peer_.ValidateSourceAddressTokens(kPrimary, override_token4, ip4_, now)); 508 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
499 ASSERT_EQ( 509 ValidateSourceAddressTokens(kPrimary, override_token6, ip6_));
500 SOURCE_ADDRESS_TOKEN_DECRYPTION_FAILURE,
501 peer_.ValidateSourceAddressTokens(kPrimary, override_token6, ip6_, now));
502 } 510 }
503 511
504 // TODO(rtenneti): For server, enable the following test after serialization of 512 // TODO(rtenneti): For server, enable the following test after serialization of
505 // SourceAddressTokens is implemented. 513 // SourceAddressTokens is implemented.
506 TEST_F(SourceAddressTokenTest, DISABLED_NewSourceAddressTokenExpiration) { 514 TEST_F(SourceAddressTokenTest, DISABLED_NewSourceAddressTokenExpiration) {
507 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens, 515 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens,
508 true); 516 true);
509 517
510 QuicWallTime now = clock_.WallNow(); 518 const string token = NewSourceAddressToken(kPrimary, ip4_);
511 519
512 const string token = peer_.NewSourceAddressToken(kPrimary, ip4_, rand_, now); 520 // Validation fails if the token is from the future.
521 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(-3600 * 2));
522 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_CLOCK_SKEW_FAILURE,
523 ValidateSourceAddressTokens(kPrimary, token, ip4_));
513 524
514 // Validation fails after tokens expire. 525 // Validation fails after tokens expire.
515 now = original_time_.Add(QuicTime::Delta::FromSeconds(86400 * 7)); 526 clock_.AdvanceTime(QuicTime::Delta::FromSeconds(86400 * 7));
516 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE, 527 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_EXPIRED_FAILURE,
517 peer_.ValidateSourceAddressTokens(kPrimary, token, ip4_, now)); 528 ValidateSourceAddressTokens(kPrimary, token, ip4_));
518
519 now = original_time_.Subtract(QuicTime::Delta::FromSeconds(3600 * 2));
520 ASSERT_EQ(SOURCE_ADDRESS_TOKEN_CLOCK_SKEW_FAILURE,
521 peer_.ValidateSourceAddressTokens(kPrimary, token, ip4_, now));
522 } 529 }
523 530
524 TEST_F(SourceAddressTokenTest, NewSourceAddressTokenWithNetworkParams) { 531 TEST_F(SourceAddressTokenTest, NewSourceAddressTokenWithNetworkParams) {
525 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens, 532 ValueRestore<bool> old_flag(&FLAGS_quic_use_multiple_address_in_source_tokens,
526 true); 533 true);
527 534
528 QuicWallTime now = clock_.WallNow();
529
530 // Make sure that if the source address token contains CachedNetworkParameters 535 // Make sure that if the source address token contains CachedNetworkParameters
531 // that this gets written to ValidateSourceAddressToken output argument. 536 // that this gets written to ValidateSourceAddressToken output argument.
532 CachedNetworkParameters cached_network_params_input; 537 CachedNetworkParameters cached_network_params_input;
533 cached_network_params_input.set_bandwidth_estimate_bytes_per_second(1234); 538 cached_network_params_input.set_bandwidth_estimate_bytes_per_second(1234);
534 const string token4_with_cached_network_params = peer_.NewSourceAddressToken( 539 const string token4_with_cached_network_params =
535 kPrimary, ip4_, rand_, now, &cached_network_params_input); 540 NewSourceAddressToken(kPrimary, ip4_, &cached_network_params_input);
536 541
537 CachedNetworkParameters cached_network_params_output; 542 CachedNetworkParameters cached_network_params_output;
538 #if 0 543 #if 0
539 // TODO(rtenneti): For server, enable the following check after serialization 544 // TODO(rtenneti): For server, enable the following check after serialization
540 // of optional CachedNetworkParameters is implemented. 545 // of optional CachedNetworkParameters is implemented.
541 EXPECT_NE(cached_network_params_output.DebugString(), 546 EXPECT_NE(cached_network_params_output.DebugString(),
542 cached_network_params_input.DebugString()); 547 cached_network_params_input.DebugString());
543 #endif 548 #endif
544 peer_.ValidateSourceAddressTokens(kPrimary, token4_with_cached_network_params, 549 ValidateSourceAddressTokens(kPrimary, token4_with_cached_network_params, ip4_,
545 ip4_, now, &cached_network_params_output); 550 &cached_network_params_output);
546 #if 0 551 #if 0
547 // TODO(rtenneti): For server, enable the following check after serialization 552 // TODO(rtenneti): For server, enable the following check after serialization
548 // of optional CachedNetworkParameters is implemented. 553 // of optional CachedNetworkParameters is implemented.
549 EXPECT_EQ(cached_network_params_output.DebugString(), 554 EXPECT_EQ(cached_network_params_output.DebugString(),
550 cached_network_params_input.DebugString()); 555 cached_network_params_input.DebugString());
551 #endif 556 #endif
552 } 557 }
553 558
554 // Test the ability for a source address token to be valid for multiple 559 // Test the ability for a source address token to be valid for multiple
555 // addresses. 560 // addresses.
(...skipping 10 matching lines...) Expand all
566 SourceAddressToken previous_token; 571 SourceAddressToken previous_token;
567 IPAddressNumber ip_address = ip6_.address(); 572 IPAddressNumber ip_address = ip6_.address();
568 if (ip6_.GetSockAddrFamily() == AF_INET) { 573 if (ip6_.GetSockAddrFamily() == AF_INET) {
569 ip_address = ConvertIPv4NumberToIPv6Number(ip_address); 574 ip_address = ConvertIPv4NumberToIPv6Number(ip_address);
570 } 575 }
571 previous_token.set_ip(IPAddressToPackedString(ip_address)); 576 previous_token.set_ip(IPAddressToPackedString(ip_address));
572 previous_token.set_timestamp(now.ToUNIXSeconds()); 577 previous_token.set_timestamp(now.ToUNIXSeconds());
573 SourceAddressTokens previous_tokens; 578 SourceAddressTokens previous_tokens;
574 (*previous_tokens.add_tokens()) = previous_token; 579 (*previous_tokens.add_tokens()) = previous_token;
575 const string token4or6 = 580 const string token4or6 =
576 peer_.NewSourceAddressToken(kPrimary, ip4_, rand_, now, previous_tokens); 581 NewSourceAddressToken(kPrimary, ip4_, previous_tokens);
577 582
578 EXPECT_EQ(HANDSHAKE_OK, 583 EXPECT_EQ(HANDSHAKE_OK,
579 peer_.ValidateSourceAddressTokens(kPrimary, token4or6, ip4_, now)); 584 ValidateSourceAddressTokens(kPrimary, token4or6, ip4_));
580 ASSERT_EQ(HANDSHAKE_OK, 585 ASSERT_EQ(HANDSHAKE_OK,
581 peer_.ValidateSourceAddressTokens(kPrimary, token4or6, ip6_, now)); 586 ValidateSourceAddressTokens(kPrimary, token4or6, ip6_));
582 } 587 }
583 588
584 TEST(QuicCryptoServerConfigTest, ValidateServerNonce) { 589 TEST(QuicCryptoServerConfigTest, ValidateServerNonce) {
585 QuicRandom* rand = QuicRandom::GetInstance(); 590 QuicRandom* rand = QuicRandom::GetInstance();
586 QuicCryptoServerConfig server(QuicCryptoServerConfig::TESTING, rand); 591 QuicCryptoServerConfig server(QuicCryptoServerConfig::TESTING, rand);
587 QuicCryptoServerConfigPeer peer(&server); 592 QuicCryptoServerConfigPeer peer(&server);
588 593
589 StringPiece message("hello world"); 594 StringPiece message("hello world");
590 const size_t key_size = CryptoSecretBoxer::GetKeySize(); 595 const size_t key_size = CryptoSecretBoxer::GetKeySize();
591 scoped_ptr<uint8[]> key(new uint8[key_size]); 596 scoped_ptr<uint8[]> key(new uint8[key_size]);
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
910 nullptr); 915 nullptr);
911 test_peer_.CheckConfigs( 916 test_peer_.CheckConfigs(
912 "a", false, 917 "a", false,
913 "b", true, 918 "b", true,
914 "c", false, 919 "c", false,
915 nullptr); 920 nullptr);
916 } 921 }
917 922
918 } // namespace test 923 } // namespace test
919 } // namespace net 924 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/rtt_stats.h ('k') | net/quic/quic_client_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698