tpm2-tss  master
TPM Software stack 2.0 TCG spec compliant implementation
fapi_int.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 #ifndef FAPI_INT_H
7 #define FAPI_INT_H
8 
9 #include <json.h> // for json_object
10 #include <stdbool.h> // for bool, false, true
11 #include <stdint.h> // for uint8_t, uint32_t, uint64_t
12 #include <stdio.h> // for size_t, NULL
13 #include <unistd.h> // for R_OK, W_OK
14 
15 #include "fapi_types.h" // for NODE_STR_T, NODE_OBJECT_T, UIN...
16 #include "ifapi_config.h" // for IFAPI_CONFIG
17 #include "ifapi_eventlog.h" // for IFAPI_EVENT, FAPI_QUOTE_INFO
18 #include "ifapi_io.h" // for IFAPI_IO
19 #include "ifapi_keystore.h" // for IFAPI_OBJECT, IFAPI_IO_STATE
20 #include "ifapi_policy_instantiate.h" // for IFAPI_POLICY_EVAL_INST_CTX
21 #include "ifapi_policy_store.h" // for IFAPI_POLICY_STORE
22 #include "ifapi_policy_types.h" // for TPMS_POLICY, TPMS_POLICYAUTHOR...
23 #include "ifapi_profiles.h" // for IFAPI_PROFILE, IFAPI_PROFILES
24 #include "tss2_common.h" // for UINT32, UINT16, BYTE, TSS2_BAS...
25 #include "tss2_esys.h" // for ESYS_TR, ESYS_TR_NONE, ESYS_CO...
26 #include "tss2_fapi.h" // for Fapi_CB_Auth, Fapi_CB_Branch
27 #include "tss2_tpm2_types.h" // for TPM2_HANDLE, TPMS_CAPABILITY_DATA
28 #include "util/aux_util.h" // for goto_if_error, TPM2_ERROR_FORMAT
29 
30 #define DEFAULT_LOG_DIR "/run/tpm2_tss"
31 #define IFAPI_PCR_LOG_FILE "pcr.log"
32 #define IFAPI_OBJECT_TYPE ".json"
33 #define IFAPI_OBJECT_FILE "object.json"
34 #define IFAPI_SRK_KEY_PATH "/HS/SRK"
35 #define IFAPI_EK_KEY_PATH "/HE/EK"
36 #define IFAPI_HS_PATH "/HS"
37 #define IFAPI_HE_PATH "/HE"
38 #define IFAPI_HN_PATH "/HN"
39 #define IFAPI_LOCKOUT_PATH "/LOCKOUT"
40 #define IFAPI_SRK_OBJECT_PATH "/HS/SRK/object.json"
41 #define IFAPI_HS_OBJECT_PATH "/HS/object.json"
42 
43 typedef UINT32 TSS2_KEY_TYPE;
44 #define TSS2_SRK 2
45 #define TSS2_EK 3
46 #define MIN_EK_CERT_HANDLE 0x1c00000
47 #define MIN_PLATFORM_CERT_HANDLE 0x01C08000
48 #define MAX_PLATFORM_CERT_HANDLE 0x01C0FFFF
49 
50 typedef UINT8 IFAPI_SESSION_TYPE;
51 #define IFAPI_SESSION_GEN_SRK 0x01
52 #define IFAPI_SESSION1 0x02
53 #define IFAPI_SESSION2 0x04
54 #define IFAPI_SESSION_USE_SRK 0x08
55 
56 #define IFAPI_POLICY_PATH "policy"
57 #define IFAPI_NV_PATH "nv"
58 #define IFAPI_EXT_PATH "ext"
59 #define IFAPI_FILE_DELIM "/"
60 #define IFAPI_LIST_DELIM ":"
61 #define IFAPI_FILE_DELIM_CHAR '/'
62 #define IFAPI_PUB_KEY_DIR "ext"
63 #define IFAPI_POLICY_DIR "policy"
64 #define IFAPI_PEM_PUBLIC_STRING "-----BEGIN PUBLIC KEY-----"
65 #define IFAPI_PEM_PRIVATE_KEY "-----BEGIN PRIVATE KEY-----"
66 #define IFAPI_PEM_RSA_PRIVATE_KEY "-----BEGIN RSA PRIVATE KEY-----"
67 #define IFAPI_PEM_ECC_PRIVATE_KEY "-----BEGIN EC PRIVATE KEY-----"
68 #define IFAPI_JSON_TAG_POLICY "policy"
69 #define IFAPI_JSON_TAG_OBJECT_TYPE "objectType"
70 #define IFAPI_JSON_TAG_DUPLICATE "public_parent"
71 
72 #define FAPI_WRITE W_OK
73 #define FAPI_READ R_OK
74 
75 #if TPM2_MAX_NV_BUFFER_SIZE > TPM2_MAX_DIGEST_BUFFER
76 #define IFAPI_MAX_BUFFER_SIZE TPM2_MAX_NV_BUFFER_SIZE
77 #else
78 #define IFAPI_MAX_BUFFER_SIZE TPM2_MAX_DIGEST_BUFFER
79 #endif
80 
81 #define IFAPI_FLUSH_PARENT true
82 #define IFAPI_NOT_FLUSH_PARENT false
83 
84 #ifndef MAX
85 #define MAX(a, b) ((a) > (b) ? (a) : (b))
86 #endif
87 
88 /* Definition of FAPI buffer for TPM2B transmission */
89 typedef struct {
90  UINT16 size;
91  BYTE buffer[IFAPI_MAX_BUFFER_SIZE];
93 
94 #define OSSL_FREE(S, TYPE) \
95  if ((S) != NULL) { \
96  TYPE##_free((void *)(S)); \
97  (S) = NULL; \
98  }
99 
100 #define FAPI_COPY_DIGEST(dest_buffer, dest_size, src, src_size) \
101  if ((src_size) > sizeof(TPMU_HA)) { \
102  return_error(TSS2_FAPI_RC_BAD_VALUE, "Digest size too large."); \
103  } \
104  memcpy(dest_buffer, (src), (src_size)); \
105  (dest_size) = src_size
106 
107 #define HASH_UPDATE(CONTEXT, TYPE, OBJECT, R, LABEL) \
108  { \
109  uint8_t buffer[sizeof(TYPE)]; \
110  size_t offset = 0; \
111  (R) = Tss2_MU_##TYPE##_Marshal(OBJECT, &buffer[0], sizeof(TYPE), &offset); \
112  goto_if_error(R, "Marshal for hash update", LABEL); \
113  (R) = ifapi_crypto_hash_update(CONTEXT, (const uint8_t *)&buffer[0], offset); \
114  goto_if_error(R, "crypto hash update", LABEL); \
115  }
116 
117 #define HASH_UPDATE_BUFFER(CONTEXT, BUFFER, SIZE, R, LABEL) \
118  R = ifapi_crypto_hash_update(CONTEXT, (const uint8_t *)(BUFFER), SIZE); \
119  goto_if_error(R, "crypto hash update", LABEL);
120 
121 #define FAPI_SYNC(r, msg, label, ...) \
122  if (base_rc(r) == TSS2_BASE_RC_TRY_AGAIN) \
123  return TSS2_FAPI_RC_TRY_AGAIN; \
124  if (r != TSS2_RC_SUCCESS) { \
125  LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ##__VA_ARGS__); \
126  goto label; \
127  }
128 
129 #define ENC_SESSION_IF_POLICY(auth_session) \
130  ((auth_session) == ESYS_TR_PASSWORD || (auth_session) == ESYS_TR_NONE \
131  || (auth_session) == context->session2 || !context->session2) \
132  ? ESYS_TR_NONE \
133  : context->session2
134 
136 enum IFAPI_GET_CERT_STATE {
137  GET_CERT_INIT = 0,
138  GET_CERT_WAIT_FOR_GET_CAP,
139  GET_CERT_GET_CERT_NV,
140  GET_CERT_GET_CERT_NV_FINISH,
141  GET_CERT_GET_CERT_READ_PUBLIC,
142  GET_CERT_GET_CERT_READ_HIERARCHY,
143  GET_CERT_READ_CERT
144 };
145 
147 enum IFAPI_CLEANUP_STATE { CLEANUP_INIT = 0, CLEANUP_SESSION1, CLEANUP_SESSION2, CLEANUP_SRK };
148 
150 enum IFAPI_READ_NV_PUBLIC_STATE {
151  READ_NV_PUBLIC_INIT = 0,
152  READ_NV_PUBLIC_GET_ESYS_TR,
153  READ_NV_PUBLIC_GET_PUBLIC
154 };
155 
157 enum IFAPI_CHECK_NV_STATE {
158  CHECK_NV_INIT = 0,
159  CHECK_NV_WAIT_FOR_GET_CAP,
160  CHECK_NV_GET_ESYS_HANDLE,
161  CHECK_NV_WAIT_FOR_READ_PUBLIC
162 };
163 
165 enum IFAPI_INSTANTIATE_POLICIES_STATE {
166  POLICIES_INSTANTIATION_INIT = 0,
167  POLICIES_INSTANTIATION_WAIT
168 };
169 
170 typedef struct {
171  enum IFAPI_INSTANTIATE_POLICIES_STATE state;
172  size_t pol_idx;
173  TPMS_POLICY *policies[5];
175 
176 #define IFAPI_MAX_CAP_INFO 17
177 
178 typedef struct {
179  char *description;
180  TPMS_CAPABILITY_DATA *capability;
182 
183 typedef struct {
184  char *fapi_version;
186  IFAPI_CAP_INFO cap[IFAPI_MAX_CAP_INFO];
187 } IFAPI_INFO;
188 
191 typedef struct {
192  TPMI_YES_NO system;
194  TPMI_YES_NO persistent;
196  TPM2B_PUBLIC public;
197  UINT16 unique_zero;
201 
204 typedef struct {
205  TPMI_YES_NO system;
207  TPMI_RH_HIERARCHY hierarchy;
208  char *description;
209  TPMS_NV_PUBLIC public;
211 
213 enum FAPI_STATE_NV_READ {
214  NV_READ_INIT = 0,
215  NV_READ_AUTHORIZE,
216  NV_READ_AUTHORIZE2,
217  NV_READ_AUTH_SENT,
218  NV_READ_CHECK_HANDLE,
219  NV_READ_GET_CAPABILITY,
220  NV_READ_GET_ESYS_HANDLE,
221  NV_READ_GET_NV_PUBLIC,
222  NV_READ_WRITE_CHANGED_OBJECT
223 };
224 
226 enum FAPI_STATE_NV_WRITE {
227  NV2_WRITE_INIT = 0,
228  NV2_WRITE_READ,
229  NV2_WRITE_WAIT_FOR_SESSSION,
230  NV2_WRITE_NULL_AUTH_SENT,
231  NV2_WRITE_AUTH_SENT,
232  NV2_WRITE_WRITE_PREPARE,
233  NV2_WRITE_WRITE,
234  NV2_WRITE_AUTHORIZE,
235  NV2_WRITE_AUTHORIZE2
236 };
237 
240 typedef struct {
241  char *nvPath;
242  char *policyPath;
243  TPM2B_NV_PUBLIC public;
246  TPM2_HANDLE tpm_handle;
247  size_t numBytes;
248  UINT16 bytesRequested;
249  UINT16 offset;
250  size_t data_idx;
251  const uint8_t *data;
252  uint8_t *nv_buffer;
253  uint8_t *rdata;
254  size_t size;
257  TPM2B_AUTH auth;
261  uint64_t bitmap;
262  IFAPI_NV_TEMPLATE public_templ;
264  enum FAPI_STATE_NV_READ nv_read_state;
265  enum FAPI_STATE_NV_WRITE nv_write_state;
266  uint8_t *write_data;
267  char *logData;
268  json_object *jso_event_log;
269  TPMI_RH_NV_INDEX maxNvIndex;
271  TPML_DIGEST_VALUES digests;
272  bool skip_policy_computation;
273  enum IFAPI_CHECK_NV_STATE nv_check;
274  TPMS_CAPABILITY_DATA *capability; /* TPM capability data to check nv index */
275 } IFAPI_NV_Cmds;
276 
279 typedef struct {
280  TPMS_CAPABILITY_DATA *capability; /* TPM capability data to check available algs */
281  char **pathlist;
282  size_t numPaths;
285  size_t primary_idx;
286  UINT32 nv_cap_idx;
287  size_t path_idx;
290 
292 enum FAPI_NV_CREATE {
293  CREATE_NV_CHECK_NV_OBJECTS_INIT = 0,
294  CREATE_NV_CHECK_NV_OBJECTS,
295  CREATE_NV_READ_NV_OBJECT,
296  CREATE_NV_GET_TPM_NV_HANDLES,
297  CREATE_NV_GET_TPM_NV_HANDLES2,
298  CREATE_NV_CHECK_NV_INDEX,
299  CREATE_NV_NV_GET_ESYS_HANDLE,
300  CREATE_NV_NV_WAIT_FOR_READ_PUBLIC,
301  CREATE_NV_WRITE
302 };
303 
306 typedef struct {
307  enum FAPI_NV_CREATE state;
308  TPMS_CAPABILITY_DATA *capability;
309  char **pathlist;
310  size_t numPaths;
311  UINT32 nv_cap_idx;
312  size_t path_idx;
313  TPMI_RH_NV_INDEX *nv_idx_list;
314  TPMI_YES_NO more_data;
315  TPM2_HANDLE nv_index;
318  char *path;
320 
323 typedef struct {
324  TPML_DIGEST_VALUES digest_list;
325  TPML_DIGEST_VALUES *event_digests;
327  TPML_PCR_SELECTION pcr_selection;
328  TPML_PCR_SELECTION *pcr_selection_out;
329  UINT32 update_count;
330  TPML_DIGEST *pcrValues; /* The values returned by PCR_Read */
331  TPM2_HANDLE pcrIndex;
332  TPMI_ALG_HASH hashAlg;
333  const char *keyPath;
336  TPMS_CAPABILITY_DATA *capabilityData; /* TPM capability data to check available algs */
337  uint32_t *pcrList;
338  size_t pcrListSize;
339  TPM2B_DATA qualifyingData;
340  uint8_t const *eventData;
341  TPM2B_EVENT event;
342  size_t eventDataSize;
343  uint32_t const *hashAlgs;
344  uint32_t *hashAlgs2;
345  size_t numHashAlgs;
346  char const *quoteInfo;
347  char *certificate;
348  TPM2B_ATTEST *tpm_quoted;
349  TPMT_SIGNATURE *tpm_signature;
350  uint8_t *signature;
351  size_t signatureSize;
352  char const *logData;
353  char *pcrLog;
354  IFAPI_EVENT pcr_event;
355  json_object *event_list;
356  FAPI_QUOTE_INFO fapi_quote_info;
357  uint8_t *pcrValue;
358  size_t pcrValueSize;
359  char *event_log_file;
360 } IFAPI_PCR;
361 
364 typedef struct {
365  char *description;
368  char *object_path;
369  json_object *jso;
370  char *jso_string;
372 
375 typedef struct {
376  size_t numBytes;
377  size_t idx;
378  UINT16 bytesRequested;
379  uint8_t *data;
380  uint8_t *ret_data;
382 
385 typedef struct {
386  const char *pem_cert;
387  char *pem_cert_dup;
388  const char *key_path;
392 
394 enum IFAPI_KEY_CREATE_STATE {
395  KEY_CREATE_INIT = 0,
396  KEY_CREATE_WAIT_FOR_SESSION,
397  KEY_CREATE_WAIT_FOR_PARENT,
398  KEY_CREATE_AUTH_SENT,
399  KEY_CREATE_WAIT_FOR_LOAD_AUTHORIZATION,
400  KEY_CREATE_WAIT_FOR_KEY,
401  KEY_CREATE_WAIT_FOR_HIERARCHY,
402  KEY_CREATE_AUTHORIZE_HIERARCHY,
403  KEY_CREATE_WAIT_FOR_EVICT_CONTROL,
404  KEY_CREATE_WRITE_PREPARE,
405  KEY_CREATE_WRITE,
406  KEY_CREATE_FLUSH1,
407  KEY_CREATE_FLUSH2,
408  KEY_CREATE_CALCULATE_POLICY,
409  KEY_CREATE_PRIMARY_CALCULATE_POLICY,
410  KEY_CREATE_WAIT_FOR_AUTHORIZATION,
411  KEY_CREATE_CLEANUP,
412  KEY_CREATE_WAIT_FOR_RANDOM,
413  KEY_CREATE_PRIMARY_INIT,
414  KEY_CREATE_PRIMARY_WAIT_FOR_SESSION,
415  KEY_CREATE_PRIMARY_WAIT_FOR_HIERARCHY,
416  KEY_CREATE_PRIMARY_WAIT_FOR_AUTHORIZE1,
417  KEY_CREATE_PRIMARY_WAIT_FOR_AUTHORIZE2,
418  KEY_CREATE_PRIMARY_WAIT_FOR_PRIMARY,
419  KEY_CREATE_PRIMARY_WAIT_FOR_EVICT_CONTROL,
420  KEY_CREATE_PRIMARY_FLUSH,
421  KEY_CREATE_PRIMARY_WRITE_PREPARE,
422  KEY_CREATE_PRIMARY_WRITE,
423  KEY_CREATE_PRIMARY_CLEANUP
424 };
425 
428 typedef struct {
429  enum IFAPI_KEY_CREATE_STATE state;
430  const char *keyPath;
435  TPM2B_PUBLIC public;
437  TPM2B_SENSITIVE_CREATE inSensitive;
438  TPM2B_DATA outsideInfo;
439  TPML_PCR_SELECTION creationPCR;
440  ESYS_TR handle;
441  const char *authValue;
442  const char *policyPath;
443  const IFAPI_PROFILE *profile;
447 
450 typedef struct {
451  char const *keyPath;
452  uint8_t const *in_data;
453  size_t in_dataSize;
456  size_t numBytes;
457  size_t decrypt;
458  UINT16 bytesRequested;
459  TPMT_RSA_DECRYPT rsa_scheme;
460  ESYS_TR object_handle;
461  char *policy_path;
462  ESYS_TR auth_session;
463  const IFAPI_PROFILE *profile;
464  uint8_t *plainText;
465  size_t plainTextSize;
466  uint8_t *cipherText;
467  size_t cipherTextSize;
469 
471 enum FAPI_SIGN_STATE {
472  SIGN_INIT = 0,
473  SIGN_WAIT_FOR_SESSION,
474  SIGN_WAIT_FOR_KEY,
475  SIGN_AUTH_SENT,
476  SIGN_WAIT_FOR_FLUSH
477 };
478 
481 typedef struct {
482  enum FAPI_SIGN_STATE state;
483  const char *keyPath;
485  TPM2B_DIGEST digest;
486  uint8_t *data;
487  size_t data_size;
488  size_t offset;
489  size_t chunk;
490  TPMT_SIG_SCHEME scheme;
492  TPMT_SIGNATURE *tpm_signature;
493  TPMI_YES_NO decrypt;
494  TPMT_SIGNATURE *signature;
495  char const *padding;
496  char *certificate;
497  uint8_t *ret_signature;
498  size_t signatureSize;
499  char *publicKey;
500  TPMT_TK_HASHCHECK *validation;
503 
506 typedef struct {
507  const char *keyPath;
509  TPM2B_SENSITIVE_DATA *unseal_data;
510 } IFAPI_Unseal;
511 
514 typedef struct {
515  TPMS_CAPABILITY_DATA *capability_data;
516  TPMS_CAPABILITY_DATA *fetched_data;
517  size_t idx_info_cap;
518  IFAPI_INFO info_obj;
519  UINT32 property_count;
520  UINT32 property;
521 } IFAPI_GetInfo;
522 
524 enum IFAPI_HIERACHY_AUTHORIZATION_STATE {
525  HIERARCHY_CHANGE_AUTH_INIT = 0,
526  HIERARCHY_CHANGE_AUTH_NULL_AUTH_SENT,
527  HIERARCHY_CHANGE_AUTH_AUTH_SENT
528 };
529 
531 enum IFAPI_HIERACHY_POLICY_AUTHORIZATION_STATE {
532  HIERARCHY_CHANGE_POLICY_INIT = 0,
533  HIERARCHY_CHANGE_POLICY_NULL_AUTH_SENT,
534  HIERARCHY_CHANGE_POLICY_AUTHORIZE,
535  HIERARCHY_CHANGE_POLICY_AUTH_SENT
536 };
537 
540 typedef struct {
541  const char *entityPath;
544  const char *authValue;
545  TPM2B_AUTH newAuthValue;
546  TPM2B_PRIVATE *newPrivate;
551  char **pathlist;
552  size_t numPaths;
555 
558 typedef struct {
559  const char *policyPath;
560  const char *signingKeyPath;
561  TPM2B_DIGEST policyRef;
562  TPMS_POLICYAUTHORIZATION authorization;
564 
567 typedef struct {
568  const char *policyPath;
569  TPMI_ALG_HASH *hash_alg;
570  size_t hash_size;
571  size_t digest_idx;
573 
576 typedef struct {
584  TPM2B_PUBLIC public;
585  char **pathlist;
586  size_t numPaths;
588  size_t hiearchy_idx;
589  size_t path_idx;
591  TPM2B_SENSITIVE_CREATE inSensitive;
592  TPM2B_DATA outsideInfo;
593  TPML_PCR_SELECTION creationPCR;
594  ESYS_TR handle;
595  const char *authValueLockout;
596  const char *authValueEh;
597  const char *policyPathEh;
598  const char *authValueSh;
599  const char *policyPathSh;
600  size_t digest_idx;
601  size_t hash_size;
602  TPM2_HANDLE cert_nv_idx;
603  TPM2B_NV_PUBLIC *nvPublic;
604  ESYS_TR esys_nv_cert_handle;
605  char *pem_cert;
606  TPM2_ALG_ID cert_key_type;
607  size_t cert_count;
608  size_t cert_idx;
609  TPMS_CAPABILITY_DATA *capabilityData;
610  IFAPI_OBJECT hierarchy_object;
611  TPM2B_AUTH hierarchy_auth;
612  TPM2B_DIGEST policy_digest;
613  char *intermed_crt;
614  char *root_crt;
615  TPMA_PERMANENT auth_state;
616  ESYS_TR srk_esys_handle;
617  ESYS_TR ek_esys_handle;
618  ESYS_TR srk_tpm_handle;
619  ESYS_TR ek_tpm_handle;
620  bool srk_exists;
621  TPM2_HANDLE template_nv_index;
622  TPM2_HANDLE nonce_nv_index;
623  bool cert_chain_exists;
624  uint8_t *certs;
625  size_t cert_list_size;
626  IFAPI_POLICIES policies;
627 
629 
632 typedef struct {
633  char *path;
635  IFAPI_OBJECT pkey_object;
636  TPM2B_SENSITIVE_CREATE inSensitive;
637  TPM2B_DATA outsideInfo;
638  TPML_PCR_SELECTION creationPCR;
639  ESYS_TR handle;
640  TPMI_DH_PERSISTENT persistent_handle;
641  TPMS_CAPABILITY_DATA *capabilityData;
643 
646 typedef struct {
647  const char *keyPath;
648  uint8_t const *signature;
649  size_t signatureSize;
650  uint8_t const *digest;
651  size_t digestSize;
652  IFAPI_OBJECT key_object;
654 
656 enum IFAPI_STATE_POLICY {
657  POLICY_INIT = 0,
658  POLICY_READ,
659  POLICY_READ_FINISH,
660  POLICY_INSTANTIATE_PREPARE,
661  POLICY_INSTANTIATE,
662  POLICY_EXECUTE_PREPARE,
663  POLICY_EXECUTE,
664  POLICY_FLUSH
665 };
666 
669 
671 enum FAPI_CREATE_SESSION_STATE { CREATE_SESSION_INIT = 0, CREATE_SESSION, WAIT_FOR_CREATE_SESSION };
672 
675 typedef struct {
676  enum IFAPI_STATE_POLICY state;
677  struct TPMS_POLICY policy;
678  size_t digest_idx;
679  size_t hash_size;
680  char **pathlist;
681  TPMI_ALG_HASH hash_alg;
685  IFAPI_POLICYUTIL_STACK *util_current_policy;
692  enum FAPI_CREATE_SESSION_STATE create_session_state;
693  char *path;
696 
698 enum IFAPI_STATE_FILE_SEARCH { FSEARCH_INIT = 0, FSEARCH_READ, FSEARCH_OBJECT };
699 
702 typedef struct {
703  enum IFAPI_STATE_FILE_SEARCH state;
704  char **pathlist;
705  size_t path_idx;
706  size_t numPaths;
707  char *current_path;
709 
711 enum FAPI_STATE_PREPARE_LOAD_KEY {
712  PREPARE_LOAD_KEY_INIT = 0,
713  PREPARE_LOAD_KEY_WAIT_FOR_SESSION,
714  PREPARE_LOAD_KEY_INIT_KEY,
715  PREPARE_LOAD_KEY_WAIT_FOR_KEY
716 };
717 
719 enum FAPI_STATE_LOAD_KEY {
720  LOAD_KEY_GET_PATH = 0,
721  LOAD_KEY_READ_KEY,
722  LOAD_KEY_WAIT_FOR_PRIMARY,
723  LOAD_KEY_LOAD_KEY,
724  LOAD_KEY_AUTH,
725  LOAD_KEY_AUTHORIZE
726 };
727 
730 typedef struct {
731  char const *pathOfKeyToDuplicate;
733  TPM2B_PUBLIC public_parent;
738  struct TPMS_POLICY policy;
739  ESYS_TR handle_ext_key;
740  char *exportedData;
742 
745 typedef struct {
746  char const *path;
750  TPMI_ALG_HASH hashAlg;
751  size_t profile_idx;
756 
759 typedef struct {
760  IFAPI_OBJECT object;
761  TPM2B_NAME parent_name;
762  IFAPI_OBJECT *parent_object;
763  IFAPI_OBJECT new_object;
764  char *parent_path;
765  char *out_path;
766  TPM2B_PRIVATE *private;
767  char *jso_string;
768  const IFAPI_PROFILE *profile;
770  const char *ossl_priv;
771  TPM2B_SENSITIVE sensitive;
773 
776 typedef struct {
777  enum FAPI_STATE_LOAD_KEY state;
778  enum FAPI_STATE_PREPARE_LOAD_KEY prepare_state;
780  NODE_OBJECT_T *key_list;
781  IFAPI_OBJECT auth_object;
782  size_t position;
783  ESYS_TR handle;
784  ESYS_TR parent_handle;
785  bool parent_handle_persistent;
786  IFAPI_OBJECT *key_object;
787  char *key_path;
788  char const *path;
789 } IFAPI_LoadKey;
790 
793 typedef struct {
794  bool is_key;
796  ESYS_TR new_object_handle;
797  TPM2_HANDLE permanentHandle;
800  char *path;
802  char **pathlist;
803  size_t numPaths;
804  size_t path_idx;
806 
809 typedef struct {
810  uint8_t type;
811  uint8_t *data;
812  size_t length;
813  bool is_key;
815  ESYS_TR new_object_handle;
816  TPM2_HANDLE permanentHandle;
819  char *path;
823 
826 typedef struct {
827  const char *searchPath;
829 
835 typedef union {
836  IFAPI_Provision Provision;
837  IFAPI_Key_Create Key_Create;
838  IFAPI_Key_SetCertificate Key_SetCertificate;
839  IFAPI_Entity_ChangeAuth Entity_ChangeAuth;
840  IFAPI_Entity_Delete Entity_Delete;
841  IFAPI_GetEsysBlob GetEsysBlob;
842  IFAPI_Entities_List Entities_List;
843  IFAPI_Key_VerifySignature Key_VerifySignature;
844  IFAPI_Data_EncryptDecrypt Data_EncryptDecrypt;
845  IFAPI_PCR pcr;
846  IFAPI_INITIALIZE Initialize;
847  IFAPI_Path_SetDescription path_set_info;
848  IFAPI_Fapi_AuthorizePolicy Policy_AuthorizeNewPolicy;
849  IFAPI_api_WriteAuthorizeNv WriteAuthorizeNV;
850  IFAPI_ExportKey ExportKey;
851  IFAPI_ImportKey ImportKey;
852  IFAPI_Unseal Unseal;
853  IFAPI_GetInfo GetInfo;
854  IFAPI_ExportPolicy ExportPolicy;
856 
858 enum FAPI_STATE_PRIMARY {
859  PRIMARY_INIT = 0,
860  PRIMARY_READ_KEY,
861  PRIMARY_READ_HIERARCHY,
862  PRIMARY_READ_HIERARCHY_FINISH,
863  PRIMARY_AUTHORIZE_HIERARCHY,
864  PRIMARY_GET_AUTH_VALUE,
865  PRIMARY_WAIT_FOR_PRIMARY,
866  PRIMARY_HAUTH_SENT,
867  PRIMARY_CREATED,
868  PRIMARY_VERIFY_PERSISTENT,
869  PRIMARY_GET_CAP
870 };
871 
873 enum FAPI_STATE_SESSION {
874  SESSION_INIT = 0,
875  SESSION_WAIT_FOR_PRIMARY,
876  SESSION_CREATE_SESSION,
877  SESSION_WAIT_FOR_SESSION1,
878  SESSION_WAIT_FOR_SESSION2
879 };
880 
882 enum FAPI_STATE_GET_RANDOM { GET_RANDOM_INIT = 0, GET_RANDOM_SENT };
883 
885 enum FAPI_FLUSH_STATE { FLUSH_INIT = 0, WAIT_FOR_FLUSH };
886 
888 enum FAPI_STATE {
889  FAPI_STATE_INIT = 0,
892  FAPI_STATE_INTERNALERROR,
894  INITIALIZE_READ,
895  INITIALIZE_INIT_TCTI,
896  INITIALIZE_GET_CAP,
897  INITIALIZE_WAIT_FOR_CAP,
898  INITIALIZE_READ_PROFILE,
899  INITIALIZE_READ_PROFILE_INIT,
900  INITIALIZE_READ_TIME,
901  INITIALIZE_CHECK_NULL_PRIMARY,
902  INITIALIZE_READ_NULL_PRIMARY,
903  INITIALIZE_CHECK_EXISTING_NV,
904  PROVISION_WAIT_FOR_GET_CAP_AUTH_STATE,
905  PROVISION_WAIT_FOR_GET_CAP0,
906  PROVISION_WAIT_FOR_GET_CAP1,
907  PROVISION_INIT_GET_CAP2,
908  PROVISION_WAIT_FOR_GET_CAP2,
909  PROVISION_GET_CERT_NV,
910  PROVISION_GET_CERT_NV_FINISH,
911  PROVISION_GET_CERT_READ_PUBLIC,
912  PROVISION_READ_CERT,
913  PROVISION_READ_CERT_CHAIN,
914  PROVISION_PREPARE_READ_ROOT_CERT,
915  PROVISION_READ_ROOT_CERT,
916  PROVISION_PREPARE_READ_INT_CERT,
917  PROVISION_READ_INT_CERT,
918  PROVISION_INIT,
919  PROVISION_INIT_SRK,
920  PROVISION_WAIT_FOR_EK_SESSION,
921  PROVISION_WAIT_FOR_SRK_SESSION,
922  PROVISION_AUTH_EK_NO_AUTH_SENT,
923  PROVISION_AUTH_EK_AUTH_SENT,
924  PROVISION_AUTH_SRK_NO_AUTH_SENT,
925  PROVISION_AUTH_SRK_AUTH_SENT,
926  PROVISION_CLEAN_EK_SESSION,
927  PROVISION_CLEAN_SRK_SESSION,
928  PROVISION_EK_WRITE_PREPARE,
929  PROVISION_EK_WRITE,
930  PROVISION_EK_CHECK_CERT,
931  PROVISION_SRK_WRITE_PREPARE,
932  PROVISION_SRK_WRITE,
933  PROVISION_WAIT_FOR_EK_PERSISTENT,
934  PROVISION_WAIT_FOR_SRK_PERSISTENT,
935  PROVISION_CHANGE_LOCKOUT_AUTH,
936  PROVISION_CHANGE_EH_CHECK,
937  PROVISION_CHANGE_EH_AUTH,
938  PROVISION_CHANGE_SH_CHECK,
939  PROVISION_CHANGE_SH_AUTH,
940  PROVISION_EH_CHANGE_POLICY,
941  PROVISION_SH_CHANGE_POLICY,
942  PROVISION_LOCKOUT_CHANGE_POLICY,
943  PROVISION_FINISHED,
944  PROVISION_WRITE_SH,
945  PROVISION_WRITE_EH,
946  PROVISION_PREPARE_NULL,
947  PROVISION_WRITE_NULL,
948  PROVISION_WRITE_LOCKOUT,
949  PROVISION_WRITE_LOCKOUT_PARAM,
950  PROVISION_PREPARE_LOCKOUT_PARAM,
951  PROVISION_AUTHORIZE_LOCKOUT,
952  PROVISION_FLUSH_SRK,
953  PROVISION_FLUSH_EK,
954  PROVISION_CHECK_FOR_VENDOR_CERT,
955  PROVISION_GET_VENDOR,
956  PROVISION_GET_HIERARCHIES,
957  PROVISION_READ_HIERARCHIES,
958  PROVISION_READ_HIERARCHY,
959  PROVISION_WRITE_HIERARCHIES,
960  PROVISION_WRITE_HIERARCHY,
961  PROVISION_PREPARE_GET_CAP_AUTH_STATE,
962  PROVISION_SRK_GET_PERSISTENT_NAME,
963  PROVISION_CHECK_SRK_EVICT_CONTROL,
964  PROVISION_AUTHORIZE_HS_FOR_EK_EVICT,
965  PROVISION_PREPARE_EK_EVICT,
966  PROVISION_READ_EK_TEMPLATE,
967  PROVISION_READ_EK_NONCE,
968  PROVISION_CHECK_EXISTING_NV,
969 
970  KEY_CREATE,
971  KEY_CREATE_PRIMARY,
972 
973  CREATE_SEAL,
974 
975  KEY_SET_CERTIFICATE_READ,
976  KEY_SET_CERTIFICATE_WRITE,
977 
978  KEY_GET_CERTIFICATE_READ,
979 
980  GET_RANDOM_WAIT_FOR_SESSION,
981  GET_RANDOM_WAIT_FOR_RANDOM,
982  GET_RANDOM_CLEANUP,
983 
984  NV_CREATE_READ_PROFILE,
985  NV_CREATE_READ_HIERARCHY,
986  NV_CREATE_AUTHORIZE_HIERARCHY,
987  NV_CREATE_GET_INDEX,
988  NV_CREATE_FIND_INDEX,
989  NV_CREATE_WAIT_FOR_SESSION,
990 
991  NV_CREATE_AUTH_SENT,
992  NV_CREATE_WRITE,
993  NV_CREATE_CALCULATE_POLICY,
994  NV_CREATE_CHECK_EXISTING,
995  NV_CREATE_INDEX,
996  NV_CREATE_SERIALIZE,
997 
998  NV_WRITE_READ,
999  NV_WRITE_WRITE,
1000  NV_WRITE_CLEANUP,
1001 
1002  NV_EXTEND_READ,
1003  NV_EXTEND_WAIT_FOR_SESSION,
1004  NV_EXTEND_AUTHORIZE,
1005  NV_EXTEND_AUTH_SENT,
1006  NV_EXTEND_WRITE,
1007  NV_EXTEND_CLEANUP,
1008 
1009  NV_INCREMENT_READ,
1010  NV_INCREMENT_WAIT_FOR_SESSION,
1011  NV_INCREMENT_AUTHORIZE,
1012  NV_INCREMENT_AUTH_SENT,
1013  NV_INCREMENT_WRITE,
1014  NV_INCREMENT_CLEANUP,
1015 
1016  NV_SET_BITS_READ,
1017  NV_SET_BITS_WAIT_FOR_SESSION,
1018  NV_SET_BITS_AUTHORIZE,
1019  NV_SET_BITS_AUTH_SENT,
1020  NV_SET_BITS_WRITE,
1021  NV_SET_BITS_CLEANUP,
1022 
1023  NV_READ_READ,
1024  NV_READ_WAIT,
1025  NV_READ_WAIT_FOR_SESSION,
1026  NV_READ_CLEANUP,
1027 
1028  ENTITY_DELETE_GET_FILE,
1029  ENTITY_DELETE_READ,
1030  ENTITY_DELETE_WAIT_FOR_SESSION,
1031  ENTITY_DELETE_NULL_AUTH_SENT_FOR_KEY,
1032  ENTITY_DELETE_AUTH_SENT_FOR_KEY,
1033  ENTITY_DELETE_NULL_AUTH_SENT_FOR_NV,
1034  ENTITY_DELETE_AUTH_SENT_FOR_NV,
1035  ENTITY_DELETE_KEY,
1036  ENTITY_DELETE_KEY_WAIT_FOR_HIERARCHY,
1037  ENTITY_DELETE_KEY_WAIT_FOR_AUTHORIZATION,
1038  ENTITY_DELETE_AUTHORIZE_NV,
1039  ENTITY_DELETE_FILE,
1040  ENTITY_DELETE_POLICY,
1041  ENTITY_DELETE_REMOVE_DIRS,
1042  ENTITY_DELETE_CLEANUP,
1043  ENTITY_DELETE_READ_HIERARCHY,
1044 
1045  GET_ESYS_BLOB_GET_FILE,
1046  GET_ESYS_BLOB_READ,
1047  GET_ESYS_BLOB_NULL_AUTH_SENT_FOR_KEY,
1048  GET_ESYS_BLOB_AUTH_SENT_FOR_KEY,
1049  GET_ESYS_BLOB_NULL_AUTH_SENT_FOR_NV,
1050  GET_ESYS_BLOB_AUTH_SENT_FOR_NV,
1051  GET_ESYS_BLOB_KEY,
1052  GET_ESYS_BLOB_WAIT_FOR_KEY,
1053  GET_ESYS_BLOB_WAIT_FOR_CONTEXT_SAVE,
1054  GET_ESYS_BLOB_SERIALIZE,
1055  GET_ESYS_BLOB_FILE,
1056  GET_ESYS_BLOB_WAIT_FOR_FLUSH,
1057  GET_ESYS_BLOB_CLEANUP,
1058 
1059  ENTITY_GET_TPM_BLOBS_READ,
1060 
1061  KEY_SIGN_WAIT_FOR_KEY,
1062  KEY_SIGN_WAIT_FOR_SIGN,
1063  KEY_SIGN_CLEANUP,
1064 
1065  KEY_DIGEST_AND_SIGN_WAIT_FOR_KEY,
1066  KEY_DIGEST_AND_SIGN_WAIT_FOR_SIGN,
1067  KEY_DIGEST_AND_SIGN_COMPUTE_HASH,
1068  KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH,
1069  KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH_SEQUENCE_INIT,
1070  KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH_UPDATE_INIT,
1071  KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH_UPDTATE,
1072  KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH_COMPLETE_INIT,
1073  KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH_COMPLETE,
1074  KEY_DIGEST_AND_SIGN_CLEANUP,
1075 
1076  ENTITY_CHANGE_AUTH_WAIT_FOR_SESSION,
1077  ENTITY_CHANGE_AUTH_WAIT_FOR_KEY,
1078  ENTITY_CHANGE_AUTH_AUTH_SENT,
1079  ENTITY_CHANGE_AUTH_WAIT_FOR_FLUSH,
1080  ENTITY_CHANGE_AUTH_WRITE_PREPARE,
1081  ENTITY_CHANGE_AUTH_WRITE,
1082  ENTITY_CHANGE_AUTH_WAIT_FOR_KEY_AUTH,
1083  ENTITY_CHANGE_AUTH_WAIT_FOR_NV_READ,
1084  ENTITY_CHANGE_AUTH_WAIT_FOR_NV_AUTH,
1085  ENTITY_CHANGE_AUTH_WAIT_FOR_NV_CHANGE_AUTH,
1086  ENTITY_CHANGE_AUTH_HIERARCHY_CHANGE_AUTH,
1087  ENTITY_CHANGE_AUTH_HIERARCHY_READ,
1088  ENTITY_CHANGE_AUTH_HIERARCHY_AUTHORIZE,
1089  ENTITY_CHANGE_AUTH_SAVE_HIERARCHIES_PREPARE,
1090  ENTITY_CHANGE_AUTH_SAVE_HIERARCHIES_FINISH,
1091  ENTITY_CHANGE_AUTH_CLEANUP,
1092 
1093  DATA_ENCRYPT_WAIT_FOR_PROFILE,
1094  DATA_ENCRYPT_WAIT_FOR_SESSION,
1095  DATA_ENCRYPT_WAIT_FOR_KEY,
1096  DATA_ENCRYPT_WAIT_FOR_EXT_KEY,
1097  DATA_ENCRYPT_WAIT_FOR_FLUSH,
1098  DATA_ENCRYPT_WAIT_FOR_RSA_ENCRYPTION,
1099  DATA_ENCRYPT_CLEAN,
1100 
1101  DATA_DECRYPT_WAIT_FOR_PROFILE,
1102  DATA_DECRYPT_WAIT_FOR_SESSION,
1103  DATA_DECRYPT_WAIT_FOR_KEY,
1104  DATA_DECRYPT_WAIT_FOR_FLUSH,
1105  DATA_DECRYPT_WAIT_FOR_RSA_DECRYPTION,
1106  DATA_DECRYPT_AUTHORIZE_KEY,
1107  DATA_DECRYPT_CLEANUP,
1108 
1109  PCR_EXTEND_WAIT_FOR_SESSION,
1110  PCR_EXTEND_WAIT_FOR_GET_CAP,
1111  PCR_EXTEND_READ_EVENT_LOG,
1112  PCR_EXTEND_APPEND_EVENT_LOG,
1113  PCR_EXTEND_FINISH,
1114  PCR_EXTEND_CLEANUP,
1115 
1116  PCR_READ_READ_PCR,
1117  PCR_READ_READ_EVENT_LIST,
1118 
1119  PCR_QUOTE_WAIT_FOR_GET_CAP,
1120  PCR_QUOTE_WAIT_FOR_SESSION,
1121  PCR_QUOTE_WAIT_FOR_KEY,
1122  PCR_QUOTE_AUTH_SENT,
1123  PCR_QUOTE_AUTHORIZE,
1124  PCR_QUOTE_WAIT_FOR_FLUSH,
1125  PCR_QUOTE_READ_EVENT_LIST,
1126  PCR_QUOTE_CLEANUP,
1127 
1128  PATH_SET_DESCRIPTION_READ,
1129  PATH_SET_DESCRIPTION_WRITE,
1130 
1131  PATH_GET_DESCRIPTION_READ,
1132 
1133  APP_DATA_SET_READ,
1134  APP_DATA_SET_WRITE,
1135 
1136  AUTHORIZE_NEW_CALCULATE_POLICY,
1137  AUTHORIZE_NEW_LOAD_KEY,
1138  AUTHORIZE_NEW_KEY_SIGN_POLICY,
1139  AUTHORIZE_NEW_WRITE_POLICY_PREPARE,
1140  AUTHORIZE_NEW_WRITE_POLICY,
1141  AUTHORIZE_NEW_CLEANUP,
1142 
1143  WRITE_AUTHORIZE_NV_READ_NV,
1144  WRITE_AUTHORIZE_NV_CALCULATE_POLICY,
1145  WRITE_AUTHORIZE_NV_WRITE_NV_RAM_PREPARE,
1146  WRITE_AUTHORIZE_NV_WRITE_NV_RAM,
1147  WRITE_AUTHORIZE_NV_WRITE_OBJCECT,
1148  WRITE_AUTHORIZE_NV_WRITE_POLICY_PREPARE,
1149  WRITE_AUTHORIZE_NV_WRITE_POLICY,
1150  WRITE_AUTHORIZE_NV_CLEANUP,
1151 
1152  EXPORT_KEY_READ_PUB_KEY,
1153  EXPORT_KEY_READ_PUB_KEY_PARENT,
1154  EXPORT_KEY_WAIT_FOR_KEY,
1155  EXPORT_KEY_WAIT_FOR_DUPLICATE,
1156  EXPORT_KEY_WAIT_FOR_EXT_KEY,
1157  EXPORT_KEY_WAIT_FOR_AUTHORIZATON,
1158  EXPORT_KEY_WAIT_FOR_FLUSH1,
1159  EXPORT_KEY_WAIT_FOR_FLUSH2,
1160  EXPORT_KEY_CLEANUP,
1161 
1162  IMPORT_KEY_WRITE_POLICY,
1163  IMPORT_KEY_WRITE,
1164  IMPORT_KEY_SEARCH,
1165  IMPORT_KEY_LOAD_PARENT,
1166  IMPORT_KEY_AUTHORIZE_PARENT,
1167  IMPORT_KEY_IMPORT,
1168  IMPORT_KEY_WAIT_FOR_FLUSH,
1169  IMPORT_KEY_WRITE_OBJECT_PREPARE,
1170  IMPORT_KEY_WRITE_OBJECT,
1171  IMPORT_KEY_CLEANUP,
1172  IMPORT_WAIT_FOR_SESSION,
1173  IMPORT_WAIT_FOR_PARENT,
1174  IMPORT_WAIT_FOR_AUTHORIZATION,
1175  IMPORT_WAIT_FOR_KEY,
1176  IMPORT_WRITE,
1177  IMPORT_FLUSH_PARENT,
1178  IMPORT_FLUSH_KEY,
1179  IMPORT_CLEANUP,
1180 
1181  UNSEAL_WAIT_FOR_KEY,
1182  UNSEAL_AUTHORIZE_OBJECT,
1183  UNSEAL_WAIT_FOR_UNSEAL,
1184  UNSEAL_WAIT_FOR_FLUSH,
1185  UNSEAL_CLEANUP,
1186 
1187  GET_PLATFORM_CERTIFICATE,
1188 
1189  POLICY_EXPORT_READ_OBJECT,
1190  POLICY_EXPORT_READ_OBJECT_FINISH,
1191  POLICY_EXPORT_READ_POLICY,
1192  POLICY_EXPORT_READ_POLICY_FINISH,
1193  POLICY_EXPORT_CHECK_DIGEST,
1194  POLICY_EXPORT_COMPUTE_POLICY_DIGEST,
1195 
1196  VERIFY_QUOTE_READ,
1197 
1198  GET_INFO_GET_CAP,
1199  GET_INFO_GET_CAP_MORE,
1200  GET_INFO_WAIT_FOR_CAP
1201 };
1202 
1210  Fapi_CB_Auth auth;
1211  void *authData;
1212  Fapi_CB_Branch branch;
1213  void *branchData;
1214  Fapi_CB_Sign sign;
1215  void *signData;
1216  Fapi_CB_PolicyAction action;
1217  void *actionData;
1218 };
1219 
1229  struct IFAPI_CALLBACKS callbacks;
1230  struct IFAPI_IO io;
1231  struct IFAPI_EVENTLOG eventlog;
1232  struct IFAPI_KEYSTORE keystore;
1233  struct IFAPI_POLICY_STORE pstore;
1234  struct IFAPI_PROFILES profiles;
1235  TPMS_TIME_INFO init_time;
1237  enum FAPI_STATE state;
1238  enum FAPI_STATE_PRIMARY primary_state;
1239  enum FAPI_STATE_SESSION session_state;
1240  enum FAPI_STATE_GET_RANDOM get_random_state;
1241  enum IFAPI_HIERACHY_AUTHORIZATION_STATE hierarchy_state;
1242  enum IFAPI_HIERACHY_POLICY_AUTHORIZATION_STATE hierarchy_policy_state;
1243  enum IFAPI_GET_CERT_STATE get_cert_state;
1244  enum FAPI_FLUSH_STATE flush_object_state;
1245  enum IFAPI_CLEANUP_STATE cleanup_state;
1246  enum IFAPI_READ_NV_PUBLIC_STATE read_nv_public_state;
1248  UINT32 nv_buffer_max;
1251  IFAPI_NV_Cmds nv_cmd;
1252  IFAPI_CREATE_NV create_nv;
1253  IFAPI_GetRandom get_random;
1254  IFAPI_CreatePrimary createPrimary;
1255  IFAPI_LoadKey loadKey;
1259  ESYS_TR ek_handle;
1260  ESYS_TR srk_handle;
1261  TPMI_DH_PERSISTENT ek_persistent;
1262  TPMI_DH_PERSISTENT srk_persistent;
1263  IFAPI_SESSION_TYPE session_flags;
1264  TPMA_SESSION session1_attribute_flags;
1265  TPMA_SESSION session2_attribute_flags;
1270  enum IFAPI_IO_STATE io_state;
1271  NODE_OBJECT_T *object_list;
1273  IFAPI_OBJECT *current_auth_object;
1274 };
1275 
1276 #define VENDOR_IFX 0x49465800
1277 #define VENDOR_INTC 0x494E5443
1278 #define VEDNOR_IBM 0x49424D20
1279 #define VENDOR_AMD 0x414D4400
1280 
1281 #endif /* FAPI_INT_H */
uint32_t ESYS_TR
Definition: tss2_esys.h:16
Definition: esys_int.h:168
Definition: fapi_int.h:1226
IFAPI_Key_Sign Key_Sign
Definition: fapi_int.h:1269
enum FAPI_STATE_SESSION session_state
Definition: fapi_int.h:1239
UINT32 nv_buffer_max
Definition: fapi_int.h:1248
ESYS_TR session2
Definition: fapi_int.h:1257
IFAPI_MAX_BUFFER aux_data
Definition: fapi_int.h:1266
IFAPI_CMD_STATE cmd
Definition: fapi_int.h:1249
IFAPI_FILE_SEARCH_CTX fsearch
Definition: fapi_int.h:1268
enum FAPI_STATE_GET_RANDOM get_random_state
Definition: fapi_int.h:1240
IFAPI_OBJECT * duplicate_key
Definition: fapi_int.h:1272
enum FAPI_STATE state
Definition: fapi_int.h:1237
struct IFAPI_CALLBACKS callbacks
Definition: fapi_int.h:1229
ESYS_CONTEXT * esys
Definition: fapi_int.h:1227
IFAPI_CONFIG config
Definition: fapi_int.h:1247
ESYS_TR session1
Definition: fapi_int.h:1256
enum IFAPI_CLEANUP_STATE cleanup_state
Definition: fapi_int.h:1245
TPMS_TIME_INFO init_time
Definition: fapi_int.h:1235
enum FAPI_STATE_PRIMARY primary_state
Definition: fapi_int.h:1238
ESYS_TR policy_session
Definition: fapi_int.h:1258
IFAPI_POLICY_CTX policy
Definition: fapi_int.h:1267
enum FAPI_FLUSH_STATE flush_object_state
Definition: fapi_int.h:1244
Definition: ifapi_eventlog.h:92
Definition: fapi_int.h:1209
Definition: fapi_int.h:178
Definition: ifapi_config.h:18
Definition: fapi_int.h:306
TPMI_YES_NO more_data
Definition: fapi_int.h:314
char ** pathlist
Definition: fapi_int.h:309
UINT32 nv_cap_idx
Definition: fapi_int.h:311
TPMI_RH_NV_INDEX * nv_idx_list
Definition: fapi_int.h:313
TPM2_HANDLE nv_index
Definition: fapi_int.h:315
size_t numPaths
Definition: fapi_int.h:310
char * path
Definition: fapi_int.h:318
TPMS_CAPABILITY_DATA * capability
Definition: fapi_int.h:308
IFAPI_OBJECT nv_object
Definition: fapi_int.h:317
ESYS_TR esys_nv_handle
Definition: fapi_int.h:316
size_t path_idx
Definition: fapi_int.h:312
Definition: fapi_int.h:632
IFAPI_OBJECT hierarchy
Definition: fapi_int.h:634
char * path
Definition: fapi_int.h:633
Definition: fapi_int.h:450
IFAPI_OBJECT * key_object
Definition: fapi_int.h:454
char const * keyPath
Definition: fapi_int.h:451
UINT16 bytesRequested
Definition: fapi_int.h:458
size_t decrypt
Definition: fapi_int.h:457
ESYS_TR key_handle
Definition: fapi_int.h:455
size_t numBytes
Definition: fapi_int.h:456
Definition: ifapi_eventlog.h:80
Definition: ifapi_eventlog.h:104
Definition: fapi_int.h:826
const char * searchPath
Definition: fapi_int.h:827
Definition: fapi_int.h:540
IFAPI_OBJECT * key_object
Definition: fapi_int.h:543
char ** pathlist
Definition: fapi_int.h:551
IFAPI_OBJECT hiearchy_object
Definition: fapi_int.h:548
size_t numPathsCleanup
Definition: fapi_int.h:553
size_t numPaths
Definition: fapi_int.h:552
const char * authValue
Definition: fapi_int.h:544
TPM2B_PRIVATE * newPrivate
Definition: fapi_int.h:546
ESYS_TR hierarchy_handle
Definition: fapi_int.h:550
IFAPI_OBJECT object
Definition: fapi_int.h:547
ESYS_TR nv_index
Definition: fapi_int.h:549
ESYS_TR handle
Definition: fapi_int.h:542
TPM2B_AUTH newAuthValue
Definition: fapi_int.h:545
const char * entityPath
Definition: fapi_int.h:541
Definition: fapi_int.h:793
char ** pathlist
Definition: fapi_int.h:802
TPM2_HANDLE permanentHandle
Definition: fapi_int.h:797
size_t numPaths
Definition: fapi_int.h:803
char * path
Definition: fapi_int.h:800
bool is_key
Definition: fapi_int.h:794
IFAPI_OBJECT object
Definition: fapi_int.h:801
bool is_persistent_key
Definition: fapi_int.h:795
IFAPI_OBJECT auth_object
Definition: fapi_int.h:798
size_t path_idx
Definition: fapi_int.h:804
ESYS_TR auth_index
Definition: fapi_int.h:799
Definition: fapi_int.h:730
IFAPI_OBJECT * key_object
Definition: fapi_int.h:734
IFAPI_OBJECT dup_key
Definition: fapi_int.h:737
char const * pathToPublicKeyOfNewParent
Definition: fapi_int.h:732
IFAPI_OBJECT pub_key
Definition: fapi_int.h:736
TPM2B_PUBLIC public_parent
Definition: fapi_int.h:733
IFAPI_OBJECT export_tree
Definition: fapi_int.h:735
char const * pathOfKeyToDuplicate
Definition: fapi_int.h:731
Definition: fapi_int.h:745
size_t profile_idx
Definition: fapi_int.h:751
TPMS_POLICY policy
Definition: fapi_int.h:749
TPMI_ALG_HASH hashAlg
Definition: fapi_int.h:750
IFAPI_OBJECT object
Definition: fapi_int.h:748
bool compute_policy
Definition: fapi_int.h:752
char const * path
Definition: fapi_int.h:746
Definition: fapi_int.h:702
char ** pathlist
Definition: fapi_int.h:704
size_t numPaths
Definition: fapi_int.h:706
size_t path_idx
Definition: fapi_int.h:705
Definition: fapi_int.h:558
const char * signingKeyPath
Definition: fapi_int.h:560
const char * policyPath
Definition: fapi_int.h:559
Definition: fapi_int.h:809
IFAPI_OBJECT * key_object
Definition: fapi_int.h:821
TPM2_HANDLE permanentHandle
Definition: fapi_int.h:816
uint8_t type
Definition: fapi_int.h:810
char * path
Definition: fapi_int.h:819
bool is_key
Definition: fapi_int.h:813
IFAPI_OBJECT object
Definition: fapi_int.h:820
bool is_persistent_key
Definition: fapi_int.h:814
IFAPI_OBJECT auth_object
Definition: fapi_int.h:817
uint8_t * data
Definition: fapi_int.h:811
size_t length
Definition: fapi_int.h:812
ESYS_TR auth_index
Definition: fapi_int.h:818
Definition: fapi_int.h:514
TPMS_CAPABILITY_DATA * fetched_data
Definition: fapi_int.h:516
TPMS_CAPABILITY_DATA * capability_data
Definition: fapi_int.h:515
Definition: fapi_int.h:375
UINT16 bytesRequested
Definition: fapi_int.h:378
size_t idx
Definition: fapi_int.h:377
uint8_t * ret_data
Definition: fapi_int.h:380
size_t numBytes
Definition: fapi_int.h:376
uint8_t * data
Definition: fapi_int.h:379
Definition: fapi_int.h:183
IFAPI_CONFIG fapi_config
Definition: fapi_int.h:185
char * fapi_version
Definition: fapi_int.h:184
Definition: fapi_int.h:279
char ** pathlist
Definition: fapi_int.h:281
UINT32 nv_cap_idx
Definition: fapi_int.h:286
IFAPI_OBJECT * null_primaries
Definition: fapi_int.h:288
size_t numPaths
Definition: fapi_int.h:282
size_t primary_idx
Definition: fapi_int.h:285
size_t path_idx
Definition: fapi_int.h:287
size_t numNullPrimaries
Definition: fapi_int.h:283
Definition: ifapi_io.h:17
Definition: fapi_int.h:759
TPM2B_SENSITIVE sensitive
Definition: fapi_int.h:771
IFAPI_KEY_TEMPLATE public_templ
Definition: fapi_int.h:769
const char * ossl_priv
Definition: fapi_int.h:770
Definition: fapi_int.h:191
TPMI_YES_NO system
Definition: fapi_int.h:192
UINT32 persistent_handle
Definition: fapi_int.h:195
bool unique_rsa_set
Definition: fapi_int.h:198
TPMI_YES_NO persistent
Definition: fapi_int.h:194
bool unique_ecc_set
Definition: fapi_int.h:199
UINT16 unique_zero
Definition: fapi_int.h:197
Definition: ifapi_keystore.h:125
Definition: fapi_int.h:428
IFAPI_OBJECT hierarchy
Definition: fapi_int.h:436
IFAPI_OBJECT parent
Definition: fapi_int.h:432
bool gen_sensitive_random
Definition: fapi_int.h:444
IFAPI_KEY_TEMPLATE public_templ
Definition: fapi_int.h:434
NODE_STR_T * path_list
Definition: fapi_int.h:431
IFAPI_OBJECT object
Definition: fapi_int.h:433
const char * keyPath
Definition: fapi_int.h:430
Definition: fapi_int.h:385
const char * key_path
Definition: fapi_int.h:388
NODE_STR_T * path_list
Definition: fapi_int.h:389
char * pem_cert_dup
Definition: fapi_int.h:387
const char * pem_cert
Definition: fapi_int.h:386
IFAPI_OBJECT key_object
Definition: fapi_int.h:390
Definition: fapi_int.h:481
IFAPI_OBJECT * key_object
Definition: fapi_int.h:491
uint8_t * ret_signature
Definition: fapi_int.h:497
TPM2B_DIGEST digest
Definition: fapi_int.h:485
size_t chunk
Definition: fapi_int.h:489
TPMT_SIG_SCHEME scheme
Definition: fapi_int.h:490
char const * padding
Definition: fapi_int.h:495
size_t offset
Definition: fapi_int.h:488
TPMT_SIGNATURE * tpm_signature
Definition: fapi_int.h:492
TPMT_SIGNATURE * signature
Definition: fapi_int.h:494
char * certificate
Definition: fapi_int.h:496
ESYS_TR handle
Definition: fapi_int.h:484
uint8_t * data
Definition: fapi_int.h:486
char * publicKey
Definition: fapi_int.h:499
size_t data_size
Definition: fapi_int.h:487
const char * keyPath
Definition: fapi_int.h:483
ESYS_TR sequence_handle
Definition: fapi_int.h:501
TPMI_YES_NO decrypt
Definition: fapi_int.h:493
Definition: fapi_int.h:646
Definition: fapi_int.h:776
NODE_STR_T * path_list
Definition: fapi_int.h:779
Definition: fapi_int.h:89
Definition: fapi_int.h:240
UINT16 bytesRequested
Definition: fapi_int.h:248
TPML_DIGEST_VALUES digests
Definition: fapi_int.h:271
ESYS_TR esys_auth_handle
Definition: fapi_int.h:244
IFAPI_EVENT pcr_event
Definition: fapi_int.h:270
size_t data_idx
Definition: fapi_int.h:250
uint8_t * nv_buffer
Definition: fapi_int.h:252
char * policyPath
Definition: fapi_int.h:242
const uint8_t * data
Definition: fapi_int.h:251
json_object * jso_event_log
Definition: fapi_int.h:268
ESYS_TR auth_session
Definition: fapi_int.h:260
ESYS_TR esys_handle
Definition: fapi_int.h:245
size_t size
Definition: fapi_int.h:254
char * nvPath
Definition: fapi_int.h:241
TPM2B_AUTH auth
Definition: fapi_int.h:257
uint64_t bitmap
Definition: fapi_int.h:261
size_t numBytes
Definition: fapi_int.h:247
uint8_t * rdata
Definition: fapi_int.h:253
IFAPI_OBJECT auth_object
Definition: fapi_int.h:255
IFAPI_OBJECT nv_object
Definition: fapi_int.h:256
char * logData
Definition: fapi_int.h:267
TPMI_RH_NV_INDEX maxNvIndex
Definition: fapi_int.h:269
UINT16 offset
Definition: fapi_int.h:249
TPM2_HANDLE tpm_handle
Definition: fapi_int.h:246
IFAPI_NV nv_obj
Definition: fapi_int.h:258
ESYS_TR auth_index
Definition: fapi_int.h:259
Definition: fapi_int.h:204
TPMI_YES_NO system
Definition: fapi_int.h:205
TPMI_RH_HIERARCHY hierarchy
Definition: fapi_int.h:207
char * description
Definition: fapi_int.h:208
Definition: ifapi_keystore.h:80
Definition: ifapi_keystore.h:153
Definition: fapi_int.h:323
IFAPI_OBJECT * key_object
Definition: fapi_int.h:335
ESYS_TR PCR
Definition: fapi_int.h:326
TPM2B_DATA qualifyingData
Definition: fapi_int.h:339
size_t pcrListSize
Definition: fapi_int.h:338
TPML_PCR_SELECTION pcr_selection
Definition: fapi_int.h:327
TPML_DIGEST_VALUES * event_digests
Definition: fapi_int.h:325
ESYS_TR handle
Definition: fapi_int.h:334
TPML_DIGEST_VALUES digest_list
Definition: fapi_int.h:324
TPML_PCR_SELECTION * pcr_selection_out
Definition: fapi_int.h:328
const char * keyPath
Definition: fapi_int.h:333
uint32_t * pcrList
Definition: fapi_int.h:337
Definition: fapi_int.h:170
Definition: fapi_int.h:675
char ** pathlist
Definition: fapi_int.h:680
ESYS_TR session
Definition: fapi_int.h:690
IFAPI_POLICYUTIL_STACK * policyutil_stack
Definition: fapi_int.h:686
IFAPI_POLICY_EXEC_CTX * policy_stack
Definition: fapi_int.h:682
Definition: ifapi_policy_instantiate.h:19
Definition: ifapi_policy_execute.h:67
Definition: ifapi_policy_store.h:14
Definition: ifapi_policyutil_execute.h:23
Definition: ifapi_profiles.h:19
Definition: ifapi_profiles.h:56
Definition: fapi_int.h:364
json_object * jso
Definition: fapi_int.h:369
char * object_path
Definition: fapi_int.h:368
char * jso_string
Definition: fapi_int.h:370
IFAPI_OBJECT object
Definition: fapi_int.h:367
char * description
Definition: fapi_int.h:365
UINT8_ARY appData
Definition: fapi_int.h:366
Definition: fapi_int.h:576
char ** pathlist
Definition: fapi_int.h:585
size_t numHierarchyObjects
Definition: fapi_int.h:587
IFAPI_OBJECT hierarchy_hn
Definition: fapi_int.h:580
size_t numPaths
Definition: fapi_int.h:586
IFAPI_KEY_TEMPLATE public_templ
Definition: fapi_int.h:583
IFAPI_OBJECT hierarchy_he
Definition: fapi_int.h:579
IFAPI_OBJECT * hierarchy
Definition: fapi_int.h:581
IFAPI_OBJECT hierarchy_hs
Definition: fapi_int.h:578
IFAPI_OBJECT hierarchy_lockout
Definition: fapi_int.h:577
IFAPI_OBJECT * hierarchies
Definition: fapi_int.h:590
size_t path_idx
Definition: fapi_int.h:589
size_t hiearchy_idx
Definition: fapi_int.h:588
TPMS_POLICY * hierarchy_policy
Definition: fapi_int.h:582
Definition: fapi_int.h:506
IFAPI_OBJECT * object
Definition: fapi_int.h:508
const char * keyPath
Definition: fapi_int.h:507
Definition: fapi_int.h:567
TPMI_ALG_HASH * hash_alg
Definition: fapi_int.h:569
size_t hash_size
Definition: fapi_int.h:570
size_t digest_idx
Definition: fapi_int.h:571
const char * policyPath
Definition: fapi_int.h:568
Definition: ifapi_policy_types.h:133
Definition: ifapi_policy_types.h:281
struct TPML_POLICYELEMENTS * policy
Definition: ifapi_policy_types.h:285
Definition: fapi_types.h:15
Definition: fapi_types.h:34
Definition: fapi_types.h:24
Definition: fapi_int.h:835