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