xref: /aosp_15_r20/external/tpm2-tss/src/tss2-fapi/fapi_util.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_UTIL_H
7*758e9fbaSOystein Eftevaag #define FAPI_UTIL_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 "ifapi_helpers.h"
20*758e9fbaSOystein Eftevaag 
21*758e9fbaSOystein Eftevaag 
22*758e9fbaSOystein Eftevaag TSS2_RC
23*758e9fbaSOystein Eftevaag ifapi_flush_object(FAPI_CONTEXT *context, ESYS_TR session);
24*758e9fbaSOystein Eftevaag 
25*758e9fbaSOystein Eftevaag TSS2_RC
26*758e9fbaSOystein Eftevaag ifapi_get_session_async(
27*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *esys,
28*758e9fbaSOystein Eftevaag     ESYS_TR saltkey,
29*758e9fbaSOystein Eftevaag     const IFAPI_PROFILE*profile,
30*758e9fbaSOystein Eftevaag     TPMI_ALG_HASH hashAlg);
31*758e9fbaSOystein Eftevaag 
32*758e9fbaSOystein Eftevaag TSS2_RC
33*758e9fbaSOystein Eftevaag ifapi_get_session_finish(ESYS_CONTEXT *esys, ESYS_TR *session,
34*758e9fbaSOystein Eftevaag                          TPMA_SESSION flags);
35*758e9fbaSOystein Eftevaag 
36*758e9fbaSOystein Eftevaag TSS2_RC
37*758e9fbaSOystein Eftevaag ifapi_set_auth(
38*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
39*758e9fbaSOystein Eftevaag     IFAPI_OBJECT *auth_object,
40*758e9fbaSOystein Eftevaag     const char *description);
41*758e9fbaSOystein Eftevaag 
42*758e9fbaSOystein Eftevaag TSS2_RC
43*758e9fbaSOystein Eftevaag ifapi_get_free_handle_async(FAPI_CONTEXT *fctx, TPM2_HANDLE *handle);
44*758e9fbaSOystein Eftevaag 
45*758e9fbaSOystein Eftevaag TSS2_RC
46*758e9fbaSOystein Eftevaag ifapi_get_free_handle_finish(FAPI_CONTEXT *fctx, TPM2_HANDLE *handle,
47*758e9fbaSOystein Eftevaag                              TPM2_HANDLE max);
48*758e9fbaSOystein Eftevaag 
49*758e9fbaSOystein Eftevaag TSS2_RC
50*758e9fbaSOystein Eftevaag ifapi_init_primary_async(
51*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
52*758e9fbaSOystein Eftevaag     TSS2_KEY_TYPE ktype);
53*758e9fbaSOystein Eftevaag 
54*758e9fbaSOystein Eftevaag TSS2_RC
55*758e9fbaSOystein Eftevaag ifapi_init_primary_finish(
56*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
57*758e9fbaSOystein Eftevaag     TSS2_KEY_TYPE ktype);
58*758e9fbaSOystein Eftevaag 
59*758e9fbaSOystein Eftevaag TSS2_RC
60*758e9fbaSOystein Eftevaag ifapi_session_init(FAPI_CONTEXT *context);
61*758e9fbaSOystein Eftevaag 
62*758e9fbaSOystein Eftevaag TSS2_RC
63*758e9fbaSOystein Eftevaag ifapi_non_tpm_mode_init(FAPI_CONTEXT *context);
64*758e9fbaSOystein Eftevaag 
65*758e9fbaSOystein Eftevaag void
66*758e9fbaSOystein Eftevaag ifapi_session_clean(FAPI_CONTEXT *context);
67*758e9fbaSOystein Eftevaag 
68*758e9fbaSOystein Eftevaag TSS2_RC
69*758e9fbaSOystein Eftevaag ifapi_cleanup_session(FAPI_CONTEXT *context);
70*758e9fbaSOystein Eftevaag 
71*758e9fbaSOystein Eftevaag void
72*758e9fbaSOystein Eftevaag ifapi_primary_clean(FAPI_CONTEXT *context);
73*758e9fbaSOystein Eftevaag 
74*758e9fbaSOystein Eftevaag TSS2_RC
75*758e9fbaSOystein Eftevaag ifapi_get_sessions_async(
76*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
77*758e9fbaSOystein Eftevaag     IFAPI_SESSION_TYPE session_flags,
78*758e9fbaSOystein Eftevaag     TPMA_SESSION attribute_flags1,
79*758e9fbaSOystein Eftevaag     TPMA_SESSION attribute_flags2);
80*758e9fbaSOystein Eftevaag 
81*758e9fbaSOystein Eftevaag TSS2_RC
82*758e9fbaSOystein Eftevaag ifapi_get_sessions_finish(
83*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
84*758e9fbaSOystein Eftevaag     const IFAPI_PROFILE *profile,
85*758e9fbaSOystein Eftevaag     TPMI_ALG_HASH hash_alg);
86*758e9fbaSOystein Eftevaag 
87*758e9fbaSOystein Eftevaag TSS2_RC
88*758e9fbaSOystein Eftevaag ifapi_merge_profile_into_nv_template(
89*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
90*758e9fbaSOystein Eftevaag     IFAPI_NV_TEMPLATE *template);
91*758e9fbaSOystein Eftevaag 
92*758e9fbaSOystein Eftevaag TSS2_RC
93*758e9fbaSOystein Eftevaag ifapi_merge_profile_into_template(
94*758e9fbaSOystein Eftevaag     const IFAPI_PROFILE *profile,
95*758e9fbaSOystein Eftevaag     IFAPI_KEY_TEMPLATE *template);
96*758e9fbaSOystein Eftevaag 
97*758e9fbaSOystein Eftevaag TSS2_RC
98*758e9fbaSOystein Eftevaag ifapi_load_key_async(FAPI_CONTEXT *context, size_t position);
99*758e9fbaSOystein Eftevaag 
100*758e9fbaSOystein Eftevaag TSS2_RC
101*758e9fbaSOystein Eftevaag ifapi_load_key_finish(FAPI_CONTEXT *context, bool flush_parent);
102*758e9fbaSOystein Eftevaag 
103*758e9fbaSOystein Eftevaag TSS2_RC
104*758e9fbaSOystein Eftevaag ifapi_load_keys_async(
105*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
106*758e9fbaSOystein Eftevaag     char const *keyPath);
107*758e9fbaSOystein Eftevaag 
108*758e9fbaSOystein Eftevaag TSS2_RC
109*758e9fbaSOystein Eftevaag ifapi_load_keys_finish(
110*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
111*758e9fbaSOystein Eftevaag     bool flush_parent,
112*758e9fbaSOystein Eftevaag     ESYS_TR *handle,
113*758e9fbaSOystein Eftevaag     IFAPI_OBJECT **key_object);
114*758e9fbaSOystein Eftevaag 
115*758e9fbaSOystein Eftevaag TSS2_RC
116*758e9fbaSOystein Eftevaag ifapi_nv_read(
117*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
118*758e9fbaSOystein Eftevaag     uint8_t     **data,
119*758e9fbaSOystein Eftevaag     size_t       *size);
120*758e9fbaSOystein Eftevaag 
121*758e9fbaSOystein Eftevaag void
122*758e9fbaSOystein Eftevaag ifapi_flush_policy_session(
123*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
124*758e9fbaSOystein Eftevaag     ESYS_TR session,
125*758e9fbaSOystein Eftevaag     TSS2_RC r);
126*758e9fbaSOystein Eftevaag 
127*758e9fbaSOystein Eftevaag TSS2_RC
128*758e9fbaSOystein Eftevaag ifapi_nv_write(
129*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
130*758e9fbaSOystein Eftevaag     char         *nvPath,
131*758e9fbaSOystein Eftevaag     size_t         param_offset,
132*758e9fbaSOystein Eftevaag     uint8_t const *data,
133*758e9fbaSOystein Eftevaag     size_t         size);
134*758e9fbaSOystein Eftevaag 
135*758e9fbaSOystein Eftevaag TSS2_RC
136*758e9fbaSOystein Eftevaag ifapi_get_random(
137*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
138*758e9fbaSOystein Eftevaag     size_t numBytes,
139*758e9fbaSOystein Eftevaag     uint8_t **data);
140*758e9fbaSOystein Eftevaag 
141*758e9fbaSOystein Eftevaag TSS2_RC
142*758e9fbaSOystein Eftevaag ifapi_load_key(
143*758e9fbaSOystein Eftevaag     FAPI_CONTEXT  *context,
144*758e9fbaSOystein Eftevaag     char    const *keyPath,
145*758e9fbaSOystein Eftevaag     IFAPI_OBJECT **key_object);
146*758e9fbaSOystein Eftevaag 
147*758e9fbaSOystein Eftevaag TSS2_RC
148*758e9fbaSOystein Eftevaag ifapi_key_sign(
149*758e9fbaSOystein Eftevaag     FAPI_CONTEXT    *context,
150*758e9fbaSOystein Eftevaag     IFAPI_OBJECT    *sig_key_object,
151*758e9fbaSOystein Eftevaag     char const      *padding,
152*758e9fbaSOystein Eftevaag     TPM2B_DIGEST    *digest,
153*758e9fbaSOystein Eftevaag     TPMT_SIGNATURE **tpm_signature,
154*758e9fbaSOystein Eftevaag     char           **publicKey,
155*758e9fbaSOystein Eftevaag     char           **certificate);
156*758e9fbaSOystein Eftevaag 
157*758e9fbaSOystein Eftevaag TSS2_RC
158*758e9fbaSOystein Eftevaag ifapi_authorize_object(
159*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
160*758e9fbaSOystein Eftevaag     IFAPI_OBJECT *object,
161*758e9fbaSOystein Eftevaag     ESYS_TR      *session);
162*758e9fbaSOystein Eftevaag 
163*758e9fbaSOystein Eftevaag TSS2_RC
164*758e9fbaSOystein Eftevaag ifapi_get_json(
165*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
166*758e9fbaSOystein Eftevaag     IFAPI_OBJECT *object,
167*758e9fbaSOystein Eftevaag     char **json_string);
168*758e9fbaSOystein Eftevaag 
169*758e9fbaSOystein Eftevaag TSS2_RC
170*758e9fbaSOystein Eftevaag ifapi_key_create_prepare(
171*758e9fbaSOystein Eftevaag     FAPI_CONTEXT  *context,
172*758e9fbaSOystein Eftevaag     char   const *keyPath,
173*758e9fbaSOystein Eftevaag     char   const *policyPath);
174*758e9fbaSOystein Eftevaag 
175*758e9fbaSOystein Eftevaag TSS2_RC
176*758e9fbaSOystein Eftevaag ifapi_key_create_prepare_auth(
177*758e9fbaSOystein Eftevaag     FAPI_CONTEXT  *context,
178*758e9fbaSOystein Eftevaag     char   const *keyPath,
179*758e9fbaSOystein Eftevaag     char   const *policyPath,
180*758e9fbaSOystein Eftevaag     char   const *authValue);
181*758e9fbaSOystein Eftevaag 
182*758e9fbaSOystein Eftevaag TSS2_RC
183*758e9fbaSOystein Eftevaag ifapi_key_create_prepare_sensitive(
184*758e9fbaSOystein Eftevaag     FAPI_CONTEXT  *context,
185*758e9fbaSOystein Eftevaag     char    const *keyPath,
186*758e9fbaSOystein Eftevaag     char    const *policyPath,
187*758e9fbaSOystein Eftevaag     size_t         dataSize,
188*758e9fbaSOystein Eftevaag     char    const *authValue,
189*758e9fbaSOystein Eftevaag     uint8_t const *data);
190*758e9fbaSOystein Eftevaag 
191*758e9fbaSOystein Eftevaag TSS2_RC
192*758e9fbaSOystein Eftevaag ifapi_key_create(
193*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
194*758e9fbaSOystein Eftevaag     IFAPI_KEY_TEMPLATE *template);
195*758e9fbaSOystein Eftevaag 
196*758e9fbaSOystein Eftevaag TSS2_RC
197*758e9fbaSOystein Eftevaag ifapi_get_sig_scheme(
198*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
199*758e9fbaSOystein Eftevaag     IFAPI_OBJECT *object,
200*758e9fbaSOystein Eftevaag     char const *padding,
201*758e9fbaSOystein Eftevaag     TPM2B_DIGEST *digest,
202*758e9fbaSOystein Eftevaag     TPMT_SIG_SCHEME *sig_scheme);
203*758e9fbaSOystein Eftevaag 
204*758e9fbaSOystein Eftevaag TSS2_RC
205*758e9fbaSOystein Eftevaag ifapi_change_auth_hierarchy(
206*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
207*758e9fbaSOystein Eftevaag     ESYS_TR handle,
208*758e9fbaSOystein Eftevaag     IFAPI_OBJECT *hierarchy_object,
209*758e9fbaSOystein Eftevaag     TPM2B_AUTH *newAuthValue);
210*758e9fbaSOystein Eftevaag 
211*758e9fbaSOystein Eftevaag TSS2_RC
212*758e9fbaSOystein Eftevaag ifapi_change_policy_hierarchy(
213*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
214*758e9fbaSOystein Eftevaag     ESYS_TR handle,
215*758e9fbaSOystein Eftevaag     IFAPI_OBJECT *hierarchy_object,
216*758e9fbaSOystein Eftevaag     TPMS_POLICY *policy);
217*758e9fbaSOystein Eftevaag 
218*758e9fbaSOystein Eftevaag IFAPI_OBJECT
219*758e9fbaSOystein Eftevaag *ifapi_allocate_object(FAPI_CONTEXT *context);
220*758e9fbaSOystein Eftevaag 
221*758e9fbaSOystein Eftevaag void
222*758e9fbaSOystein Eftevaag ifapi_free_objects(FAPI_CONTEXT *context);
223*758e9fbaSOystein Eftevaag 
224*758e9fbaSOystein Eftevaag void
225*758e9fbaSOystein Eftevaag ifapi_free_object(FAPI_CONTEXT *context, IFAPI_OBJECT **object);
226*758e9fbaSOystein Eftevaag 
227*758e9fbaSOystein Eftevaag TPM2_RC
228*758e9fbaSOystein Eftevaag ifapi_capability_init(FAPI_CONTEXT *context);
229*758e9fbaSOystein Eftevaag 
230*758e9fbaSOystein Eftevaag TPM2_RC
231*758e9fbaSOystein Eftevaag ifapi_capability_get(FAPI_CONTEXT *context, TPM2_CAP capability,
232*758e9fbaSOystein Eftevaag                      UINT32 count, TPMS_CAPABILITY_DATA **capability_data);
233*758e9fbaSOystein Eftevaag 
234*758e9fbaSOystein Eftevaag TSS2_RC
235*758e9fbaSOystein Eftevaag ifapi_get_certificates(
236*758e9fbaSOystein Eftevaag     FAPI_CONTEXT *context,
237*758e9fbaSOystein Eftevaag     UINT32 min_handle,
238*758e9fbaSOystein Eftevaag     UINT32 max_handle,
239*758e9fbaSOystein Eftevaag     NODE_OBJECT_T **cert_list);
240*758e9fbaSOystein Eftevaag 
241*758e9fbaSOystein Eftevaag TSS2_RC
242*758e9fbaSOystein Eftevaag ifapi_initialize_object(
243*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *ectx,
244*758e9fbaSOystein Eftevaag     IFAPI_OBJECT *object);
245*758e9fbaSOystein Eftevaag 
246*758e9fbaSOystein Eftevaag TSS2_RC
247*758e9fbaSOystein Eftevaag ifapi_esys_serialize_object(
248*758e9fbaSOystein Eftevaag     ESYS_CONTEXT *ectx,
249*758e9fbaSOystein Eftevaag     IFAPI_OBJECT *object);
250*758e9fbaSOystein Eftevaag 
251*758e9fbaSOystein Eftevaag TSS2_RC
252*758e9fbaSOystein Eftevaag ifapi_get_description(IFAPI_OBJECT *object, char **description);
253*758e9fbaSOystein Eftevaag 
254*758e9fbaSOystein Eftevaag void
255*758e9fbaSOystein Eftevaag ifapi_set_description(IFAPI_OBJECT *object, char *description);
256*758e9fbaSOystein Eftevaag 
257*758e9fbaSOystein Eftevaag #endif /* FAPI_UTIL_H */
258