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