summaryrefslogtreecommitdiffstats
path: root/chromeos/dbus/fake_cryptohome_client.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromeos/dbus/fake_cryptohome_client.cc')
-rw-r--r--chromeos/dbus/fake_cryptohome_client.cc414
1 files changed, 248 insertions, 166 deletions
diff --git a/chromeos/dbus/fake_cryptohome_client.cc b/chromeos/dbus/fake_cryptohome_client.cc
index 1d224d9..67883c5 100644
--- a/chromeos/dbus/fake_cryptohome_client.cc
+++ b/chromeos/dbus/fake_cryptohome_client.cc
@@ -1,33 +1,45 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/dbus/fake_cryptohome_client.h"
#include "base/bind.h"
+#include "base/location.h"
#include "base/message_loop/message_loop.h"
+#include "crypto/nss_util.h"
#include "third_party/cros_system_api/dbus/service_constants.h"
namespace chromeos {
-namespace {
+FakeCryptohomeClient::FakeCryptohomeClient()
+ : async_call_id_(1),
+ tpm_is_ready_counter_(0),
+ unmount_result_(true),
+ locked_(false),
+ weak_ptr_factory_(this) {}
-// A fake system salt. GetSystemSalt copies it to the given buffer.
-const char kStubSystemSalt[] = "stub_system_salt";
+FakeCryptohomeClient::~FakeCryptohomeClient() {}
-} // namespace
-
-FakeCryptohomeClient::FakeCryptohomeClient() : unmount_result_(false) {
+void FakeCryptohomeClient::Init(dbus::Bus* bus) {
}
-FakeCryptohomeClient::~FakeCryptohomeClient() {
+void FakeCryptohomeClient::SetAsyncCallStatusHandlers(
+ const AsyncCallStatusHandler& handler,
+ const AsyncCallStatusWithDataHandler& data_handler) {
+ async_call_status_handler_ = handler;
+ async_call_status_data_handler_ = data_handler;
}
-void FakeCryptohomeClient::Init(dbus::Bus* bus) {
+void FakeCryptohomeClient::ResetAsyncCallStatusHandlers() {
+ async_call_status_handler_.Reset();
+ async_call_status_data_handler_.Reset();
}
-void FakeCryptohomeClient::TpmIsBeingOwned(
+void FakeCryptohomeClient::IsMounted(
const BoolDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
}
bool FakeCryptohomeClient::Unmount(bool* success) {
@@ -35,242 +47,273 @@ bool FakeCryptohomeClient::Unmount(bool* success) {
return true;
}
-void FakeCryptohomeClient::AsyncCheckKey(const std::string& username,
- const std::string& key,
- const AsyncMethodCallback& callback) {
-}
-
-bool FakeCryptohomeClient::InstallAttributesIsInvalid(bool* is_invalid) {
- return false;
-}
-
-void FakeCryptohomeClient::TpmAttestationGetKeyPayload(
- attestation::AttestationKeyType key_type,
- const std::string& key_name,
- const DataMethodCallback& callback) {
+void FakeCryptohomeClient::AsyncCheckKey(
+ const std::string& username,
+ const std::string& key,
+ const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, false);
}
-void FakeCryptohomeClient::AsyncTpmAttestationFinishCertRequest(
- const std::string& pca_response,
- attestation::AttestationKeyType key_type,
- const std::string& key_name,
+void FakeCryptohomeClient::AsyncMigrateKey(
+ const std::string& username,
+ const std::string& from_key,
+ const std::string& to_key,
const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, false);
}
-void FakeCryptohomeClient::TpmIsEnabled(
- const BoolDBusMethodCallback& callback) {
+void FakeCryptohomeClient::AsyncRemove(
+ const std::string& username,
+ const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, false);
}
-void FakeCryptohomeClient::AsyncTpmAttestationEnroll(
- const std::string& pca_response,
- const AsyncMethodCallback& callback) {
+bool FakeCryptohomeClient::GetSystemSalt(std::vector<uint8>* salt) {
+ const char kStubSystemSalt[] = "stub_system_salt";
+ salt->assign(kStubSystemSalt,
+ kStubSystemSalt + arraysize(kStubSystemSalt) - 1);
+ return true;
}
-void FakeCryptohomeClient::AsyncMigrateKey(
+void FakeCryptohomeClient::GetSanitizedUsername(
const std::string& username,
- const std::string& from_key,
- const std::string& to_key,
- const AsyncMethodCallback& callback) {
+ const StringDBusMethodCallback& callback) {
+ // Even for stub implementation we have to return different values so that
+ // multi-profiles would work.
+ std::string sanitized_username = GetStubSanitizedUsername(username);
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, sanitized_username));
}
-void FakeCryptohomeClient::IsMounted(const BoolDBusMethodCallback& callback) {
- base::MessageLoop::current()->PostTask(FROM_HERE,
- base::Bind(callback,
- DBUS_METHOD_CALL_SUCCESS, true));
+std::string FakeCryptohomeClient::BlockingGetSanitizedUsername(
+ const std::string& username) {
+ return GetStubSanitizedUsername(username);
}
-bool FakeCryptohomeClient::InstallAttributesGet(const std::string& name,
- std::vector<uint8>* value,
- bool* successful) {
- return false;
+void FakeCryptohomeClient::AsyncMount(const std::string& username,
+ const std::string& key,
+ int flags,
+ const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, false);
}
-void FakeCryptohomeClient::AsyncMount(const std::string& username,
- const std::string& key, int flags,
- const AsyncMethodCallback& callback) {
- DCHECK(!callback.is_null());
-
- base::MessageLoop::current()->PostTask(FROM_HERE,
- base::Bind(callback, 1 /* async_id */));
- if (!handler_.is_null())
- base::MessageLoop::current()->PostTask(FROM_HERE,
- base::Bind(handler_,
- 1, // async_id
- true, // return_status
- cryptohome::MOUNT_ERROR_NONE));
-}
-
-void FakeCryptohomeClient::AsyncAddKey(const std::string& username,
- const std::string& key,
- const std::string& new_key,
- const AsyncMethodCallback& callback) {
- DCHECK(!callback.is_null());
-
- base::MessageLoop::current()->PostTask(FROM_HERE,
- base::Bind(callback, 1 /* async_id */));
- if (!handler_.is_null())
- base::MessageLoop::current()->PostTask(FROM_HERE,
- base::Bind(handler_,
- 1, // async_id
- true, // return_status
- cryptohome::MOUNT_ERROR_NONE));
+void FakeCryptohomeClient::AsyncAddKey(
+ const std::string& username,
+ const std::string& key,
+ const std::string& new_key,
+ const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, false);
}
void FakeCryptohomeClient::AsyncMountGuest(
const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, false);
}
void FakeCryptohomeClient::AsyncMountPublic(
const std::string& public_mount_id,
int flags,
const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, false);
}
-bool FakeCryptohomeClient::CallTpmIsBeingOwnedAndBlock(bool* owning) {
- return false;
+void FakeCryptohomeClient::TpmIsReady(
+ const BoolDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
}
-void FakeCryptohomeClient::Pkcs11IsTpmTokenReady(
+void FakeCryptohomeClient::TpmIsEnabled(
const BoolDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
}
-void FakeCryptohomeClient::TpmClearStoredPassword(
- const VoidDBusMethodCallback& callback) {
+bool FakeCryptohomeClient::CallTpmIsEnabledAndBlock(bool* enabled) {
+ *enabled = true;
+ return true;
+}
+
+void FakeCryptohomeClient::TpmGetPassword(
+ const StringDBusMethodCallback& callback) {
+ const char kStubTpmPassword[] = "Stub-TPM-password";
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(callback, DBUS_METHOD_CALL_SUCCESS,
+ std::string(kStubTpmPassword)));
+}
+
+void FakeCryptohomeClient::TpmIsOwned(
+ const BoolDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
+}
+
+bool FakeCryptohomeClient::CallTpmIsOwnedAndBlock(bool* owned) {
+ *owned = true;
+ return true;
+}
+
+void FakeCryptohomeClient::TpmIsBeingOwned(
+ const BoolDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
+}
+
+bool FakeCryptohomeClient::CallTpmIsBeingOwnedAndBlock(bool* owning) {
+ *owning = true;
+ return true;
}
void FakeCryptohomeClient::TpmCanAttemptOwnership(
const VoidDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS));
}
-bool FakeCryptohomeClient::GetSystemSalt(std::vector<uint8>* salt) {
- salt->assign(kStubSystemSalt,
- kStubSystemSalt + arraysize(kStubSystemSalt) - 1);
- return true;
+void FakeCryptohomeClient::TpmClearStoredPassword(
+ const VoidDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS));
}
-void FakeCryptohomeClient::TpmGetPassword(
- const StringDBusMethodCallback& callback) {
+bool FakeCryptohomeClient::CallTpmClearStoredPasswordAndBlock() {
+ return true;
}
-bool FakeCryptohomeClient::InstallAttributesFinalize(bool* successful) {
- return false;
+void FakeCryptohomeClient::Pkcs11IsTpmTokenReady(
+ const BoolDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
}
-void FakeCryptohomeClient::SetAsyncCallStatusHandlers(
- const AsyncCallStatusHandler& handler,
- const AsyncCallStatusWithDataHandler& data_handler) {
- handler_ = handler;
- data_handler_ = data_handler;
+void FakeCryptohomeClient::Pkcs11GetTpmTokenInfo(
+ const Pkcs11GetTpmTokenInfoCallback& callback) {
+ const char kStubUserPin[] = "012345";
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(callback,
+ DBUS_METHOD_CALL_SUCCESS,
+ std::string(crypto::kTestTPMTokenName),
+ std::string(kStubUserPin)));
}
-bool FakeCryptohomeClient::CallTpmIsEnabledAndBlock(bool* enabled) {
- return false;
+bool FakeCryptohomeClient::InstallAttributesGet(const std::string& name,
+ std::vector<uint8>* value,
+ bool* successful) {
+ if (install_attrs_.find(name) != install_attrs_.end()) {
+ *value = install_attrs_[name];
+ *successful = true;
+ } else {
+ value->clear();
+ *successful = false;
+ }
+ return true;
}
bool FakeCryptohomeClient::InstallAttributesSet(
const std::string& name,
const std::vector<uint8>& value,
bool* successful) {
- return false;
-}
-
-bool FakeCryptohomeClient::InstallAttributesIsFirstInstall(
- bool* is_first_install) {
- return false;
+ install_attrs_[name] = value;
+ *successful = true;
+ return true;
}
-void FakeCryptohomeClient::TpmAttestationGetCertificate(
- attestation::AttestationKeyType key_type,
- const std::string& key_name,
- const DataMethodCallback& callback) {
+bool FakeCryptohomeClient::InstallAttributesFinalize(bool* successful) {
+ locked_ = true;
+ *successful = true;
+ return true;
}
void FakeCryptohomeClient::InstallAttributesIsReady(
const BoolDBusMethodCallback& callback) {
- base::MessageLoop::current()->PostTask(FROM_HERE,
- base::Bind(callback,
- DBUS_METHOD_CALL_SUCCESS, true));
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
}
-void FakeCryptohomeClient::TpmAttestationGetPublicKey(
- attestation::AttestationKeyType key_type,
- const std::string& key_name,
- const DataMethodCallback& callback) {
+bool FakeCryptohomeClient::InstallAttributesIsInvalid(bool* is_invalid) {
+ *is_invalid = false;
+ return true;
}
-void FakeCryptohomeClient::TpmAttestationSignSimpleChallenge(
- attestation::AttestationKeyType key_type,
- const std::string& key_name,
- const std::string& challenge,
- const AsyncMethodCallback& callback) {
+bool FakeCryptohomeClient::InstallAttributesIsFirstInstall(
+ bool* is_first_install) {
+ *is_first_install = !locked_;
+ return true;
}
-void FakeCryptohomeClient::Pkcs11GetTpmTokenInfo(
- const Pkcs11GetTpmTokenInfoCallback& callback) {
+void FakeCryptohomeClient::TpmAttestationIsPrepared(
+ const BoolDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
}
-void FakeCryptohomeClient::TpmIsOwned(const BoolDBusMethodCallback& callback) {
+void FakeCryptohomeClient::TpmAttestationIsEnrolled(
+ const BoolDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, true));
}
-void FakeCryptohomeClient::TpmAttestationIsPrepared(
- const BoolDBusMethodCallback& callback) {
+void FakeCryptohomeClient::AsyncTpmAttestationCreateEnrollRequest(
+ const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, true);
}
-void FakeCryptohomeClient::TpmIsReady(const BoolDBusMethodCallback& callback) {
+void FakeCryptohomeClient::AsyncTpmAttestationEnroll(
+ const std::string& pca_response,
+ const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, false);
}
-void FakeCryptohomeClient::AsyncTpmAttestationCreateEnrollRequest(
+void FakeCryptohomeClient::AsyncTpmAttestationCreateCertRequest(
+ attestation::AttestationCertificateProfile certificate_profile,
+ const std::string& user_email,
+ const std::string& request_origin,
const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, true);
}
-void FakeCryptohomeClient::ResetAsyncCallStatusHandlers() {
- handler_.Reset();
- data_handler_.Reset();
+void FakeCryptohomeClient::AsyncTpmAttestationFinishCertRequest(
+ const std::string& pca_response,
+ attestation::AttestationKeyType key_type,
+ const std::string& key_name,
+ const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, true);
}
void FakeCryptohomeClient::TpmAttestationDoesKeyExist(
attestation::AttestationKeyType key_type,
const std::string& key_name,
const BoolDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false));
}
-bool FakeCryptohomeClient::CallTpmIsOwnedAndBlock(bool* owned) {
- return false;
-}
-
-void FakeCryptohomeClient::AsyncRemove(const std::string& username,
- const AsyncMethodCallback& callback) {
-}
-
-void FakeCryptohomeClient::TpmAttestationSetKeyPayload(
+void FakeCryptohomeClient::TpmAttestationGetCertificate(
attestation::AttestationKeyType key_type,
const std::string& key_name,
- const std::string& payload,
- const BoolDBusMethodCallback& callback) {
+ const DataMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string()));
}
-void FakeCryptohomeClient::GetSanitizedUsername(
- const std::string& username,
- const StringDBusMethodCallback& callback) {
- DCHECK(!callback.is_null());
-
+void FakeCryptohomeClient::TpmAttestationGetPublicKey(
+ attestation::AttestationKeyType key_type,
+ const std::string& key_name,
+ const DataMethodCallback& callback) {
base::MessageLoop::current()->PostTask(
FROM_HERE,
- base::Bind(callback,
- chromeos::DBUS_METHOD_CALL_SUCCESS,
- username));
- if (!data_handler_.is_null())
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(data_handler_,
- 1, // async_id
- true, // return_status
- username));
+ base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string()));
}
-std::string FakeCryptohomeClient::BlockingGetSanitizedUsername(
- const std::string& username) {
- return username;
+void FakeCryptohomeClient::TpmAttestationRegisterKey(
+ attestation::AttestationKeyType key_type,
+ const std::string& key_name,
+ const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, true);
}
void FakeCryptohomeClient::TpmAttestationSignEnterpriseChallenge(
@@ -281,27 +324,66 @@ void FakeCryptohomeClient::TpmAttestationSignEnterpriseChallenge(
attestation::AttestationChallengeOptions options,
const std::string& challenge,
const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, true);
}
-void FakeCryptohomeClient::TpmAttestationIsEnrolled(
- const BoolDBusMethodCallback& callback) {
+void FakeCryptohomeClient::TpmAttestationSignSimpleChallenge(
+ attestation::AttestationKeyType key_type,
+ const std::string& key_name,
+ const std::string& challenge,
+ const AsyncMethodCallback& callback) {
+ ReturnAsyncMethodResult(callback, true);
}
-void FakeCryptohomeClient::TpmAttestationRegisterKey(
+void FakeCryptohomeClient::TpmAttestationGetKeyPayload(
attestation::AttestationKeyType key_type,
const std::string& key_name,
- const AsyncMethodCallback& callback) {
+ const DataMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false, std::string()));
}
-bool FakeCryptohomeClient::CallTpmClearStoredPasswordAndBlock() {
- return false;
+void FakeCryptohomeClient::TpmAttestationSetKeyPayload(
+ attestation::AttestationKeyType key_type,
+ const std::string& key_name,
+ const std::string& payload,
+ const BoolDBusMethodCallback& callback) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(callback, DBUS_METHOD_CALL_SUCCESS, false));
}
-void FakeCryptohomeClient::AsyncTpmAttestationCreateCertRequest(
- attestation::AttestationCertificateProfile certificate_profile,
- const std::string& user_email,
- const std::string& request_origin,
- const AsyncMethodCallback& callback) {
+void FakeCryptohomeClient::ReturnAsyncMethodResult(
+ const AsyncMethodCallback& callback,
+ bool returns_data) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(&FakeCryptohomeClient::ReturnAsyncMethodResultInternal,
+ weak_ptr_factory_.GetWeakPtr(),
+ callback,
+ returns_data));
+}
+
+void FakeCryptohomeClient::ReturnAsyncMethodResultInternal(
+ const AsyncMethodCallback& callback,
+ bool returns_data) {
+ callback.Run(async_call_id_);
+ if (!returns_data && !async_call_status_handler_.is_null()) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(async_call_status_handler_,
+ async_call_id_,
+ true,
+ cryptohome::MOUNT_ERROR_NONE));
+ } else if (returns_data && !async_call_status_data_handler_.is_null()) {
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE,
+ base::Bind(async_call_status_data_handler_,
+ async_call_id_,
+ true,
+ std::string()));
+ }
+ ++async_call_id_;
}
-} // namespace chromeos
+} // namespace chromeos