fake_cryptohome_client.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/dbus/fake_cryptohome_client.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind.h" 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/location.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chromeos/dbus/cryptohome/key.pb.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chromeos/dbus/cryptohome/rpc.pb.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "crypto/nss_util.h" 13b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos { 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)FakeCryptohomeClient::FakeCryptohomeClient() 188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) : service_is_available_(true), 198bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) async_call_id_(1), 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) tpm_is_ready_counter_(0), 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) unmount_result_(true), 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) system_salt_(GetStubSystemSalt()), 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) locked_(false), 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_ptr_factory_(this) {} 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)FakeCryptohomeClient::~FakeCryptohomeClient() {} 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Init(dbus::Bus* bus) { 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::SetAsyncCallStatusHandlers( 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncCallStatusHandler& handler, 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncCallStatusWithDataHandler& data_handler) { 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_handler_ = handler; 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_data_handler_ = data_handler; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::ResetAsyncCallStatusHandlers() { 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_handler_.Reset(); 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_status_data_handler_.Reset(); 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeCryptohomeClient::WaitForServiceToBeAvailable( 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const WaitForServiceToBeAvailableCallback& callback) { 458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (service_is_available_) { 468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::MessageLoop::current()->PostTask(FROM_HERE, 478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) base::Bind(callback, true)); 488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } else { 498bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) pending_wait_for_service_to_be_available_callbacks_.push_back(callback); 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 528bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::IsMounted( 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool FakeCryptohomeClient::Unmount(bool* success) { 60b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) *success = unmount_result_; 61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return true; 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncCheckKey( 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key, 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncMigrateKey( 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& from_key, 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& to_key, 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncRemove( 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeCryptohomeClient::GetSystemSalt( 861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const GetSystemSaltCallback& callback) { 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::MessageLoop::current()->PostTask( 881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) FROM_HERE, 891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, system_salt_)); 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::GetSanitizedUsername( 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& username, 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const StringDBusMethodCallback& callback) { 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Even for stub implementation we have to return different values so that 964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // multi-profiles would work. 974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string sanitized_username = GetStubSanitizedUsername(username); 984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, sanitized_username)); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)std::string FakeCryptohomeClient::BlockingGetSanitizedUsername( 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username) { 1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return GetStubSanitizedUsername(username); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncMount(const std::string& username, 1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key, 1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int flags, 1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncAddKey( 1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key, 1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& new_key, 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 1204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::AsyncMountGuest( 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 128a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void FakeCryptohomeClient::AsyncMountPublic( 129a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const std::string& public_mount_id, 130a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) int flags, 131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) const AsyncMethodCallback& callback) { 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 133a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 134a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsReady( 1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsEnabled( 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmIsEnabledAndBlock(bool* enabled) { 1484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *enabled = true; 1494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 1504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmGetPassword( 1534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const StringDBusMethodCallback& callback) { 1544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kStubTpmPassword[] = "Stub-TPM-password"; 1554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 1574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, 1584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string(kStubTpmPassword))); 1594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsOwned( 1624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 1654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmIsOwnedAndBlock(bool* owned) { 1684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *owned = true; 1694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 1704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmIsBeingOwned( 1734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 1764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmIsBeingOwnedAndBlock(bool* owning) { 1794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *owning = true; 1804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::TpmCanAttemptOwnership( 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const VoidDBusMethodCallback& callback) { 1854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmClearStoredPassword( 1904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const VoidDBusMethodCallback& callback) { 1914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 1924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS)); 1934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 1944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::CallTpmClearStoredPasswordAndBlock() { 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return true; 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Pkcs11IsTpmTokenReady( 2004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 2014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Pkcs11GetTpmTokenInfo( 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const Pkcs11GetTpmTokenInfoCallback& callback) { 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kStubUserPin[] = "012345"; 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const int kStubSlot = 0; 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, 2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DBUS_METHOD_CALL_SUCCESS, 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string(crypto::kTestTPMTokenName), 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string(kStubUserPin), 2154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kStubSlot)); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::Pkcs11GetTpmTokenInfoForUser( 2194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& username, 2204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const Pkcs11GetTpmTokenInfoCallback& callback) { 2214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Pkcs11GetTpmTokenInfo(callback); 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesGet(const std::string& name, 2254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::vector<uint8>* value, 2264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool* successful) { 2274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (install_attrs_.find(name) != install_attrs_.end()) { 2284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *value = install_attrs_[name]; 2294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = true; 2304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else { 2314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) value->clear(); 2324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = false; 2334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 2344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesSet( 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& name, 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::vector<uint8>& value, 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool* successful) { 2414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) install_attrs_[name] = value; 2424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = true; 2434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesFinalize(bool* successful) { 2474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) locked_ = true; 2484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *successful = true; 2494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::InstallAttributesIsReady( 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 2544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesIsInvalid(bool* is_invalid) { 2594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *is_invalid = false; 2604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)bool FakeCryptohomeClient::InstallAttributesIsFirstInstall( 2644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool* is_first_install) { 2654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) *is_first_install = !locked_; 2664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return true; 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationIsPrepared( 2704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 2714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationIsEnrolled( 2764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 2774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 2784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true)); 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationCreateEnrollRequest( 282a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chromeos::attestation::PrivacyCAType pca_type, 2834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 2844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationEnroll( 288a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chromeos::attestation::PrivacyCAType pca_type, 2894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& pca_response, 2904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 2914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, false); 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationCreateCertRequest( 295a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) chromeos::attestation::PrivacyCAType pca_type, 2964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationCertificateProfile certificate_profile, 2978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 2984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& request_origin, 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 3004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::AsyncTpmAttestationFinishCertRequest( 3044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& pca_response, 3054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3068bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 3094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationDoesKeyExist( 313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 3174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false)); 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationGetCertificate( 322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3238bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 3254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const DataMethodCallback& callback) { 3264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 3284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationGetPublicKey( 3324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3338bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const DataMethodCallback& callback) { 336868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::MessageLoop::current()->PostTask( 337b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) FROM_HERE, 3384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 339c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 340c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationRegisterKey( 3424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 3464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 347bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch} 348bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationSignEnterpriseChallenge( 350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& domain, 354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& device_id, 355c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationChallengeOptions options, 356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& challenge, 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const AsyncMethodCallback& callback) { 3584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 360c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationSignSimpleChallenge( 3624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& challenge, 3664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback) { 3674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ReturnAsyncMethodResult(callback, true); 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationGetKeyPayload( 371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) attestation::AttestationKeyType key_type, 3728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key_name, 3744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const DataMethodCallback& callback) { 3754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 3774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string())); 378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::TpmAttestationSetKeyPayload( 3814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) attestation::AttestationKeyType key_type, 3828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const std::string& user_id, 3834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& key_name, 3844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& payload, 3854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const BoolDBusMethodCallback& callback) { 3864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 3874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false)); 388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)void FakeCryptohomeClient::TpmAttestationDeleteKeys( 3910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) attestation::AttestationKeyType key_type, 3920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const std::string& user_id, 3930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const std::string& key_prefix, 3940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const BoolDBusMethodCallback& callback) { 3950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::MessageLoop::current()->PostTask( 3960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false)); 3970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 3980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 399a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FakeCryptohomeClient::CheckKeyEx( 400a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::AccountIdentifier& id, 401a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::AuthorizationRequest& auth, 402a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::CheckKeyRequest& request, 403a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ProtobufMethodCallback& callback) { 404a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReturnProtobufMethodCallback(id.email(), callback); 405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 406a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 407a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FakeCryptohomeClient::MountEx( 408a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::AccountIdentifier& id, 409a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::AuthorizationRequest& auth, 410a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::MountRequest& request, 411a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ProtobufMethodCallback& callback) { 412a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReturnProtobufMethodCallback(id.email(), callback); 413a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 414a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 415a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FakeCryptohomeClient::AddKeyEx( 416a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::AccountIdentifier& id, 417a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::AuthorizationRequest& auth, 418a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::AddKeyRequest& request, 419a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ProtobufMethodCallback& callback) { 420a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReturnProtobufMethodCallback(id.email(), callback); 421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 422a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 423effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid FakeCryptohomeClient::RemoveKeyEx( 424effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const cryptohome::AccountIdentifier& id, 425effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const cryptohome::AuthorizationRequest& auth, 426effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const cryptohome::RemoveKeyRequest& request, 427effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const ProtobufMethodCallback& callback) { 428effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ReturnProtobufMethodCallback(id.email(), callback); 429effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 430effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FakeCryptohomeClient::UpdateKeyEx( 432a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::AccountIdentifier& id, 433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::AuthorizationRequest& auth, 434a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const cryptohome::UpdateKeyRequest& request, 435a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ProtobufMethodCallback& callback) { 436a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ReturnProtobufMethodCallback(id.email(), callback); 437a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 438a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void FakeCryptohomeClient::SetServiceIsAvailable(bool is_available) { 4408bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service_is_available_ = is_available; 4418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (is_available) { 4428bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) std::vector<WaitForServiceToBeAvailableCallback> callbacks; 4438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) callbacks.swap(pending_wait_for_service_to_be_available_callbacks_); 4448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) for (size_t i = 0; i < callbacks.size(); ++i) 4458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) callbacks[i].Run(is_available); 4468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 4478bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)} 4488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 4494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// static 4504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)std::vector<uint8> FakeCryptohomeClient::GetStubSystemSalt() { 4514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const char kStubSystemSalt[] = "stub_system_salt"; 4524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return std::vector<uint8>(kStubSystemSalt, 4534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) kStubSystemSalt + arraysize(kStubSystemSalt) - 1); 4544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 456a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void FakeCryptohomeClient::ReturnProtobufMethodCallback( 457a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const std::string& userid, 458a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const ProtobufMethodCallback& callback) { 459a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cryptohome::BaseReply reply; 460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) reply.set_error(cryptohome::CRYPTOHOME_ERROR_NOT_SET); 461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) cryptohome::MountReply* mount = 462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) reply.MutableExtension(cryptohome::MountReply::reply); 463a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) mount->set_sanitized_username(GetStubSanitizedUsername(userid)); 464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::MessageLoop::current()->PostTask( 465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) FROM_HERE, 466a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Bind(callback, 467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DBUS_METHOD_CALL_SUCCESS, 468a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) true, 469a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) reply)); 470a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 4724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::ReturnAsyncMethodResult( 4734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback, 4744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool returns_data) { 4754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 4764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 4774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(&FakeCryptohomeClient::ReturnAsyncMethodResultInternal, 4784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_ptr_factory_.GetWeakPtr(), 4794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) callback, 4804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) returns_data)); 4814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 4824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void FakeCryptohomeClient::ReturnAsyncMethodResultInternal( 4844e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const AsyncMethodCallback& callback, 4854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool returns_data) { 4864e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) callback.Run(async_call_id_); 4874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (!returns_data && !async_call_status_handler_.is_null()) { 4884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 4894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 4904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(async_call_status_handler_, 4914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_id_, 4924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true, 4934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) cryptohome::MOUNT_ERROR_NONE)); 4944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } else if (returns_data && !async_call_status_data_handler_.is_null()) { 4954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::MessageLoop::current()->PostTask( 4964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) FROM_HERE, 4974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Bind(async_call_status_data_handler_, 4984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) async_call_id_, 4994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) true, 5004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) std::string())); 5014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 5024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ++async_call_id_; 503c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 504c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace chromeos 506