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 IFAPI_HELPERS_H
7 #define IFAPI_HELPERS_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 
20 TSS2_RC
21 ifapi_create_dirs(const char *supdir, const char *path);
22 
23 TSS2_RC
24 ifapi_set_key_flags(const char *type, bool policy, IFAPI_KEY_TEMPLATE *template);
25 
26 TSS2_RC
27 ifapi_set_nv_flags(const char *type, IFAPI_NV_TEMPLATE *template,
28                    const char *policy);
29 
30 bool
31 ifapi_path_type_p(const char *path, const char *type);
32 
33 ESYS_TR
34 ifapi_get_hierary_handle(const char *path);
35 
36 bool
37 ifapi_hierarchy_path_p(const char *path);
38 
39 bool
40 ifapi_TPMT_PUBLIC_cmp(TPMT_PUBLIC *in1, TPMT_PUBLIC *in2);
41 
42 void
43 ifapi_init_hierarchy_object(
44     IFAPI_OBJECT *hierarchy,
45     ESYS_TR esys_handle);
46 
47 char *
48 get_description(IFAPI_OBJECT *object);
49 
50 size_t
51 ifapi_path_length(NODE_STR_T *node);
52 
53 void
54 ifapi_free_object_list(NODE_OBJECT_T *node);
55 
56 void
57 ifapi_free_node_list(NODE_OBJECT_T *node);
58 
59 TSS2_RC
60 ifapi_path_string(char **dest, const char *supdir, NODE_STR_T *node, char *name);
61 
62 TSS2_RC
63 ifapi_path_string_n(
64     char **dest,
65     const char *supdir,
66     NODE_STR_T *node,
67     char *name,
68     size_t n);
69 
70 TSS2_RC
71 ifapi_asprintf(char **str, const char *fmt, ...);
72 
73 NODE_STR_T *
74 split_string(const char *string, char *delimiter);
75 
76 NODE_STR_T *
77 init_string_list(const char *string);
78 
79 bool
80 add_string_to_list(NODE_STR_T *str_list, char *string);
81 
82 void
83 free_string_list(NODE_STR_T *node);
84 
85 void
86 ifapi_cleanup_policy(
87     TPMS_POLICY *policy);
88 
89 TPMS_POLICY *
90 ifapi_copy_policy(
91     const TPMS_POLICY *from_policy);
92 
93 TSS2_RC
94 ifapi_get_name(
95     TPMT_PUBLIC *publicInfo,
96     TPM2B_NAME *name);
97 
98 TSS2_RC
99 ifapi_nv_get_name(
100     TPM2B_NV_PUBLIC *publicInfo,
101     TPM2B_NAME *name);
102 
103 TSS2_RC
104 ifapi_object_cmp_name(
105     IFAPI_OBJECT *object,
106     void *name,
107     bool *equal);
108 
109 TSS2_RC
110 ifapi_object_cmp_nv_public(
111     IFAPI_OBJECT *object,
112     void *nv_public,
113     bool *equal);
114 
115 TSS2_RC
116 ifapi_tpm_to_fapi_signature(
117     IFAPI_OBJECT *sig_key_object,
118     TPMT_SIGNATURE *tpm_signature,
119     uint8_t **signature,
120     size_t *signatureSize);
121 
122 TSS2_RC
123 ifapi_compute_quote_info(
124     IFAPI_OBJECT *sig_key_object,
125     TPM2B_ATTEST *tpm_quoted,
126     char **quoteInfo);
127 
128 TSS2_RC
129 ifapi_get_quote_info(
130     char const *quoteInfo,
131     TPM2B_ATTEST *tpm_quoted,
132     FAPI_QUOTE_INFO *fapi_quote_ingo);
133 
134 TSS2_RC
135 push_object_to_list(void *object, NODE_OBJECT_T **object_list);
136 
137 TSS2_RC
138 append_object_to_list(void *object, NODE_OBJECT_T **object_list);
139 
140 bool
141 object_with_auth(IFAPI_OBJECT *object);
142 
143 TSS2_RC
144 ifapi_get_nv_start_index(const char *path, TPM2_HANDLE *start_nv_index);
145 
146 TSS2_RC
147 ifapi_check_profile_pcr_selection(
148     const TPML_PCR_SELECTION *pcr_profile,
149     const TPML_PCR_SELECTION *pcr_capablity);
150 
151 TSS2_RC
152 ifapi_filter_pcr_selection_by_index(
153     TPML_PCR_SELECTION *pcr_selection,
154     const TPM2_HANDLE *pcr_index,
155     size_t pcr_count);
156 
157 TSS2_RC ifapi_calculate_pcr_digest(
158     json_object *jso_event_list,
159     const FAPI_QUOTE_INFO *quote_info,
160     TPM2B_DIGEST *pcr_digest);
161 
162 TSS2_RC
163 ifapi_compute_policy_digest(
164     TPML_PCRVALUES *pcrs,
165     TPML_PCR_SELECTION *pcr_selection,
166     TPMI_ALG_HASH hash_alg,
167     TPM2B_DIGEST *pcr_digest);
168 
169 bool
170 ifapi_cmp_public_key(
171     TPM2B_PUBLIC *key1,
172     TPM2B_PUBLIC *key2);
173 
174 int
175 ifapi_get_curl_buffer(
176     unsigned char * url,
177     unsigned char ** buffer,
178     size_t *cert_size);
179 
180 #endif /* IFAPI_HELPERS_H */
181