blob: 03ee28565093e55b69135159ad0ff63cae2f55b1 [file] [log] [blame] [edit]
// Copyright 2022 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_PINWEAVER_H_
#define LIBHWSEC_FUZZED_PINWEAVER_H_
#include <algorithm>
#include <optional>
#include <type_traits>
#include <vector>
#include <brillo/secure_blob.h>
#include <fuzzer/FuzzedDataProvider.h>
#include "libhwsec/backend/pinweaver.h"
#include "libhwsec/fuzzed/basic_objects.h"
namespace hwsec {
template <>
struct FuzzedObject<PinWeaver::CredentialTreeResult> {
PinWeaver::CredentialTreeResult operator()(
FuzzedDataProvider& provider) const {
return PinWeaver::CredentialTreeResult{
.error = FuzzedObject<PinWeaver::CredentialTreeResult::ErrorCode>()(
provider),
.new_root = FuzzedObject<brillo::Blob>()(provider),
.new_cred_metadata =
FuzzedObject<std::optional<brillo::Blob>>()(provider),
.new_mac = FuzzedObject<std::optional<brillo::Blob>>()(provider),
.he_secret =
FuzzedObject<std::optional<brillo::SecureBlob>>()(provider),
.reset_secret =
FuzzedObject<std::optional<brillo::SecureBlob>>()(provider),
.server_nonce = FuzzedObject<std::optional<brillo::Blob>>()(provider),
.iv = FuzzedObject<std::optional<brillo::Blob>>()(provider),
.encrypted_he_secret =
FuzzedObject<std::optional<brillo::Blob>>()(provider),
};
}
};
template <>
struct FuzzedObject<PinWeaver::GetLogResult::LogEntry> {
PinWeaver::GetLogResult::LogEntry operator()(
FuzzedDataProvider& provider) const {
return PinWeaver::GetLogResult::LogEntry{
.type = FuzzedObject<PinWeaver::GetLogResult::LogEntryType>()(provider),
.label = FuzzedObject<uint64_t>()(provider),
.root = FuzzedObject<brillo::Blob>()(provider),
.mac = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<PinWeaver::GetLogResult> {
PinWeaver::GetLogResult operator()(FuzzedDataProvider& provider) const {
return PinWeaver::GetLogResult{
.root_hash = FuzzedObject<brillo::Blob>()(provider),
.log_entries =
FuzzedObject<std::vector<PinWeaver::GetLogResult::LogEntry>>()(
provider),
};
}
};
template <>
struct FuzzedObject<PinWeaver::ReplayLogOperationResult> {
PinWeaver::ReplayLogOperationResult operator()(
FuzzedDataProvider& provider) const {
return PinWeaver::ReplayLogOperationResult{
.new_cred_metadata = FuzzedObject<brillo::Blob>()(provider),
.new_mac = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<PinWeaver::PinWeaverEccPoint> {
PinWeaver::PinWeaverEccPoint operator()(FuzzedDataProvider& provider) const {
PinWeaver::PinWeaverEccPoint result;
auto bytes = provider.ConsumeBytes<uint8_t>(PinWeaverEccPointSize);
std::copy_n(std::begin(bytes), bytes.size(), std::begin(result.x));
bytes = provider.ConsumeBytes<uint8_t>(PinWeaverEccPointSize);
std::copy_n(std::begin(bytes), bytes.size(), std::begin(result.y));
return result;
}
};
} // namespace hwsec
#endif // LIBHWSEC_FUZZED_PINWEAVER_H_