tpm2-tss  master
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 
21 typedef 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
31 typedef struct {
33  TPM2B_PUBLIC public;
35  UINT8_ARY private;
37  TPM2B_DIGEST creationHash;
38  TPM2B_CREATION_DATA creationData;
39  TPMT_TK_CREATION creationTicket;
40  char *description;
42  char *certificate;
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;
57 } IFAPI_KEY;
58 
61 typedef struct {
63  char *certificate;
64  TPM2B_PUBLIC public;
66 
69 typedef struct {
70  TPMI_YES_NO with_auth;
71  char *description;
72  TPM2B_DIGEST authPolicy;
73  ESYS_TR esysHandle;
74  bool authorized;
75  TPM2B_NAME name;
77 
80 typedef struct {
81  TPM2B_NV_PUBLIC public;
83  UINT32 hierarchy;
85  char *description;
87  TPMI_YES_NO with_auth;
88  char *event_log;
89 } IFAPI_NV;
90 
93 typedef struct {
94 
95  TPM2B_PRIVATE duplicate;
96  TPM2B_ENCRYPTED_SECRET encrypted_seed;
97  TPM2B_PUBLIC public;
98  TPM2B_PUBLIC public_parent;
99  char *certificate;
102 
105 typedef union {
112 
114 enum FAPI_SEARCH_STATE { KSEARCH_INIT = 0, KSEARCH_SEARCH_OBJECT, KSEARCH_READ };
115 
118 typedef struct {
119  size_t path_idx;
120  size_t numPaths;
121  char **pathlist;
122  enum FAPI_SEARCH_STATE state;
124 
125 typedef struct IFAPI_KEYSTORE {
126  char *systemdir;
127  char *userdir;
128  char *defaultprofile;
129  IFAPI_KEY_SEARCH key_search;
130  const char *rel_path;
132 
134 enum 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 
144 enum IFAPI_IO_STATE {
145  IO_INIT = 0,
146  IO_ACTIVE,
147 };
148 
149 #define TSS2_OBJECT_TO_IFAPI_OBJECT(p) ((IFAPI_OBJECT *)(p))
150 
153 typedef 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;
174 } IFAPI_OBJECT;
175 
176 TSS2_RC
177 ifapi_check_valid_path(const char *path);
178 
179 TSS2_RC
181  const char *config_systemdir,
182  const char *config_userdir,
183  const char *config_defaultprofile);
184 
185 TSS2_RC
186 ifapi_keystore_load_async(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, const char *path);
187 
188 TSS2_RC
189 ifapi_keystore_load_finish(IFAPI_KEYSTORE *keystore, IFAPI_IO *io, IFAPI_OBJECT *object);
190 
191 TSS2_RC
193  const char *path,
194  const IFAPI_OBJECT *object);
195 
196 TSS2_RC
198  IFAPI_IO *io,
199  const char *path,
200  const IFAPI_OBJECT *object);
201 
202 TSS2_RC
203 ifapi_keystore_store_finish(IFAPI_IO *io);
204 
205 TSS2_RC
207  const char *searchpath,
208  char ***results,
209  size_t *numresults);
210 
211 TSS2_RC
212 ifapi_keystore_delete(IFAPI_KEYSTORE *keystore, char *path);
213 
214 TSS2_RC
215 ifapi_keystore_remove_directories(IFAPI_KEYSTORE *keystore, const char *dir_name);
216 
217 TSS2_RC
219  IFAPI_IO *io,
220  TPM2B_NAME *name,
221  char **found_path);
222 
223 TSS2_RC
225  IFAPI_IO *io,
226  TPM2B_NV_PUBLIC *nv_public,
227  char **found_path);
228 
229 TSS2_RC
230 ifapi_keystore_check_overwrite(IFAPI_KEYSTORE *keystore, const char *path);
231 
232 TSS2_RC
233 ifapi_keystore_check_writeable(IFAPI_KEYSTORE *keystore, const char *path);
234 
235 TSS2_RC
236 ifapi_copy_ifapi_key(IFAPI_KEY *dest, const IFAPI_KEY *src);
237 
238 TSS2_RC
240 
241 TSS2_RC
243 
244 TSS2_RC
246 
248 
250 
252 
254 
256 
257 void ifapi_cleanup_ifapi_key_search(IFAPI_KEY_SEARCH *key_search);
258 
260 
262 
263 TSS2_RC
264 ifapi_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_object_does_not_exist(IFAPI_KEYSTORE *keystore, const char *path, const IFAPI_OBJECT *object)
Definition: ifapi_keystore.c:716
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_copy_ifapi_hierarchy_object(IFAPI_OBJECT *dest, const IFAPI_OBJECT *src)
Definition: ifapi_keystore.c:1624
TSS2_RC ifapi_copy_ifapi_key(IFAPI_KEY *dest, const IFAPI_KEY *src)
Definition: ifapi_keystore.c:1381
TSS2_RC ifapi_copy_ifapi_hierarchy(IFAPI_HIERARCHY *dest, const IFAPI_HIERARCHY *src)
Definition: ifapi_keystore.c:1438
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
void ifapi_cleanup_ifapi_keystore(IFAPI_KEYSTORE *keystore)
Definition: ifapi_keystore.c:1546
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