blob: 80d16bdcc3085894087e3da3e1b2d9d88f28afaf [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "cryptohome/firmware_management_parameters_proxy.h"
#include <string>
#include <utility>
#include <base/check.h>
#include <base/logging.h>
#include <brillo/secure_blob.h>
namespace cryptohome {
namespace {
// Converts a brillo::Error* to string for printing.
std::string BrilloErrorToString(brillo::Error* err) {
std::string result;
if (err) {
result = "(" + err->GetDomain() + ", " + err->GetCode() + ", " +
err->GetMessage() + ")";
} else {
result = "(null)";
}
return result;
}
} // namespace
bool FirmwareManagementParametersProxy::GetFWMP(
user_data_auth::FirmwareManagementParameters* fwmp) {
CHECK(device_management_proxy_);
device_management::GetFirmwareManagementParametersRequest request;
device_management::GetFirmwareManagementParametersReply reply;
brillo::ErrorPtr error;
if (!device_management_proxy_->GetFirmwareManagementParameters(
request, &reply, &error, kDefaultTimeout) ||
error) {
LOG(ERROR) << "Failed to call GetFirmwareManagementParameters through "
"proxy class: "
<< BrilloErrorToString(error.get());
return false;
}
if (reply.error() != device_management::DeviceManagementErrorCode::
DEVICE_MANAGEMENT_ERROR_NOT_SET) {
LOG(ERROR) << "Failed to call GetFirmwareManagementParameters through "
"proxy class: status "
<< static_cast<int>(reply.error());
return false;
}
fwmp->set_flags(reply.fwmp().flags());
fwmp->set_developer_key_hash(reply.fwmp().developer_key_hash());
return true;
}
bool FirmwareManagementParametersProxy::SetFWMP(
const user_data_auth::FirmwareManagementParameters& fwmp) {
CHECK(device_management_proxy_);
device_management::SetFirmwareManagementParametersRequest request;
device_management::SetFirmwareManagementParametersReply reply;
brillo::ErrorPtr error;
request.mutable_fwmp()->set_flags(fwmp.flags());
request.mutable_fwmp()->set_developer_key_hash(fwmp.developer_key_hash());
if (!device_management_proxy_->SetFirmwareManagementParameters(
request, &reply, &error, kDefaultTimeout) ||
error) {
LOG(ERROR) << "Failed to call SetFirmwareManagementParameters through "
"proxy class: "
<< BrilloErrorToString(error.get());
return false;
}
if (reply.error() != device_management::DeviceManagementErrorCode::
DEVICE_MANAGEMENT_ERROR_NOT_SET) {
LOG(ERROR) << "Failed to call SetFirmwareManagementParameters through "
"proxy class: status "
<< static_cast<int>(reply.error());
return false;
}
return true;
}
bool FirmwareManagementParametersProxy::Destroy() {
CHECK(device_management_proxy_);
device_management::RemoveFirmwareManagementParametersRequest request;
device_management::RemoveFirmwareManagementParametersReply reply;
brillo::ErrorPtr error;
if (!device_management_proxy_->RemoveFirmwareManagementParameters(
request, &reply, &error, kDefaultTimeout) ||
error) {
LOG(ERROR) << "Failed to call RemoveFirmwareManagementParameters through "
"proxy class: "
<< BrilloErrorToString(error.get());
return false;
}
if (reply.error() != device_management::DeviceManagementErrorCode::
DEVICE_MANAGEMENT_ERROR_NOT_SET) {
LOG(ERROR) << "Failed to call RemoveFirmwareManagementParameters through "
"proxy class: status "
<< static_cast<int>(reply.error());
return false;
}
return true;
}
void FirmwareManagementParametersProxy::SetDeviceManagementProxy(
std::unique_ptr<org::chromium::DeviceManagementProxy> proxy) {
device_management_proxy_ = std::move(proxy);
}
} // namespace cryptohome