core/manifest/pcd/pcd_manager.h (42 lines of code) (raw):

// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. #ifndef PCD_MANAGER_H_ #define PCD_MANAGER_H_ #include <stddef.h> #include <stdint.h> #include "common/observable.h" #include "manifest/manifest_manager.h" #include "manifest/pcd/pcd.h" #include "manifest/pcd/pcd_observer.h" /** * Variable context for managing a single PCD. */ struct pcd_manager_state { struct observable observable; /**< The manager for PCD observers. */ }; /** * API for managing a PCD. */ struct pcd_manager { struct manifest_manager base; /**< Manifest manager interface */ /** * Get the active PCD. The PCD instance must be released with the manager. * * @param manager The PCD manager to query. * * @return The active PCD or null if there is no active PCD. */ const struct pcd* (*get_active_pcd) (const struct pcd_manager *manager); /** * Release a PCD instance retrieved from the manager. PCD instances must only be released by * the manager that allocated them. * * @param manager The PCD manager that allocated the PCD instance. * @param pcd The PCD to release. */ void (*free_pcd) (const struct pcd_manager *manager, const struct pcd *pcd); struct pcd_manager_state *state; /**< Variable context for PCD management. */ }; int pcd_manager_add_observer (const struct pcd_manager *manager, const struct pcd_observer *observer); int pcd_manager_remove_observer (const struct pcd_manager *manager, const struct pcd_observer *observer); int pcd_manager_get_id_measured_data (const struct pcd_manager *manager, size_t offset, uint8_t *buffer, size_t length, uint32_t *total_len); int pcd_manager_hash_id_measured_data (const struct pcd_manager *manager, const struct hash_engine *hash); int pcd_manager_get_platform_id_measured_data (const struct pcd_manager *manager, size_t offset, uint8_t *buffer, size_t length, uint32_t *total_len); int pcd_manager_hash_platform_id_measured_data (const struct pcd_manager *manager, const struct hash_engine *hash); int pcd_manager_get_pcd_measured_data (const struct pcd_manager *manager, size_t offset, uint8_t *buffer, size_t length, uint32_t *total_len); int pcd_manager_hash_pcd_measured_data (const struct pcd_manager *manager, const struct hash_engine *hash); /* Internal functions for use by derived types. */ int pcd_manager_init (struct pcd_manager *manager, struct pcd_manager_state *state, const struct hash_engine *hash); int pcd_manager_init_state (const struct pcd_manager *manager); void pcd_manager_release (const struct pcd_manager *manager); void pcd_manager_on_pcd_verified (const struct pcd_manager *manager, const struct pcd *pending); void pcd_manager_on_pcd_activated (const struct pcd_manager *manager); void pcd_manager_on_clear_active (const struct pcd_manager *manager); void pcd_manager_on_pcd_activation_request (const struct pcd_manager *manager); #endif /* PCD_MANAGER_H_ */