1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /******************************************************************************* 3 * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG 4 * All rights reserved. 5 *******************************************************************************/ 6 #ifndef FAPI_POLICY_INSTANTIATE_H 7 #define FAPI_POLICY_INSTANTIATE_H 8 9 #include <stdint.h> 10 #include <stdarg.h> 11 #include <stdbool.h> 12 #include <sys/stat.h> 13 #include <json-c/json.h> 14 #include <json-c/json_util.h> 15 16 #include "tss2_esys.h" 17 #include "tss2_fapi.h" 18 //#include "fapi_int.h" 19 //#include "fapi_policy.h" 20 //#include "ifapi_keystore.h" 21 22 typedef TSS2_RC (*ifapi_policyeval_cbpublic) ( 23 const char *path, 24 TPMT_PUBLIC *public, 25 void *userdata); /* e.g. for FAPI_CONTEXT */ 26 27 typedef TSS2_RC (*ifapi_policyeval_cbname) ( 28 const char *path, 29 TPM2B_NAME *name, 30 void *userdata); /* e.g. for FAPI_CONTEXT */ 31 32 typedef TSS2_RC (*ifapi_policyeval_cbnvindex) ( 33 const char *path, 34 TPMI_RH_NV_INDEX *nv_index, 35 void *userdata); /* e.g. for FAPI_CONTEXT */ 36 37 typedef TSS2_RC (*ifapi_policyeval_cbnvpublic) ( 38 const char *path, 39 TPM2B_NV_PUBLIC *nv_public, 40 void *userdata); /* e.g. for FAPI_CONTEXT */ 41 42 typedef TSS2_RC (*ifapi_policyeval_cbpemparam) ( 43 const char *keyPEM, 44 TPMT_PUBLIC *keyPublic, 45 TPM2B_NAME *name, 46 void *userdata); /* e.g. for FAPI_CONTEXT */ 47 48 typedef TSS2_RC (*ifapi_policyeval_cbpcr) ( 49 TPMS_PCR_SELECT *pcrSelect, 50 TPML_PCR_SELECTION *pcrBankSelect, 51 TPML_PCRVALUES **pcrs, 52 void *userdata); /* e.g. for FAPI_CONTEXT */ 53 54 typedef struct { 55 ifapi_policyeval_cbpcr cbpcr; /**< Callback to compute current PCR value */ 56 void *cbpcr_userdata; 57 ifapi_policyeval_cbname cbname; /**< Callback to compute name of an object from path */ 58 void *cbname_userdata; 59 ifapi_policyeval_cbpublic cbpublic; /**< Callback to compute public info of a key */ 60 void *cbpublic_userdata; 61 ifapi_policyeval_cbnvpublic cbnvpublic; /**< Callback to compute the NV public from path */ 62 void *cbnvpublic_userdata; 63 } ifapi_policyeval_INST_CB; 64 65 /** Type for representing the context for policy instantiation. 66 */ 67 typedef struct { 68 TPMS_POLICY *policy; /**< The policy to be instantiated */ 69 NODE_OBJECT_T *policy_elements; /** The policy elements to be instantiated */ 70 ifapi_policyeval_INST_CB callbacks; 71 } IFAPI_POLICY_EVAL_INST_CTX; 72 73 TSS2_RC 74 ifapi_policyeval_instantiate_async( 75 IFAPI_POLICY_EVAL_INST_CTX *context, /* For re-entry after try_again for offsets and such */ 76 TPMS_POLICY *policy, /* in */ 77 ifapi_policyeval_INST_CB *callbacks); 78 TSS2_RC 79 80 ifapi_policyeval_instantiate_finish( 81 IFAPI_POLICY_EVAL_INST_CTX *context); 82 83 #endif /* FAPI_POLICY_INSTANTIATE_H */ 84