xref: /aosp_15_r20/external/tpm2-tss/src/tss2-fapi/ifapi_policy_instantiate.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_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