blob: 06c105eebb105225f9ce44c3730ab22cb0a82279 [file] [log] [blame]
// 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_SIGNATURE_SEALING_H_
#define LIBHWSEC_FUZZED_SIGNATURE_SEALING_H_
#include <optional>
#include <type_traits>
#include <vector>
#include <brillo/secure_blob.h>
#include <fuzzer/FuzzedDataProvider.h>
#include "libhwsec/backend/signature_sealing.h"
#include "libhwsec/fuzzed/basic_objects.h"
#include "libhwsec/structures/signature_sealed_data.h"
namespace hwsec {
template <>
struct FuzzedObject<SignatureSealing::ChallengeResult> {
SignatureSealing::ChallengeResult operator()(
FuzzedDataProvider& provider) const {
return SignatureSealing::ChallengeResult{
.challenge_id = FuzzedObject<SignatureSealing::ChallengeID>()(provider),
.algorithm = FuzzedObject<SignatureSealing::Algorithm>()(provider),
.challenge = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<Tpm2PolicyDigest> {
Tpm2PolicyDigest operator()(FuzzedDataProvider& provider) const {
return Tpm2PolicyDigest{
.digest = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<Tpm2PolicySignedData> {
Tpm2PolicySignedData operator()(FuzzedDataProvider& provider) const {
return Tpm2PolicySignedData{
.public_key_spki_der = FuzzedObject<brillo::Blob>()(provider),
.srk_wrapped_secret = FuzzedObject<brillo::Blob>()(provider),
.scheme = FuzzedObject<std::optional<int32_t>>()(provider),
.hash_alg = FuzzedObject<std::optional<int32_t>>()(provider),
.pcr_policy_digests =
FuzzedObject<std::vector<Tpm2PolicyDigest>>()(provider),
};
}
};
template <>
struct FuzzedObject<Tpm12PcrValue> {
Tpm12PcrValue operator()(FuzzedDataProvider& provider) const {
return Tpm12PcrValue{
.pcr_index = FuzzedObject<std::optional<uint32_t>>()(provider),
.pcr_value = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<Tpm12PcrBoundItem> {
Tpm12PcrBoundItem operator()(FuzzedDataProvider& provider) const {
return Tpm12PcrBoundItem{
.pcr_values = FuzzedObject<std::vector<Tpm12PcrValue>>()(provider),
.bound_secret = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<Tpm12CertifiedMigratableKeyData> {
Tpm12CertifiedMigratableKeyData operator()(
FuzzedDataProvider& provider) const {
return Tpm12CertifiedMigratableKeyData{
.public_key_spki_der = FuzzedObject<brillo::Blob>()(provider),
.srk_wrapped_cmk = FuzzedObject<brillo::Blob>()(provider),
.cmk_pubkey = FuzzedObject<brillo::Blob>()(provider),
.cmk_wrapped_auth_data = FuzzedObject<brillo::Blob>()(provider),
.pcr_bound_items =
FuzzedObject<std::vector<Tpm12PcrBoundItem>>()(provider),
};
}
};
} // namespace hwsec
#endif // LIBHWSEC_FUZZED_SIGNATURE_SEALING_H_