| // 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_ |