core/manifest/cfm/cfm_manager.h (43 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. #ifndef CFM_MANAGER_H_ #define CFM_MANAGER_H_ #include <stddef.h> #include <stdint.h> #include "common/observable.h" #include "manifest/cfm/cfm.h" #include "manifest/cfm/cfm_observer.h" #include "manifest/manifest_manager.h" /** * Variable context for managing a single CFM. */ struct cfm_manager_state { struct observable observable; /**< The manager for CFM observers. */ }; /** * API for managing a CFM. */ struct cfm_manager { struct manifest_manager base; /**< Manifest manager interface */ /** * Get the active CFM for the protected flash. The CFM instance must be released with the * manager. * * @param manager The CFM manager to query. * * @return The active CFM or null if there is no active CFM. */ const struct cfm* (*get_active_cfm) (const struct cfm_manager *manager); /** * Get the CFM that is waiting to be activated. The CFM instance must be released with the * manager. * * @param manager The CFM manager to query. * * @return The pending CFM or null if there is no pending CFM. */ const struct cfm* (*get_pending_cfm) (const struct cfm_manager *manager); /** * Release a CFM instance retrieved from the manager. CFM instances must only be released by * the manager that allocated them. * * @param manager The CFM manager that allocated the CFM instance. * @param cfm The CFM to release. */ void (*free_cfm) (const struct cfm_manager *manager, const struct cfm *cfm); struct cfm_manager_state *state; /**< Variable context for CFM management. */ }; int cfm_manager_add_observer (const struct cfm_manager *manager, const struct cfm_observer *observer); int cfm_manager_remove_observer (const struct cfm_manager *manager, const struct cfm_observer *observer); int cfm_manager_get_id_measured_data (const struct cfm_manager *manager, size_t offset, uint8_t *buffer, size_t length, uint32_t *total_len); int cfm_manager_hash_id_measured_data (const struct cfm_manager *manager, const struct hash_engine *hash); int cfm_manager_get_platform_id_measured_data (const struct cfm_manager *manager, size_t offset, uint8_t *buffer, size_t length, uint32_t *total_len); int cfm_manager_hash_platform_id_measured_data (const struct cfm_manager *manager, const struct hash_engine *hash); int cfm_manager_get_cfm_measured_data (const struct cfm_manager *manager, size_t offset, uint8_t *buffer, size_t length, uint32_t *total_len); int cfm_manager_hash_cfm_measured_data (const struct cfm_manager *manager, const struct hash_engine *hash); /* Internal functions for use by derived types. */ int cfm_manager_init (struct cfm_manager *manager, struct cfm_manager_state *state, const struct hash_engine *hash); int cfm_manager_init_state (const struct cfm_manager *manager); void cfm_manager_release (const struct cfm_manager *manager); void cfm_manager_on_cfm_verified (const struct cfm_manager *manager); void cfm_manager_on_cfm_activated (const struct cfm_manager *manager); void cfm_manager_on_clear_active (const struct cfm_manager *manager); void cfm_manager_on_cfm_activation_request (const struct cfm_manager *manager); #endif /* CFM_MANAGER_H_ */