OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 | 5 |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 if (key_type) { | 259 if (key_type) { |
260 key_definition.provider_data.push_back( | 260 key_definition.provider_data.push_back( |
261 cryptohome::KeyDefinition::ProviderData("type")); | 261 cryptohome::KeyDefinition::ProviderData("type")); |
262 key_definition.provider_data.back().number = std::move(key_type); | 262 key_definition.provider_data.back().number = std::move(key_type); |
263 } | 263 } |
264 if (salt) { | 264 if (salt) { |
265 key_definition.provider_data.push_back( | 265 key_definition.provider_data.push_back( |
266 cryptohome::KeyDefinition::ProviderData("salt")); | 266 cryptohome::KeyDefinition::ProviderData("salt")); |
267 key_definition.provider_data.back().bytes = std::move(salt); | 267 key_definition.provider_data.back().bytes = std::move(salt); |
268 } | 268 } |
269 EXPECT_CALL(*mock_homedir_methods_, | 269 EXPECT_CALL( |
270 GetKeyDataEx(cryptohome::Identification( | 270 *mock_homedir_methods_, |
271 user_context_.GetAccountId().GetUserEmail()), | 271 GetKeyDataEx(cryptohome::Identification(user_context_.GetAccountId()), |
272 kCryptohomeGAIAKeyLabel, _)) | 272 kCryptohomeGAIAKeyLabel, _)) |
273 .WillOnce(WithArg<2>(Invoke( | 273 .WillOnce(WithArg<2>(Invoke( |
274 this, &CryptohomeAuthenticatorTest::InvokeGetDataExCallback))); | 274 this, &CryptohomeAuthenticatorTest::InvokeGetDataExCallback))); |
275 } | 275 } |
276 | 276 |
277 void ExpectMountExCall(bool expect_create_attempt) { | 277 void ExpectMountExCall(bool expect_create_attempt) { |
278 const cryptohome::KeyDefinition auth_key(transformed_key_.GetSecret(), | 278 const cryptohome::KeyDefinition auth_key(transformed_key_.GetSecret(), |
279 std::string(), | 279 std::string(), |
280 cryptohome::PRIV_DEFAULT); | 280 cryptohome::PRIV_DEFAULT); |
281 cryptohome::MountParameters mount(false /* ephemeral */); | 281 cryptohome::MountParameters mount(false /* ephemeral */); |
282 if (expect_create_attempt) { | 282 if (expect_create_attempt) { |
283 mount.create_keys.push_back(cryptohome::KeyDefinition( | 283 mount.create_keys.push_back(cryptohome::KeyDefinition( |
284 transformed_key_.GetSecret(), | 284 transformed_key_.GetSecret(), |
285 kCryptohomeGAIAKeyLabel, | 285 kCryptohomeGAIAKeyLabel, |
286 cryptohome::PRIV_DEFAULT)); | 286 cryptohome::PRIV_DEFAULT)); |
287 } | 287 } |
288 EXPECT_CALL(*mock_homedir_methods_, | 288 EXPECT_CALL( |
289 MountEx(cryptohome::Identification( | 289 *mock_homedir_methods_, |
290 user_context_.GetAccountId().GetUserEmail()), | 290 MountEx(cryptohome::Identification(user_context_.GetAccountId()), |
291 cryptohome::Authorization(auth_key), mount, _)) | 291 cryptohome::Authorization(auth_key), mount, _)) |
292 .Times(1) | 292 .Times(1) |
293 .RetiresOnSaturation(); | 293 .RetiresOnSaturation(); |
294 } | 294 } |
295 | 295 |
296 void RunResolve(CryptohomeAuthenticator* auth) { | 296 void RunResolve(CryptohomeAuthenticator* auth) { |
297 auth->Resolve(); | 297 auth->Resolve(); |
298 base::MessageLoop::current()->RunUntilIdle(); | 298 base::MessageLoop::current()->RunUntilIdle(); |
299 } | 299 } |
300 | 300 |
301 void SetAttemptState(CryptohomeAuthenticator* auth, TestAttemptState* state) { | 301 void SetAttemptState(CryptohomeAuthenticator* auth, TestAttemptState* state) { |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 TEST_F(CryptohomeAuthenticatorTest, DriveDataResync) { | 555 TEST_F(CryptohomeAuthenticatorTest, DriveDataResync) { |
556 UserContext expected_user_context(user_context_with_transformed_key_); | 556 UserContext expected_user_context(user_context_with_transformed_key_); |
557 expected_user_context.SetUserIDHash( | 557 expected_user_context.SetUserIDHash( |
558 cryptohome::MockAsyncMethodCaller::kFakeSanitizedUsername); | 558 cryptohome::MockAsyncMethodCaller::kFakeSanitizedUsername); |
559 ExpectLoginSuccess(expected_user_context); | 559 ExpectLoginSuccess(expected_user_context); |
560 FailOnLoginFailure(); | 560 FailOnLoginFailure(); |
561 | 561 |
562 // Set up mock async method caller to respond successfully to a cryptohome | 562 // Set up mock async method caller to respond successfully to a cryptohome |
563 // remove attempt. | 563 // remove attempt. |
564 mock_caller_->SetUp(true, cryptohome::MOUNT_ERROR_NONE); | 564 mock_caller_->SetUp(true, cryptohome::MOUNT_ERROR_NONE); |
565 EXPECT_CALL(*mock_caller_, | 565 EXPECT_CALL( |
566 AsyncRemove(user_context_.GetAccountId().GetUserEmail(), _)) | 566 *mock_caller_, |
| 567 AsyncRemove(cryptohome::Identification(user_context_.GetAccountId()), _)) |
567 .Times(1) | 568 .Times(1) |
568 .RetiresOnSaturation(); | 569 .RetiresOnSaturation(); |
569 | 570 |
570 // Set up mock homedir methods to respond successfully to a cryptohome create | 571 // Set up mock homedir methods to respond successfully to a cryptohome create |
571 // attempt. | 572 // attempt. |
572 ExpectGetKeyDataExCall(scoped_ptr<int64_t>(), scoped_ptr<std::string>()); | 573 ExpectGetKeyDataExCall(scoped_ptr<int64_t>(), scoped_ptr<std::string>()); |
573 ExpectMountExCall(true /* expect_create_attempt */); | 574 ExpectMountExCall(true /* expect_create_attempt */); |
574 | 575 |
575 state_->PresetOnlineLoginStatus(AuthFailure::AuthFailureNone()); | 576 state_->PresetOnlineLoginStatus(AuthFailure::AuthFailureNone()); |
576 SetAttemptState(auth_.get(), state_.release()); | 577 SetAttemptState(auth_.get(), state_.release()); |
577 | 578 |
578 auth_->ResyncEncryptedData(); | 579 auth_->ResyncEncryptedData(); |
579 base::MessageLoop::current()->Run(); | 580 base::MessageLoop::current()->Run(); |
580 } | 581 } |
581 | 582 |
582 TEST_F(CryptohomeAuthenticatorTest, DriveResyncFail) { | 583 TEST_F(CryptohomeAuthenticatorTest, DriveResyncFail) { |
583 FailOnLoginSuccess(); | 584 FailOnLoginSuccess(); |
584 ExpectLoginFailure(AuthFailure(AuthFailure::DATA_REMOVAL_FAILED)); | 585 ExpectLoginFailure(AuthFailure(AuthFailure::DATA_REMOVAL_FAILED)); |
585 | 586 |
586 // Set up mock async method caller to fail a cryptohome remove attempt. | 587 // Set up mock async method caller to fail a cryptohome remove attempt. |
587 mock_caller_->SetUp(false, cryptohome::MOUNT_ERROR_NONE); | 588 mock_caller_->SetUp(false, cryptohome::MOUNT_ERROR_NONE); |
588 EXPECT_CALL(*mock_caller_, | 589 EXPECT_CALL( |
589 AsyncRemove(user_context_.GetAccountId().GetUserEmail(), _)) | 590 *mock_caller_, |
| 591 AsyncRemove(cryptohome::Identification(user_context_.GetAccountId()), _)) |
590 .Times(1) | 592 .Times(1) |
591 .RetiresOnSaturation(); | 593 .RetiresOnSaturation(); |
592 | 594 |
593 SetAttemptState(auth_.get(), state_.release()); | 595 SetAttemptState(auth_.get(), state_.release()); |
594 | 596 |
595 auth_->ResyncEncryptedData(); | 597 auth_->ResyncEncryptedData(); |
596 base::MessageLoop::current()->Run(); | 598 base::MessageLoop::current()->Run(); |
597 } | 599 } |
598 | 600 |
599 TEST_F(CryptohomeAuthenticatorTest, DriveRequestOldPassword) { | 601 TEST_F(CryptohomeAuthenticatorTest, DriveRequestOldPassword) { |
600 FailOnLoginSuccess(); | 602 FailOnLoginSuccess(); |
601 ExpectPasswordChange(); | 603 ExpectPasswordChange(); |
602 | 604 |
603 state_->PresetCryptohomeStatus(false, cryptohome::MOUNT_ERROR_KEY_FAILURE); | 605 state_->PresetCryptohomeStatus(false, cryptohome::MOUNT_ERROR_KEY_FAILURE); |
604 state_->PresetOnlineLoginStatus(AuthFailure::AuthFailureNone()); | 606 state_->PresetOnlineLoginStatus(AuthFailure::AuthFailureNone()); |
605 SetAttemptState(auth_.get(), state_.release()); | 607 SetAttemptState(auth_.get(), state_.release()); |
606 | 608 |
607 RunResolve(auth_.get()); | 609 RunResolve(auth_.get()); |
608 } | 610 } |
609 | 611 |
610 TEST_F(CryptohomeAuthenticatorTest, DriveDataRecover) { | 612 TEST_F(CryptohomeAuthenticatorTest, DriveDataRecover) { |
611 UserContext expected_user_context(user_context_with_transformed_key_); | 613 UserContext expected_user_context(user_context_with_transformed_key_); |
612 expected_user_context.SetUserIDHash( | 614 expected_user_context.SetUserIDHash( |
613 cryptohome::MockAsyncMethodCaller::kFakeSanitizedUsername); | 615 cryptohome::MockAsyncMethodCaller::kFakeSanitizedUsername); |
614 ExpectLoginSuccess(expected_user_context); | 616 ExpectLoginSuccess(expected_user_context); |
615 FailOnLoginFailure(); | 617 FailOnLoginFailure(); |
616 | 618 |
617 // Set up mock async method caller to respond successfully to a key migration. | 619 // Set up mock async method caller to respond successfully to a key migration. |
618 mock_caller_->SetUp(true, cryptohome::MOUNT_ERROR_NONE); | 620 mock_caller_->SetUp(true, cryptohome::MOUNT_ERROR_NONE); |
619 EXPECT_CALL(*mock_caller_, | 621 EXPECT_CALL( |
620 AsyncMigrateKey(user_context_.GetAccountId().GetUserEmail(), _, | 622 *mock_caller_, |
621 transformed_key_.GetSecret(), _)) | 623 AsyncMigrateKey(cryptohome::Identification(user_context_.GetAccountId()), |
| 624 _, transformed_key_.GetSecret(), _)) |
622 .Times(1) | 625 .Times(1) |
623 .RetiresOnSaturation(); | 626 .RetiresOnSaturation(); |
624 | 627 |
625 // Set up mock homedir methods to respond successfully to a cryptohome mount | 628 // Set up mock homedir methods to respond successfully to a cryptohome mount |
626 // attempt. | 629 // attempt. |
627 ExpectGetKeyDataExCall(scoped_ptr<int64_t>(), scoped_ptr<std::string>()); | 630 ExpectGetKeyDataExCall(scoped_ptr<int64_t>(), scoped_ptr<std::string>()); |
628 ExpectMountExCall(false /* expect_create_attempt */); | 631 ExpectMountExCall(false /* expect_create_attempt */); |
629 | 632 |
630 state_->PresetOnlineLoginStatus(AuthFailure::AuthFailureNone()); | 633 state_->PresetOnlineLoginStatus(AuthFailure::AuthFailureNone()); |
631 SetAttemptState(auth_.get(), state_.release()); | 634 SetAttemptState(auth_.get(), state_.release()); |
632 | 635 |
633 auth_->RecoverEncryptedData(std::string()); | 636 auth_->RecoverEncryptedData(std::string()); |
634 base::MessageLoop::current()->Run(); | 637 base::MessageLoop::current()->Run(); |
635 } | 638 } |
636 | 639 |
637 TEST_F(CryptohomeAuthenticatorTest, DriveDataRecoverButFail) { | 640 TEST_F(CryptohomeAuthenticatorTest, DriveDataRecoverButFail) { |
638 FailOnLoginSuccess(); | 641 FailOnLoginSuccess(); |
639 ExpectPasswordChange(); | 642 ExpectPasswordChange(); |
640 | 643 |
641 // Set up mock async method caller to fail a key migration attempt, | 644 // Set up mock async method caller to fail a key migration attempt, |
642 // asserting that the wrong password was used. | 645 // asserting that the wrong password was used. |
643 mock_caller_->SetUp(false, cryptohome::MOUNT_ERROR_KEY_FAILURE); | 646 mock_caller_->SetUp(false, cryptohome::MOUNT_ERROR_KEY_FAILURE); |
644 EXPECT_CALL(*mock_caller_, | 647 EXPECT_CALL( |
645 AsyncMigrateKey(user_context_.GetAccountId().GetUserEmail(), _, | 648 *mock_caller_, |
646 transformed_key_.GetSecret(), _)) | 649 AsyncMigrateKey(cryptohome::Identification(user_context_.GetAccountId()), |
| 650 _, transformed_key_.GetSecret(), _)) |
647 .Times(1) | 651 .Times(1) |
648 .RetiresOnSaturation(); | 652 .RetiresOnSaturation(); |
649 | 653 |
650 SetAttemptState(auth_.get(), state_.release()); | 654 SetAttemptState(auth_.get(), state_.release()); |
651 | 655 |
652 auth_->RecoverEncryptedData(std::string()); | 656 auth_->RecoverEncryptedData(std::string()); |
653 base::MessageLoop::current()->Run(); | 657 base::MessageLoop::current()->Run(); |
654 } | 658 } |
655 | 659 |
656 TEST_F(CryptohomeAuthenticatorTest, ResolveNoMountToFailedMount) { | 660 TEST_F(CryptohomeAuthenticatorTest, ResolveNoMountToFailedMount) { |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
725 RunResolve(auth_.get()); | 729 RunResolve(auth_.get()); |
726 } | 730 } |
727 | 731 |
728 TEST_F(CryptohomeAuthenticatorTest, DriveUnlock) { | 732 TEST_F(CryptohomeAuthenticatorTest, DriveUnlock) { |
729 ExpectLoginSuccess(user_context_); | 733 ExpectLoginSuccess(user_context_); |
730 FailOnLoginFailure(); | 734 FailOnLoginFailure(); |
731 | 735 |
732 // Set up mock async method caller to respond successfully to a cryptohome | 736 // Set up mock async method caller to respond successfully to a cryptohome |
733 // key-check attempt. | 737 // key-check attempt. |
734 mock_caller_->SetUp(true, cryptohome::MOUNT_ERROR_NONE); | 738 mock_caller_->SetUp(true, cryptohome::MOUNT_ERROR_NONE); |
735 EXPECT_CALL(*mock_caller_, | 739 EXPECT_CALL( |
736 AsyncCheckKey(user_context_.GetAccountId().GetUserEmail(), _, _)) | 740 *mock_caller_, |
| 741 AsyncCheckKey(cryptohome::Identification(user_context_.GetAccountId()), _, |
| 742 _)) |
737 .Times(1) | 743 .Times(1) |
738 .RetiresOnSaturation(); | 744 .RetiresOnSaturation(); |
739 | 745 |
740 auth_->AuthenticateToUnlock(user_context_); | 746 auth_->AuthenticateToUnlock(user_context_); |
741 base::MessageLoop::current()->Run(); | 747 base::MessageLoop::current()->Run(); |
742 } | 748 } |
743 | 749 |
744 TEST_F(CryptohomeAuthenticatorTest, DriveLoginWithPreHashedPassword) { | 750 TEST_F(CryptohomeAuthenticatorTest, DriveLoginWithPreHashedPassword) { |
745 CreateTransformedKey(Key::KEY_TYPE_SALTED_SHA256, kSalt); | 751 CreateTransformedKey(Key::KEY_TYPE_SALTED_SHA256, kSalt); |
746 | 752 |
(...skipping 27 matching lines...) Expand all Loading... |
774 // salt. | 780 // salt. |
775 ExpectGetKeyDataExCall( | 781 ExpectGetKeyDataExCall( |
776 make_scoped_ptr(new int64_t(Key::KEY_TYPE_SALTED_SHA256)), | 782 make_scoped_ptr(new int64_t(Key::KEY_TYPE_SALTED_SHA256)), |
777 scoped_ptr<std::string>()); | 783 scoped_ptr<std::string>()); |
778 | 784 |
779 auth_->AuthenticateToLogin(NULL, user_context_); | 785 auth_->AuthenticateToLogin(NULL, user_context_); |
780 base::RunLoop().Run(); | 786 base::RunLoop().Run(); |
781 } | 787 } |
782 | 788 |
783 } // namespace chromeos | 789 } // namespace chromeos |
OLD | NEW |