blob: 2eeda7edc8f9c59e00eef1c4c71c48f16e066ab2 [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_KEY_MANAGEMENT_H_
#define LIBHWSEC_FUZZED_KEY_MANAGEMENT_H_
#include <optional>
#include <type_traits>
#include <vector>
#include <brillo/secure_blob.h>
#include <fuzzer/FuzzedDataProvider.h>
#include "libhwsec/backend/key_management.h"
#include "libhwsec/fuzzed/basic_objects.h"
#include "libhwsec/fuzzed/middleware.h"
#include "libhwsec/structures/key.h"
namespace hwsec {
template <>
struct FuzzedObject<Key> {
Key operator()(FuzzedDataProvider& provider) const {
return Key{
.token = FuzzedObject<KeyToken>()(provider),
};
}
};
template <>
struct FuzzedObject<ScopedKey> {
ScopedKey operator()(FuzzedDataProvider& provider) const {
return ScopedKey(FuzzedObject<Key>()(provider),
FuzzedObject<MiddlewareDerivative>()(provider));
}
};
template <>
struct FuzzedObject<KeyManagement::CreateKeyResult> {
KeyManagement::CreateKeyResult operator()(
FuzzedDataProvider& provider) const {
return KeyManagement::CreateKeyResult{
.key = FuzzedObject<ScopedKey>()(provider),
.key_blob = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<RSAPublicInfo> {
RSAPublicInfo operator()(FuzzedDataProvider& provider) const {
return RSAPublicInfo{
.exponent = FuzzedObject<brillo::Blob>()(provider),
.modulus = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<ECCPublicInfo> {
ECCPublicInfo operator()(FuzzedDataProvider& provider) const {
return ECCPublicInfo{
.nid = FuzzedObject<int>()(provider),
.x_point = FuzzedObject<brillo::Blob>()(provider),
.y_point = FuzzedObject<brillo::Blob>()(provider),
};
}
};
template <>
struct FuzzedObject<KeyManagement::CreateKeyOptions> {
KeyManagement::CreateKeyOptions operator()(
FuzzedDataProvider& provider) const {
return KeyManagement::CreateKeyOptions{
.allow_software_gen = FuzzedObject<bool>()(provider),
.allow_decrypt = FuzzedObject<bool>()(provider),
.allow_sign = FuzzedObject<bool>()(provider),
.rsa_modulus_bits = FuzzedObject<std::optional<uint32_t>>()(provider),
.rsa_exponent = FuzzedObject<std::optional<brillo::Blob>>()(provider),
.ecc_nid = FuzzedObject<std::optional<uint32_t>>()(provider),
};
}
};
template <>
struct FuzzedObject<KeyManagement::LoadKeyOptions> {
KeyManagement::LoadKeyOptions operator()(FuzzedDataProvider& provider) const {
return KeyManagement::LoadKeyOptions{
.auto_reload = FuzzedObject<bool>()(provider),
.lazy_expiration_time = FuzzedObject<base::TimeDelta>()(provider),
};
}
};
} // namespace hwsec
#endif // LIBHWSEC_FUZZED_KEY_MANAGEMENT_H_