tpm2-tss 4.1.3
TPM Software stack 2.0 TCG spec compliant implementation
ifapi_keystore.h
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
7#ifndef IFAPI_KEYSTORE_H
8#define IFAPI_KEYSTORE_H
9
10#include <stdlib.h>
11
12#include "tss2_common.h"
13#include "tss2_tpm2_types.h"
14#include "fapi_types.h"
15#include "ifapi_policy_types.h"
16#include "tss2_esys.h"
17#include "tss2_policy.h"
18
19typedef UINT32 IFAPI_OBJECT_TYPE_CONSTANT;
20#define IFAPI_OBJ_NONE 0
21#define IFAPI_KEY_OBJ 1
22#define IFAPI_NV_OBJ 2
23#define IFAPI_EXT_PUB_KEY_OBJ 3
24#define IFAPI_HIERARCHY_OBJ 4
25#define IFAPI_DUPLICATE_OBJ 5
29typedef struct {
31 TPM2B_PUBLIC public;
33 UINT8_ARY private;
35 TPM2B_DIGEST creationHash;
36 TPM2B_CREATION_DATA creationData;
37 TPMT_TK_CREATION creationTicket;
41 TPMT_SIG_SCHEME signing_scheme;
42 TPM2B_NAME name;
43 TPMI_YES_NO with_auth;
44 UINT32 reset_count;
45 TPMI_YES_NO delete_prohibited;
46 TPMI_YES_NO ek_profile;
48 TPM2B_DIGEST nonce;
49} IFAPI_KEY;
50
53typedef struct {
56 TPM2B_PUBLIC public;
58
61typedef struct {
62 TPMI_YES_NO with_auth;
64 TPM2B_DIGEST authPolicy;
65 ESYS_TR esysHandle;
67 TPM2B_NAME name;
69
72typedef struct {
73 TPM2B_NV_PUBLIC public;
75 UINT32 hierarchy;
79 TPMI_YES_NO with_auth;
80 char* event_log;
81} IFAPI_NV;
82
85typedef struct {
86
87 TPM2B_PRIVATE duplicate;
88 TPM2B_ENCRYPTED_SECRET encrypted_seed;
89 TPM2B_PUBLIC public;
90 TPM2B_PUBLIC public_parent;
94
104
106enum FAPI_SEARCH_STATE {
107 KSEARCH_INIT = 0,
108 KSEARCH_SEARCH_OBJECT,
109 KSEARCH_READ
110};
111
114typedef struct {
115 size_t path_idx;
116 size_t numPaths;
117 char **pathlist;
118 enum FAPI_SEARCH_STATE state;
120
121typedef struct IFAPI_KEYSTORE {
122 char *systemdir;
123 char *userdir;
124 char *defaultprofile;
125 IFAPI_KEY_SEARCH key_search;
126 const char* rel_path;
128
129
131enum IFAPI_AUTHORIZATION_STATE {
132 AUTH_INIT = 0,
133 AUTH_CHECK_POLICY,
134 AUTH_CREATE_SESSION,
135 AUTH_EXEC_POLICY,
136 AUTH_FLUSH_OLD_POLICY,
137 AUTH_DONE
138};
139
141enum IFAPI_IO_STATE {
142 IO_INIT = 0,
143 IO_ACTIVE,
144};
145
146#define TSS2_OBJECT_TO_IFAPI_OBJECT(p) ((IFAPI_OBJECT *)p)
147
150typedef struct _IFAPI_OBJECT {
151 /* TSS2_OBJECT MUST GO FIRST. In C pointer of first element
152 * is equal to pointer of base type, use this to hide data by
153 * only passing pointer to public in callbacks, however, internal
154 * FAPI code can do a simple upcast it back to the original.
155 *
156 * **NOTE**: One could use offset of, and play the same trick
157 * the linux kernel linked list uses with container_of, but
158 * since offsetof isn't C99, we won't use it here.
159 */
160 TSS2_OBJECT public;
161 TPMS_POLICY *policy;
162 IFAPI_OBJECT_TYPE_CONSTANT objectType;
164 TPMI_YES_NO system;
166 enum IFAPI_AUTHORIZATION_STATE authorization_state;
167 enum IFAPI_IO_STATE state;
168 const char *rel_path;
171
172TSS2_RC
173ifapi_check_valid_path(const char *path);
174
175TSS2_RC
177 IFAPI_KEYSTORE *keystore,
178 const char *config_systemdir,
179 const char *config_userdir,
180 const char *config_defaultprofile);
181
182TSS2_RC
184 IFAPI_KEYSTORE *keystore,
185 IFAPI_IO *io,
186 const char *path);
187
188TSS2_RC
189ifapi_keystore_load_finish(
190 IFAPI_KEYSTORE *keystore,
191 IFAPI_IO *io,
192 IFAPI_OBJECT *object);
193
194TSS2_RC
196 IFAPI_KEYSTORE *keystore,
197 const char *path,
198 const IFAPI_OBJECT *object);
199
200TSS2_RC
202 IFAPI_KEYSTORE *keystore,
203 IFAPI_IO *io,
204 const char *path,
205 const IFAPI_OBJECT *object);
206
207TSS2_RC
208ifapi_keystore_store_finish(
209 IFAPI_IO *io);
210
211TSS2_RC
213 IFAPI_KEYSTORE *keystore,
214 const char *searchpath,
215 char ***results,
216 size_t *numresults);
217
218TSS2_RC
220 IFAPI_KEYSTORE *keystore,
221 char *path);
222
223TSS2_RC
225 IFAPI_KEYSTORE *keystore,
226 const char *dir_name);
227
228TSS2_RC
230 IFAPI_KEYSTORE *keystore,
231 IFAPI_IO *io,
232 TPM2B_NAME *name,
233 char **found_path);
234
235TSS2_RC
237 IFAPI_KEYSTORE *keystore,
238 IFAPI_IO *io,
239 TPM2B_NV_PUBLIC *nv_public,
240 char **found_path);
241
242TSS2_RC
243ifapi_keystore_check_overwrite(
244 IFAPI_KEYSTORE *keystore,
245 const char *path);
246
247TSS2_RC
248ifapi_keystore_check_writeable(
249 IFAPI_KEYSTORE *keystore,
250 const char *path);
251
252TSS2_RC
254 IFAPI_KEY * dest,
255 const IFAPI_KEY * src);
256
257TSS2_RC
259 IFAPI_HIERARCHY * dest,
260 const IFAPI_HIERARCHY * src);
261
262TSS2_RC
264 IFAPI_OBJECT * dest,
265 const IFAPI_OBJECT * src);
266
267TSS2_RC
269 IFAPI_OBJECT * dest,
270 const IFAPI_OBJECT * src);
271
272
274 IFAPI_KEY * key);
275
277 IFAPI_EXT_PUB_KEY * key);
278
280 IFAPI_HIERARCHY * hierarchy);
281
283 IFAPI_NV * nv);
284
286 IFAPI_DUPLICATE * duplicate);
287
288void ifapi_cleanup_ifapi_key_search(
289 IFAPI_KEY_SEARCH * key_search);
290
292 IFAPI_KEYSTORE * keystore);
293
294void
296 IFAPI_OBJECT *object);
297
298TSS2_RC
299ifapi_check_provisioned(
300 IFAPI_KEYSTORE *keystore,
301 const char *rel_path,
302 bool *ok);
303
304#endif /* IFAPI_KEYSTORE_H */
uint32_t ESYS_TR
Definition tss2_esys.h:16
TSS2_RC ifapi_copy_ifapi_key_object(IFAPI_OBJECT *dest, const IFAPI_OBJECT *src)
Definition ifapi_keystore.c:1638
TSS2_RC ifapi_keystore_search_obj(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, TPM2B_NAME *name, char **found_path)
Definition ifapi_keystore.c:1244
TSS2_RC ifapi_keystore_object_does_not_exist(IFAPI_KEYSTORE *keystore, const char *path, const IFAPI_OBJECT *object)
Definition ifapi_keystore.c:753
TSS2_RC ifapi_copy_ifapi_key(IFAPI_KEY *dest, const IFAPI_KEY *src)
Definition ifapi_keystore.c:1455
TSS2_RC ifapi_keystore_load_async(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, const char *path)
Definition ifapi_keystore.c:564
TSS2_RC ifapi_keystore_delete(IFAPI_KEYSTORE *keystore, char *path)
Definition ifapi_keystore.c:959
TSS2_RC ifapi_keystore_remove_directories(IFAPI_KEYSTORE *keystore, const char *dir_name)
Definition ifapi_keystore.c:1042
TSS2_RC ifapi_keystore_search_nv_obj(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, TPM2B_NV_PUBLIC *nv_public, char **found_path)
Definition ifapi_keystore.c:1282
TSS2_RC ifapi_keystore_list_all(IFAPI_KEYSTORE *keystore, const char *searchpath, char ***results, size_t *numresults)
Definition ifapi_keystore.c:920
TSS2_RC ifapi_keystore_initialize(IFAPI_KEYSTORE *keystore, const char *config_systemdir, const char *config_userdir, const char *config_defaultprofile)
Definition ifapi_keystore.c:423
void ifapi_cleanup_ifapi_hierarchy(IFAPI_HIERARCHY *hierarchy)
Definition ifapi_keystore.c:1573
void ifapi_cleanup_ifapi_ext_pub_key(IFAPI_EXT_PUB_KEY *key)
Definition ifapi_keystore.c:1559
void ifapi_cleanup_ifapi_object(IFAPI_OBJECT *object)
Definition ifapi_keystore.c:1726
TSS2_RC ifapi_copy_ifapi_hierarchy_object(IFAPI_OBJECT *dest, const IFAPI_OBJECT *src)
Definition ifapi_keystore.c:1686
void ifapi_cleanup_ifapi_keystore(IFAPI_KEYSTORE *keystore)
Definition ifapi_keystore.c:1616
TSS2_RC ifapi_copy_ifapi_hierarchy(IFAPI_HIERARCHY *dest, const IFAPI_HIERARCHY *src)
Definition ifapi_keystore.c:1511
TSS2_RC ifapi_keystore_store_async(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, const char *path, const IFAPI_OBJECT *object)
Definition ifapi_keystore.c:674
void ifapi_cleanup_ifapi_duplicate(IFAPI_DUPLICATE *duplicate)
Definition ifapi_keystore.c:1603
void ifapi_cleanup_ifapi_key(IFAPI_KEY *key)
Definition ifapi_keystore.c:1541
void ifapi_cleanup_ifapi_nv(IFAPI_NV *nv)
Definition ifapi_keystore.c:1586
Definition ifapi_keystore.h:150
TPMI_YES_NO system
Definition ifapi_keystore.h:164
enum IFAPI_AUTHORIZATION_STATE authorization_state
Definition ifapi_keystore.h:166
const char * rel_path
Definition ifapi_keystore.h:168
IFAPI_OBJECT_UNION misc
Definition ifapi_keystore.h:163
IFAPI_OBJECT_TYPE_CONSTANT objectType
Definition ifapi_keystore.h:162
Definition ifapi_keystore.h:85
TPM2B_PRIVATE duplicate
Definition ifapi_keystore.h:87
TPMS_POLICY * policy
Definition ifapi_keystore.h:92
TPM2B_ENCRYPTED_SECRET encrypted_seed
Definition ifapi_keystore.h:88
TPM2B_PUBLIC public_parent
Definition ifapi_keystore.h:90
char * certificate
Definition ifapi_keystore.h:91
Definition ifapi_keystore.h:53
char * pem_ext_public
Definition ifapi_keystore.h:54
char * certificate
Definition ifapi_keystore.h:55
Definition ifapi_keystore.h:61
bool authorized
Definition ifapi_keystore.h:66
TPMI_YES_NO with_auth
Definition ifapi_keystore.h:62
char * description
Definition ifapi_keystore.h:63
TPM2B_NAME name
Definition ifapi_keystore.h:67
Definition ifapi_io.h:15
Definition ifapi_keystore.h:114
char ** pathlist
Definition ifapi_keystore.h:117
size_t numPaths
Definition ifapi_keystore.h:116
size_t path_idx
Definition ifapi_keystore.h:115
Definition ifapi_keystore.h:29
char * policyInstance
Definition ifapi_keystore.h:34
UINT8_ARY serialization
Definition ifapi_keystore.h:32
TPMI_YES_NO ek_profile
Definition ifapi_keystore.h:46
UINT32 persistent_handle
Definition ifapi_keystore.h:30
TPM2B_CREATION_DATA creationData
Definition ifapi_keystore.h:36
TPMI_YES_NO delete_prohibited
Definition ifapi_keystore.h:45
TPMI_YES_NO with_auth
Definition ifapi_keystore.h:43
TPM2B_DIGEST nonce
Definition ifapi_keystore.h:48
TPM2B_DIGEST creationHash
Definition ifapi_keystore.h:35
char * description
Definition ifapi_keystore.h:38
UINT32 reset_count
Definition ifapi_keystore.h:44
TPM2B_NAME name
Definition ifapi_keystore.h:42
UINT8_ARY appData
Definition ifapi_keystore.h:39
char * certificate
Definition ifapi_keystore.h:40
TPMT_TK_CREATION creationTicket
Definition ifapi_keystore.h:37
TPMT_SIG_SCHEME signing_scheme
Definition ifapi_keystore.h:41
Definition ifapi_keystore.h:121
Definition ifapi_keystore.h:72
char * policyInstance
Definition ifapi_keystore.h:76
UINT8_ARY serialization
Definition ifapi_keystore.h:74
TPMI_YES_NO with_auth
Definition ifapi_keystore.h:79
UINT32 hierarchy
Definition ifapi_keystore.h:75
char * description
Definition ifapi_keystore.h:77
UINT8_ARY appData
Definition ifapi_keystore.h:78
char * event_log
Definition ifapi_keystore.h:80
Definition ifapi_policy_types.h:275
Definition fapi_types.h:15
Definition ifapi_keystore.h:97
IFAPI_HIERARCHY hierarchy
Definition ifapi_keystore.h:102
IFAPI_KEY key
Definition ifapi_keystore.h:99
IFAPI_EXT_PUB_KEY ext_pub_key
Definition ifapi_keystore.h:98
IFAPI_DUPLICATE key_tree
Definition ifapi_keystore.h:101
IFAPI_NV nv
Definition ifapi_keystore.h:100