tpm2-tss 4.2.0
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 <stdbool.h> // for bool
11#include <stdlib.h> // for size_t
12
13#include "fapi_types.h" // for UINT8_ARY
14#include "ifapi_io.h" // for IFAPI_IO
15#include "ifapi_policy_types.h" // for TPMS_POLICY
16#include "tss2_common.h" // for TSS2_RC, UINT32
17#include "tss2_esys.h" // for ESYS_TR
18#include "tss2_policy.h" // for TSS2_OBJECT
19#include "tss2_tpm2_types.h" // for TPMI_YES_NO, TPM2B_PUBLIC, TPM2B_DIGEST
20
21typedef UINT32 IFAPI_OBJECT_TYPE_CONSTANT;
22#define IFAPI_OBJ_NONE 0
23#define IFAPI_KEY_OBJ 1
24#define IFAPI_NV_OBJ 2
25#define IFAPI_EXT_PUB_KEY_OBJ 3
26#define IFAPI_HIERARCHY_OBJ 4
27#define IFAPI_DUPLICATE_OBJ 5
28
31typedef struct {
33 TPM2B_PUBLIC public;
35 UINT8_ARY private;
37 TPM2B_DIGEST creationHash;
38 TPM2B_CREATION_DATA creationData;
39 TPMT_TK_CREATION creationTicket;
43 TPMT_SIG_SCHEME signing_scheme;
44 TPM2B_NAME name;
45 TPMI_YES_NO with_auth;
46 UINT32 reset_count;
47 TPMI_YES_NO delete_prohibited;
48 TPMI_YES_NO ek_profile;
50 TPM2B_DIGEST nonce;
51 TPMI_YES_NO unique_init_set;
52 TPMU_PUBLIC_ID unique_init;
56
57} IFAPI_KEY;
58
61typedef struct {
64 TPM2B_PUBLIC public;
66
69typedef struct {
70 TPMI_YES_NO with_auth;
72 TPM2B_DIGEST authPolicy;
73 ESYS_TR esysHandle;
75 TPM2B_NAME name;
77
80typedef struct {
81 TPM2B_NV_PUBLIC public;
83 UINT32 hierarchy;
87 TPMI_YES_NO with_auth;
88 char *event_log;
89} IFAPI_NV;
90
93typedef struct {
94
95 TPM2B_PRIVATE duplicate;
96 TPM2B_ENCRYPTED_SECRET encrypted_seed;
97 TPM2B_PUBLIC public;
98 TPM2B_PUBLIC public_parent;
102
112
114enum FAPI_SEARCH_STATE { KSEARCH_INIT = 0, KSEARCH_SEARCH_OBJECT, KSEARCH_READ };
115
118typedef struct {
119 size_t path_idx;
120 size_t numPaths;
121 char **pathlist;
122 enum FAPI_SEARCH_STATE state;
124
125typedef struct IFAPI_KEYSTORE {
126 char *systemdir;
127 char *userdir;
128 char *defaultprofile;
129 IFAPI_KEY_SEARCH key_search;
130 const char *rel_path;
132
134enum IFAPI_AUTHORIZATION_STATE {
135 AUTH_INIT = 0,
136 AUTH_CHECK_POLICY,
137 AUTH_CREATE_SESSION,
138 AUTH_EXEC_POLICY,
139 AUTH_FLUSH_OLD_POLICY,
140 AUTH_DONE
141};
142
144enum IFAPI_IO_STATE {
145 IO_INIT = 0,
146 IO_ACTIVE,
147};
148
149#define TSS2_OBJECT_TO_IFAPI_OBJECT(p) ((IFAPI_OBJECT *)(p))
150
153typedef struct IFAPI_OBJECT {
154 /* TSS2_OBJECT MUST GO FIRST. In C pointer of first element
155 * is equal to pointer of base type, use this to hide data by
156 * only passing pointer to public in callbacks, however, internal
157 * FAPI code can do a simple upcast it back to the original.
158 *
159 * **NOTE**: One could use offset of, and play the same trick
160 * the linux kernel linked list uses with container_of, but
161 * since offsetof isn't C99, we won't use it here.
162 */
163 TSS2_OBJECT public;
164 TPMS_POLICY *policy;
165 IFAPI_OBJECT_TYPE_CONSTANT objectType;
167 TPMI_YES_NO system;
169 enum IFAPI_AUTHORIZATION_STATE
171 enum IFAPI_IO_STATE state;
172 const char *rel_path;
175
176TSS2_RC
177ifapi_check_valid_path(const char *path);
178
179TSS2_RC
181 const char *config_systemdir,
182 const char *config_userdir,
183 const char *config_defaultprofile);
184
185TSS2_RC
186ifapi_keystore_load_async(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, const char *path);
187
188TSS2_RC
189ifapi_keystore_load_finish(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, IFAPI_OBJECT *object);
190
191TSS2_RC
193 const char *path,
194 const IFAPI_OBJECT *object);
195
196TSS2_RC
198 IFAPI_IO *io,
199 const char *path,
200 const IFAPI_OBJECT *object);
201
202TSS2_RC
203ifapi_keystore_store_finish(IFAPI_IO *io);
204
205TSS2_RC
207 const char *searchpath,
208 char ***results,
209 size_t *numresults);
210
211TSS2_RC
212ifapi_keystore_delete(IFAPI_KEYSTORE *keystore, char *path);
213
214TSS2_RC
215ifapi_keystore_remove_directories(IFAPI_KEYSTORE *keystore, const char *dir_name);
216
217TSS2_RC
219 IFAPI_IO *io,
220 TPM2B_NAME *name,
221 char **found_path);
222
223TSS2_RC
225 IFAPI_IO *io,
226 TPM2B_NV_PUBLIC *nv_public,
227 char **found_path);
228
229TSS2_RC
230ifapi_keystore_check_overwrite(IFAPI_KEYSTORE *keystore, const char *path);
231
232TSS2_RC
233ifapi_keystore_check_writeable(IFAPI_KEYSTORE *keystore, const char *path);
234
235TSS2_RC
236ifapi_copy_ifapi_key(IFAPI_KEY *dest, const IFAPI_KEY *src);
237
238TSS2_RC
240
241TSS2_RC
243
244TSS2_RC
246
248
250
252
254
256
257void ifapi_cleanup_ifapi_key_search(IFAPI_KEY_SEARCH *key_search);
258
260
262
263TSS2_RC
264ifapi_check_provisioned(IFAPI_KEYSTORE *keystore, const char *rel_path, bool *ok);
265
266#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:1568
TSS2_RC ifapi_keystore_search_obj(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, TPM2B_NAME *name, char **found_path)
Definition ifapi_keystore.c:1186
TSS2_RC ifapi_keystore_object_does_not_exist(IFAPI_KEYSTORE *keystore, const char *path, const IFAPI_OBJECT *object)
Definition ifapi_keystore.c:716
TSS2_RC ifapi_copy_ifapi_key(IFAPI_KEY *dest, const IFAPI_KEY *src)
Definition ifapi_keystore.c:1381
TSS2_RC ifapi_keystore_load_async(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, const char *path)
Definition ifapi_keystore.c:539
TSS2_RC ifapi_keystore_delete(IFAPI_KEYSTORE *keystore, char *path)
Definition ifapi_keystore.c:915
TSS2_RC ifapi_keystore_remove_directories(IFAPI_KEYSTORE *keystore, const char *dir_name)
Definition ifapi_keystore.c:993
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:1221
TSS2_RC ifapi_keystore_list_all(IFAPI_KEYSTORE *keystore, const char *searchpath, char ***results, size_t *numresults)
Definition ifapi_keystore.c:875
TSS2_RC ifapi_keystore_initialize(IFAPI_KEYSTORE *keystore, const char *config_systemdir, const char *config_userdir, const char *config_defaultprofile)
Definition ifapi_keystore.c:414
void ifapi_cleanup_ifapi_hierarchy(IFAPI_HIERARCHY *hierarchy)
Definition ifapi_keystore.c:1501
void ifapi_cleanup_ifapi_ext_pub_key(IFAPI_EXT_PUB_KEY *key)
Definition ifapi_keystore.c:1487
void ifapi_cleanup_ifapi_object(IFAPI_OBJECT *object)
Definition ifapi_keystore.c:1669
TSS2_RC ifapi_copy_ifapi_hierarchy_object(IFAPI_OBJECT *dest, const IFAPI_OBJECT *src)
Definition ifapi_keystore.c:1624
void ifapi_cleanup_ifapi_keystore(IFAPI_KEYSTORE *keystore)
Definition ifapi_keystore.c:1546
TSS2_RC ifapi_copy_ifapi_hierarchy(IFAPI_HIERARCHY *dest, const IFAPI_HIERARCHY *src)
Definition ifapi_keystore.c:1438
TSS2_RC ifapi_keystore_store_async(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, const char *path, const IFAPI_OBJECT *object)
Definition ifapi_keystore.c:643
void ifapi_cleanup_ifapi_duplicate(IFAPI_DUPLICATE *duplicate)
Definition ifapi_keystore.c:1531
void ifapi_cleanup_ifapi_key(IFAPI_KEY *key)
Definition ifapi_keystore.c:1468
void ifapi_cleanup_ifapi_nv(IFAPI_NV *nv)
Definition ifapi_keystore.c:1514
Definition ifapi_keystore.h:93
TPM2B_PRIVATE duplicate
Definition ifapi_keystore.h:95
TPMS_POLICY * policy
Definition ifapi_keystore.h:100
TPM2B_ENCRYPTED_SECRET encrypted_seed
Definition ifapi_keystore.h:96
TPM2B_PUBLIC public_parent
Definition ifapi_keystore.h:98
char * certificate
Definition ifapi_keystore.h:99
Definition ifapi_keystore.h:61
char * pem_ext_public
Definition ifapi_keystore.h:62
char * certificate
Definition ifapi_keystore.h:63
Definition ifapi_keystore.h:69
bool authorized
Definition ifapi_keystore.h:74
TPMI_YES_NO with_auth
Definition ifapi_keystore.h:70
char * description
Definition ifapi_keystore.h:71
TPM2B_NAME name
Definition ifapi_keystore.h:75
Definition ifapi_io.h:17
Definition ifapi_keystore.h:118
char ** pathlist
Definition ifapi_keystore.h:121
size_t numPaths
Definition ifapi_keystore.h:120
size_t path_idx
Definition ifapi_keystore.h:119
Definition ifapi_keystore.h:31
char * policyInstance
Definition ifapi_keystore.h:36
UINT8_ARY serialization
Definition ifapi_keystore.h:34
TPMI_YES_NO ek_profile
Definition ifapi_keystore.h:48
UINT32 persistent_handle
Definition ifapi_keystore.h:32
TPM2B_CREATION_DATA creationData
Definition ifapi_keystore.h:38
bool auth_primary_set
Definition ifapi_keystore.h:53
TPMI_YES_NO delete_prohibited
Definition ifapi_keystore.h:47
TPMU_PUBLIC_ID unique_init
Definition ifapi_keystore.h:52
TPMI_YES_NO with_auth
Definition ifapi_keystore.h:45
TPM2B_DIGEST nonce
Definition ifapi_keystore.h:50
TPM2B_DIGEST creationHash
Definition ifapi_keystore.h:37
char * description
Definition ifapi_keystore.h:40
UINT32 reset_count
Definition ifapi_keystore.h:46
TPM2B_NAME name
Definition ifapi_keystore.h:44
UINT8_ARY appData
Definition ifapi_keystore.h:41
char * certificate
Definition ifapi_keystore.h:42
TPMI_YES_NO unique_init_set
Definition ifapi_keystore.h:51
TPMT_TK_CREATION creationTicket
Definition ifapi_keystore.h:39
TPMT_SIG_SCHEME signing_scheme
Definition ifapi_keystore.h:43
Definition ifapi_keystore.h:125
Definition ifapi_keystore.h:80
char * policyInstance
Definition ifapi_keystore.h:84
UINT8_ARY serialization
Definition ifapi_keystore.h:82
TPMI_YES_NO with_auth
Definition ifapi_keystore.h:87
UINT32 hierarchy
Definition ifapi_keystore.h:83
char * description
Definition ifapi_keystore.h:85
UINT8_ARY appData
Definition ifapi_keystore.h:86
char * event_log
Definition ifapi_keystore.h:88
Definition ifapi_keystore.h:153
TPMI_YES_NO system
Definition ifapi_keystore.h:167
enum IFAPI_AUTHORIZATION_STATE authorization_state
Definition ifapi_keystore.h:169
bool auth_changed
Definition ifapi_keystore.h:173
const char * rel_path
Definition ifapi_keystore.h:172
IFAPI_OBJECT_UNION misc
Definition ifapi_keystore.h:166
IFAPI_OBJECT_TYPE_CONSTANT objectType
Definition ifapi_keystore.h:165
Definition ifapi_policy_types.h:281
Definition fapi_types.h:15
Definition ifapi_keystore.h:105
IFAPI_HIERARCHY hierarchy
Definition ifapi_keystore.h:110
IFAPI_KEY key
Definition ifapi_keystore.h:107
IFAPI_EXT_PUB_KEY ext_pub_key
Definition ifapi_keystore.h:106
IFAPI_DUPLICATE key_tree
Definition ifapi_keystore.h:109
IFAPI_NV nv
Definition ifapi_keystore.h:108