xref: /aosp_15_r20/external/tpm2-tss/src/tss2-fapi/ifapi_policy_callbacks.h (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
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