blob: 58aa44b286023fd699486d0b3c6e6d670854e55d [file] [log] [blame]
// Copyright 2017 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 "components/login/secure_module_util_chromeos.h"
#include "base/bind.h"
#include "base/callback_helpers.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/task/post_task.h"
namespace login {
namespace {
// If either of these two files exist, then we are using Cr50 and not using TPM.
constexpr char kCr50UsedIndicatorFile1[] =
"/opt/google/cr50/firmware/cr50.bin.prod";
constexpr char kCr50UsedIndicatorFile2[] = "/etc/init/cr50-update.conf";
SecureModuleUsed g_secure_module_used = SecureModuleUsed::UNQUERIED;
SecureModuleUsed GetSecureModuleInfoFromFilesAndCacheIt() {
if (base::PathExists(base::FilePath(kCr50UsedIndicatorFile1)) ||
base::PathExists(base::FilePath(kCr50UsedIndicatorFile2))) {
g_secure_module_used = SecureModuleUsed::CR50;
} else {
g_secure_module_used = SecureModuleUsed::TPM;
}
return g_secure_module_used;
}
} // namespace
void GetSecureModuleUsed(GetSecureModuleUsedCallback callback) {
if (g_secure_module_used != SecureModuleUsed::UNQUERIED) {
base::ResetAndReturn(&callback).Run(g_secure_module_used);
return;
}
base::PostTaskWithTraitsAndReplyWithResult(
FROM_HERE, {base::MayBlock(), base::TaskPriority::BEST_EFFORT},
base::BindOnce(&GetSecureModuleInfoFromFilesAndCacheIt),
std::move(callback));
}
} // namespace login