blob: 06a5265584e0175a9ceb8f4efbc33f4032e03aaa [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.
#ifndef LIBHWSEC_FUZZED_CONFIG_H_
#define LIBHWSEC_FUZZED_CONFIG_H_
#include <memory>
#include <string>
#include <utility>
#include <fuzzer/FuzzedDataProvider.h>
#include "libhwsec/fuzzed/basic_objects.h"
#include "libhwsec/structures/device_config.h"
#include "libhwsec/structures/operation_policy.h"
#include "libhwsec/structures/permission.h"
namespace hwsec {
template <>
struct FuzzedObject<DeviceConfigSettings::BootModeSetting::Mode> {
DeviceConfigSettings::BootModeSetting::Mode operator()(
FuzzedDataProvider& provider) const {
return DeviceConfigSettings::BootModeSetting::Mode{
.developer_mode = provider.ConsumeBool(),
.recovery_mode = provider.ConsumeBool(),
.verified_firmware = provider.ConsumeBool(),
};
}
};
template <>
struct FuzzedObject<DeviceConfigSettings::BootModeSetting> {
DeviceConfigSettings::BootModeSetting operator()(
FuzzedDataProvider& provider) const {
using Mode = DeviceConfigSettings::BootModeSetting::Mode;
return DeviceConfigSettings::BootModeSetting{
.mode = FuzzedObject<std::optional<Mode>>()(provider),
};
}
};
template <>
struct FuzzedObject<DeviceConfigSettings::DeviceModelSetting> {
DeviceConfigSettings::DeviceModelSetting operator()(
FuzzedDataProvider& provider) const {
return DeviceConfigSettings::DeviceModelSetting{
.hardware_id = FuzzedObject<std::optional<std::string>>()(provider),
};
}
};
template <>
struct FuzzedObject<DeviceConfigSettings::CurrentUserSetting> {
DeviceConfigSettings::CurrentUserSetting operator()(
FuzzedDataProvider& provider) const {
return DeviceConfigSettings::CurrentUserSetting{
.username = FuzzedObject<std::optional<std::string>>()(provider),
};
}
};
template <>
struct FuzzedObject<DeviceConfigs> {
DeviceConfigs operator()(FuzzedDataProvider& provider) const {
DeviceConfigs device_configs;
device_configs[DeviceConfig::kBootMode] = provider.ConsumeBool();
device_configs[DeviceConfig::kDeviceModel] = provider.ConsumeBool();
device_configs[DeviceConfig::kCurrentUser] = provider.ConsumeBool();
return device_configs;
}
};
template <>
struct FuzzedObject<DeviceConfigSettings> {
DeviceConfigSettings operator()(FuzzedDataProvider& provider) const {
using BootModeSetting = DeviceConfigSettings::BootModeSetting;
using DeviceModelSetting = DeviceConfigSettings::DeviceModelSetting;
using CurrentUserSetting = DeviceConfigSettings::CurrentUserSetting;
return DeviceConfigSettings{
.boot_mode = FuzzedObject<std::optional<BootModeSetting>>()(provider),
.device_model =
FuzzedObject<std::optional<DeviceModelSetting>>()(provider),
.current_user =
FuzzedObject<std::optional<CurrentUserSetting>>()(provider),
};
}
};
template <>
struct FuzzedObject<Permission> {
Permission operator()(FuzzedDataProvider& provider) const {
return Permission{
.type = FuzzedObject<PermissionType>()(provider),
.auth_value =
FuzzedObject<std::optional<brillo::SecureBlob>>()(provider),
};
}
};
template <>
struct FuzzedObject<OperationPolicy> {
OperationPolicy operator()(FuzzedDataProvider& provider) const {
return OperationPolicy{
.device_configs = FuzzedObject<DeviceConfigs>()(provider),
.permission = FuzzedObject<Permission>()(provider),
};
}
};
template <>
struct FuzzedObject<OperationPolicySetting> {
OperationPolicySetting operator()(FuzzedDataProvider& provider) const {
return OperationPolicySetting{
.device_config_settings =
FuzzedObject<DeviceConfigSettings>()(provider),
.permission = FuzzedObject<Permission>()(provider),
};
}
};
} // namespace hwsec
#endif // LIBHWSEC_FUZZED_CONFIG_H_