tpm2-tss 4.2.0
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
43typedef 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
50typedef 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 */
89typedef 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
136enum 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
147enum IFAPI_CLEANUP_STATE { CLEANUP_INIT = 0, CLEANUP_SESSION1, CLEANUP_SESSION2, CLEANUP_SRK };
148
150enum 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
157enum 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
165enum IFAPI_INSTANTIATE_POLICIES_STATE {
166 POLICIES_INSTANTIATION_INIT = 0,
167 POLICIES_INSTANTIATION_WAIT
168};
169
170typedef 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
178typedef struct {
179 char *description;
180 TPMS_CAPABILITY_DATA *capability;
182
183typedef struct {
186 IFAPI_CAP_INFO cap[IFAPI_MAX_CAP_INFO];
187} IFAPI_INFO;
188
191typedef struct {
192 TPMI_YES_NO system;
194 TPMI_YES_NO persistent;
196 TPM2B_PUBLIC public;
197 UINT16 unique_zero;
201
204typedef struct {
205 TPMI_YES_NO system;
207 TPMI_RH_HIERARCHY hierarchy;
209 TPMS_NV_PUBLIC public;
211
213enum 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
226enum 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
240typedef struct {
241 char *nvPath;
243 TPM2B_NV_PUBLIC public;
246 TPM2_HANDLE tpm_handle;
247 size_t numBytes;
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;
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;
273 enum IFAPI_CHECK_NV_STATE nv_check;
274 TPMS_CAPABILITY_DATA *capability; /* TPM capability data to check nv index */
276
279typedef 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
292enum 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
306typedef 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
323typedef 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
372
375typedef struct {
376 size_t numBytes;
377 size_t idx;
379 uint8_t *data;
380 uint8_t *ret_data;
382
385typedef struct {
386 const char *pem_cert;
388 const char *key_path;
389 NODE_STR_T *path_list;
392
394enum 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
428typedef struct {
429 enum IFAPI_KEY_CREATE_STATE state;
430 const char *keyPath;
431 NODE_STR_T *path_list;
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
450typedef struct {
451 char const *keyPath;
452 uint8_t const *in_data;
453 size_t in_dataSize;
456 size_t numBytes;
457 size_t decrypt;
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
471enum 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
481typedef 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;
497 uint8_t *ret_signature;
498 size_t signatureSize;
499 char *publicKey;
500 TPMT_TK_HASHCHECK *validation;
503
506typedef struct {
507 const char *keyPath;
509 TPM2B_SENSITIVE_DATA *unseal_data;
511
514typedef 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;
522
524enum 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
531enum 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
555
558typedef struct {
559 const char *policyPath;
560 const char *signingKeyPath;
561 TPM2B_DIGEST policyRef;
562 TPMS_POLICYAUTHORIZATION authorization;
564
567typedef struct {
568 const char *policyPath;
569 TPMI_ALG_HASH *hash_alg;
570 size_t hash_size;
571 size_t digest_idx;
573
576typedef struct {
584 TPM2B_PUBLIC public;
585 char **pathlist;
586 size_t numPaths;
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
632typedef 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
646typedef 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
656enum 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
671enum FAPI_CREATE_SESSION_STATE { CREATE_SESSION_INIT = 0, CREATE_SESSION, WAIT_FOR_CREATE_SESSION };
672
675typedef 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;
682 IFAPI_POLICY_EXEC_CTX *policy_stack;
685 IFAPI_POLICYUTIL_STACK *util_current_policy;
686 IFAPI_POLICYUTIL_STACK *policyutil_stack;
692 enum FAPI_CREATE_SESSION_STATE create_session_state;
693 char *path;
696
698enum IFAPI_STATE_FILE_SEARCH { FSEARCH_INIT = 0, FSEARCH_READ, FSEARCH_OBJECT };
699
702typedef 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
711enum 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
719enum 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
730typedef struct {
733 TPM2B_PUBLIC public_parent;
738 struct TPMS_POLICY policy;
739 ESYS_TR handle_ext_key;
740 char *exportedData;
742
756
759typedef 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
776typedef struct {
777 enum FAPI_STATE_LOAD_KEY state;
778 enum FAPI_STATE_PREPARE_LOAD_KEY prepare_state;
779 NODE_STR_T *path_list;
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;
790
806
823
826typedef struct {
827 const char *searchPath;
829
835typedef 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
858enum 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
873enum 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
882enum FAPI_STATE_GET_RANDOM { GET_RANDOM_INIT = 0, GET_RANDOM_SENT };
883
885enum FAPI_FLUSH_STATE { FLUSH_INIT = 0, WAIT_FOR_FLUSH };
886
888enum 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
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;
1236
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;
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
enum FAPI_NV_CREATE state
Definition fapi_int.h:307
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
enum FAPI_SIGN_STATE state
Definition fapi_int.h:482
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
enum FAPI_STATE_LOAD_KEY state
Definition fapi_int.h:777
NODE_STR_T * path_list
Definition fapi_int.h:779
Definition fapi_int.h:89
Definition fapi_int.h:240
enum FAPI_STATE_NV_WRITE nv_write_state
Definition fapi_int.h:265
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
bool skip_policy_computation
Definition fapi_int.h:272
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
enum IFAPI_CHECK_NV_STATE nv_check
Definition fapi_int.h:273
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
IFAPI_NV_TEMPLATE public_templ
Definition fapi_int.h:262
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
enum FAPI_STATE_NV_READ nv_read_state
Definition fapi_int.h:264
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
Definition fapi_types.h:15
Definition fapi_int.h:835