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_CALLBACKS_H 7*758e9fbaSOystein Eftevaag #define FAPI_POLICY_CALLBACKS_H 8*758e9fbaSOystein Eftevaag 9*758e9fbaSOystein Eftevaag 10*758e9fbaSOystein Eftevaag /** The states for policy execution callbacks */ 11*758e9fbaSOystein Eftevaag enum IFAPI_STATE_POL_CB_EXCECUTE { 12*758e9fbaSOystein Eftevaag POL_CB_EXECUTE_INIT = 0, 13*758e9fbaSOystein Eftevaag POL_CB_LOAD_KEY, 14*758e9fbaSOystein Eftevaag POL_CB_SEARCH_POLICY, 15*758e9fbaSOystein Eftevaag POL_CB_EXECUTE_SUB_POLICY, 16*758e9fbaSOystein Eftevaag POL_CB_NV_READ, 17*758e9fbaSOystein Eftevaag POL_CB_READ_NV_POLICY, 18*758e9fbaSOystein Eftevaag POL_CB_READ_OBJECT, 19*758e9fbaSOystein Eftevaag POL_CB_AUTHORIZE_OBJECT 20*758e9fbaSOystein Eftevaag }; 21*758e9fbaSOystein Eftevaag 22*758e9fbaSOystein Eftevaag /** The context of the policy execution */ 23*758e9fbaSOystein Eftevaag typedef struct { 24*758e9fbaSOystein Eftevaag enum IFAPI_STATE_POL_CB_EXCECUTE cb_state; 25*758e9fbaSOystein Eftevaag /**< The execution state of the current policy callback */ 26*758e9fbaSOystein Eftevaag char*object_path; /**< The pathname determined by object search */ 27*758e9fbaSOystein Eftevaag IFAPI_OBJECT object; /**< Object to be authorized */ 28*758e9fbaSOystein Eftevaag ESYS_TR key_handle; /**< Handle of a used key */ 29*758e9fbaSOystein Eftevaag ESYS_TR nv_index; /**< Index of nv object storing a policy */ 30*758e9fbaSOystein Eftevaag ESYS_TR auth_index; /**< Index of authorization object */ 31*758e9fbaSOystein Eftevaag IFAPI_OBJECT auth_object; /**< FAPI auth object needed for authorization */ 32*758e9fbaSOystein Eftevaag IFAPI_OBJECT *key_object_ptr; 33*758e9fbaSOystein Eftevaag IFAPI_OBJECT *auth_object_ptr; 34*758e9fbaSOystein Eftevaag IFAPI_NV_Cmds nv_cmd_state; 35*758e9fbaSOystein Eftevaag IFAPI_NV_Cmds nv_cmd_state_sav; /**< backup for state of fapi nv commands */ 36*758e9fbaSOystein Eftevaag TPM2B_DIGEST policy_digest; 37*758e9fbaSOystein Eftevaag ESYS_TR session; 38*758e9fbaSOystein Eftevaag TPMS_POLICY *policy; 39*758e9fbaSOystein Eftevaag } IFAPI_POLICY_EXEC_CB_CTX; 40*758e9fbaSOystein Eftevaag 41*758e9fbaSOystein Eftevaag TSS2_RC 42*758e9fbaSOystein Eftevaag ifapi_get_key_public( 43*758e9fbaSOystein Eftevaag const char *path, 44*758e9fbaSOystein Eftevaag TPMT_PUBLIC *public, 45*758e9fbaSOystein Eftevaag void *context); 46*758e9fbaSOystein Eftevaag 47*758e9fbaSOystein Eftevaag TSS2_RC 48*758e9fbaSOystein Eftevaag ifapi_get_object_name( 49*758e9fbaSOystein Eftevaag const char *path, 50*758e9fbaSOystein Eftevaag TPM2B_NAME *name, 51*758e9fbaSOystein Eftevaag void *context); 52*758e9fbaSOystein Eftevaag 53*758e9fbaSOystein Eftevaag TSS2_RC 54*758e9fbaSOystein Eftevaag ifapi_get_nv_public( 55*758e9fbaSOystein Eftevaag const char *path, 56*758e9fbaSOystein Eftevaag TPM2B_NV_PUBLIC *nv_public, 57*758e9fbaSOystein Eftevaag void *context); 58*758e9fbaSOystein Eftevaag 59*758e9fbaSOystein Eftevaag TSS2_RC 60*758e9fbaSOystein Eftevaag ifapi_read_pcr( 61*758e9fbaSOystein Eftevaag TPMS_PCR_SELECT *pcr_select, 62*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION *pcr_selection, 63*758e9fbaSOystein Eftevaag TPML_PCRVALUES **pcr_values, 64*758e9fbaSOystein Eftevaag void *ctx); 65*758e9fbaSOystein Eftevaag 66*758e9fbaSOystein Eftevaag TSS2_RC 67*758e9fbaSOystein Eftevaag ifapi_policyeval_cbauth( 68*758e9fbaSOystein Eftevaag TPM2B_NAME *name, 69*758e9fbaSOystein Eftevaag ESYS_TR *object_handle, 70*758e9fbaSOystein Eftevaag ESYS_TR *auth_handle, 71*758e9fbaSOystein Eftevaag ESYS_TR *authSession, 72*758e9fbaSOystein Eftevaag void *userdata); 73*758e9fbaSOystein Eftevaag 74*758e9fbaSOystein Eftevaag TSS2_RC 75*758e9fbaSOystein Eftevaag ifapi_branch_selection( 76*758e9fbaSOystein Eftevaag TPML_POLICYBRANCHES *branches, 77*758e9fbaSOystein Eftevaag size_t *branch_idx, 78*758e9fbaSOystein Eftevaag void *userdata); 79*758e9fbaSOystein Eftevaag 80*758e9fbaSOystein Eftevaag TSS2_RC 81*758e9fbaSOystein Eftevaag ifapi_sign_buffer( 82*758e9fbaSOystein Eftevaag char *key_pem, 83*758e9fbaSOystein Eftevaag char *public_key_hint, 84*758e9fbaSOystein Eftevaag TPMI_ALG_HASH key_pem_hash_alg, 85*758e9fbaSOystein Eftevaag uint8_t *buffer, 86*758e9fbaSOystein Eftevaag size_t buffer_size, 87*758e9fbaSOystein Eftevaag uint8_t **signature, 88*758e9fbaSOystein Eftevaag size_t *signature_size, 89*758e9fbaSOystein Eftevaag void *userdata); 90*758e9fbaSOystein Eftevaag 91*758e9fbaSOystein Eftevaag TSS2_RC 92*758e9fbaSOystein Eftevaag ifapi_exec_auth_policy( 93*758e9fbaSOystein Eftevaag TPMT_PUBLIC *key_public, 94*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hash_alg, 95*758e9fbaSOystein Eftevaag TPM2B_DIGEST *digest, 96*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *signature, 97*758e9fbaSOystein Eftevaag void *userdata); 98*758e9fbaSOystein Eftevaag 99*758e9fbaSOystein Eftevaag TSS2_RC 100*758e9fbaSOystein Eftevaag ifapi_exec_auth_nv_policy( 101*758e9fbaSOystein Eftevaag TPM2B_NV_PUBLIC *nv_public, 102*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hash_alg, 103*758e9fbaSOystein Eftevaag void *userdata); 104*758e9fbaSOystein Eftevaag 105*758e9fbaSOystein Eftevaag TSS2_RC 106*758e9fbaSOystein Eftevaag ifapi_get_duplicate_name( 107*758e9fbaSOystein Eftevaag TPM2B_NAME *name, 108*758e9fbaSOystein Eftevaag void *userdata); 109*758e9fbaSOystein Eftevaag 110*758e9fbaSOystein Eftevaag TSS2_RC 111*758e9fbaSOystein Eftevaag ifapi_policy_action( 112*758e9fbaSOystein Eftevaag const char *action, 113*758e9fbaSOystein Eftevaag void *userdata); 114*758e9fbaSOystein Eftevaag 115*758e9fbaSOystein Eftevaag #endif /* FAPI_POLICY_CALLBACKS_H */ 116