15 #include "fapi_types.h"
16 #include "ifapi_config.h"
17 #include "ifapi_eventlog.h"
19 #include "ifapi_keystore.h"
20 #include "ifapi_policy_instantiate.h"
21 #include "ifapi_policy_store.h"
22 #include "ifapi_policy_types.h"
23 #include "ifapi_profiles.h"
24 #include "tss2_common.h"
25 #include "tss2_esys.h"
26 #include "tss2_fapi.h"
27 #include "tss2_tpm2_types.h"
28 #include "util/aux_util.h"
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"
43 typedef UINT32 TSS2_KEY_TYPE;
46 #define MIN_EK_CERT_HANDLE 0x1c00000
47 #define MIN_PLATFORM_CERT_HANDLE 0x01C08000
48 #define MAX_PLATFORM_CERT_HANDLE 0x01C0FFFF
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
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"
72 #define FAPI_WRITE W_OK
73 #define FAPI_READ R_OK
75 #if TPM2_MAX_NV_BUFFER_SIZE > TPM2_MAX_DIGEST_BUFFER
76 #define IFAPI_MAX_BUFFER_SIZE TPM2_MAX_NV_BUFFER_SIZE
78 #define IFAPI_MAX_BUFFER_SIZE TPM2_MAX_DIGEST_BUFFER
81 #define IFAPI_FLUSH_PARENT true
82 #define IFAPI_NOT_FLUSH_PARENT false
85 #define MAX(a, b) ((a) > (b) ? (a) : (b))
91 BYTE buffer[IFAPI_MAX_BUFFER_SIZE];
94 #define OSSL_FREE(S, TYPE) \
96 TYPE##_free((void *)(S)); \
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."); \
104 memcpy(dest_buffer, (src), (src_size)); \
105 (dest_size) = src_size
107 #define HASH_UPDATE(CONTEXT, TYPE, OBJECT, R, LABEL) \
109 uint8_t buffer[sizeof(TYPE)]; \
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); \
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);
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__); \
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) \
136 enum IFAPI_GET_CERT_STATE {
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,
147 enum IFAPI_CLEANUP_STATE { CLEANUP_INIT = 0, CLEANUP_SESSION1, CLEANUP_SESSION2, CLEANUP_SRK };
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
157 enum IFAPI_CHECK_NV_STATE {
159 CHECK_NV_WAIT_FOR_GET_CAP,
160 CHECK_NV_GET_ESYS_HANDLE,
161 CHECK_NV_WAIT_FOR_READ_PUBLIC
164 #define IFAPI_MAX_CAP_INFO 17
168 TPMS_CAPABILITY_DATA *capability;
197 TPMS_NV_PUBLIC
public;
201 enum FAPI_STATE_NV_READ {
206 NV_READ_CHECK_HANDLE,
207 NV_READ_GET_CAPABILITY,
208 NV_READ_GET_ESYS_HANDLE,
209 NV_READ_GET_NV_PUBLIC,
210 NV_READ_WRITE_CHANGED_OBJECT
214 enum FAPI_STATE_NV_WRITE {
217 NV2_WRITE_WAIT_FOR_SESSSION,
218 NV2_WRITE_NULL_AUTH_SENT,
220 NV2_WRITE_WRITE_PREPARE,
231 TPM2B_NV_PUBLIC
public;
252 enum FAPI_STATE_NV_READ nv_read_state;
253 enum FAPI_STATE_NV_WRITE nv_write_state;
260 bool skip_policy_computation;
261 enum IFAPI_CHECK_NV_STATE nv_check;
262 TPMS_CAPABILITY_DATA *capability;
268 TPMS_CAPABILITY_DATA *capability;
280 enum FAPI_NV_CREATE {
281 CREATE_NV_CHECK_NV_OBJECTS_INIT = 0,
282 CREATE_NV_CHECK_NV_OBJECTS,
283 CREATE_NV_READ_NV_OBJECT,
284 CREATE_NV_GET_TPM_NV_HANDLES,
285 CREATE_NV_GET_TPM_NV_HANDLES2,
286 CREATE_NV_CHECK_NV_INDEX,
287 CREATE_NV_NV_GET_ESYS_HANDLE,
288 CREATE_NV_NV_WAIT_FOR_READ_PUBLIC,
295 enum FAPI_NV_CREATE state;
318 TPML_DIGEST *pcrValues;
319 TPM2_HANDLE pcrIndex;
320 TPMI_ALG_HASH hashAlg;
324 TPMS_CAPABILITY_DATA *capabilityData;
328 uint8_t
const *eventData;
330 size_t eventDataSize;
331 uint32_t
const *hashAlgs;
334 char const *quoteInfo;
336 TPM2B_ATTEST *tpm_quoted;
337 TPMT_SIGNATURE *tpm_signature;
339 size_t signatureSize;
343 json_object *event_list;
347 char *event_log_file;
382 enum IFAPI_KEY_CREATE_STATE {
384 KEY_CREATE_WAIT_FOR_SESSION,
385 KEY_CREATE_WAIT_FOR_PARENT,
386 KEY_CREATE_AUTH_SENT,
387 KEY_CREATE_WAIT_FOR_LOAD_AUTHORIZATION,
388 KEY_CREATE_WAIT_FOR_KEY,
389 KEY_CREATE_WAIT_FOR_HIERARCHY,
390 KEY_CREATE_AUTHORIZE_HIERARCHY,
391 KEY_CREATE_WAIT_FOR_EVICT_CONTROL,
392 KEY_CREATE_WRITE_PREPARE,
396 KEY_CREATE_CALCULATE_POLICY,
397 KEY_CREATE_PRIMARY_CALCULATE_POLICY,
398 KEY_CREATE_WAIT_FOR_AUTHORIZATION,
400 KEY_CREATE_WAIT_FOR_RANDOM,
401 KEY_CREATE_PRIMARY_INIT,
402 KEY_CREATE_PRIMARY_WAIT_FOR_SESSION,
403 KEY_CREATE_PRIMARY_WAIT_FOR_HIERARCHY,
404 KEY_CREATE_PRIMARY_WAIT_FOR_AUTHORIZE1,
405 KEY_CREATE_PRIMARY_WAIT_FOR_AUTHORIZE2,
406 KEY_CREATE_PRIMARY_WAIT_FOR_PRIMARY,
407 KEY_CREATE_PRIMARY_WAIT_FOR_EVICT_CONTROL,
408 KEY_CREATE_PRIMARY_FLUSH,
409 KEY_CREATE_PRIMARY_WRITE_PREPARE,
410 KEY_CREATE_PRIMARY_WRITE,
411 KEY_CREATE_PRIMARY_CLEANUP
417 enum IFAPI_KEY_CREATE_STATE state;
425 TPM2B_SENSITIVE_CREATE inSensitive;
426 TPM2B_DATA outsideInfo;
427 TPML_PCR_SELECTION creationPCR;
429 const char *authValue;
430 const char *policyPath;
440 uint8_t
const *in_data;
447 TPMT_RSA_DECRYPT rsa_scheme;
453 size_t plainTextSize;
455 size_t cipherTextSize;
459 enum FAPI_SIGN_STATE {
461 SIGN_WAIT_FOR_SESSION,
470 enum FAPI_SIGN_STATE state;
486 size_t signatureSize;
488 TPMT_TK_HASHCHECK *validation;
497 TPM2B_SENSITIVE_DATA *unseal_data;
507 UINT32 property_count;
512 enum IFAPI_HIERACHY_AUTHORIZATION_STATE {
513 HIERARCHY_CHANGE_AUTH_INIT = 0,
514 HIERARCHY_CHANGE_AUTH_NULL_AUTH_SENT,
515 HIERARCHY_CHANGE_AUTH_AUTH_SENT
519 enum IFAPI_HIERACHY_POLICY_AUTHORIZATION_STATE {
520 HIERARCHY_CHANGE_POLICY_INIT = 0,
521 HIERARCHY_CHANGE_POLICY_NULL_AUTH_SENT,
522 HIERARCHY_CHANGE_POLICY_AUTHORIZE,
523 HIERARCHY_CHANGE_POLICY_AUTH_SENT
549 TPM2B_DIGEST policyRef;
579 TPM2B_SENSITIVE_CREATE inSensitive;
580 TPM2B_DATA outsideInfo;
581 TPML_PCR_SELECTION creationPCR;
583 const char *authValueLockout;
584 const char *authValueEh;
585 const char *policyPathEh;
586 const char *authValueSh;
587 const char *policyPathSh;
590 TPM2_HANDLE cert_nv_idx;
591 TPM2B_NV_PUBLIC *nvPublic;
594 TPM2_ALG_ID cert_key_type;
597 TPMS_CAPABILITY_DATA *capabilityData;
599 TPM2B_AUTH hierarchy_auth;
600 TPM2B_DIGEST policy_digest;
603 TPMA_PERMANENT auth_state;
609 TPM2_HANDLE template_nv_index;
610 TPM2_HANDLE nonce_nv_index;
611 bool cert_chain_exists;
613 size_t cert_list_size;
622 TPM2B_SENSITIVE_CREATE inSensitive;
623 TPM2B_DATA outsideInfo;
624 TPML_PCR_SELECTION creationPCR;
626 TPMI_DH_PERSISTENT persistent_handle;
627 TPMS_CAPABILITY_DATA *capabilityData;
634 uint8_t
const *signature;
635 size_t signatureSize;
636 uint8_t
const *digest;
642 enum IFAPI_STATE_POLICY {
646 POLICY_INSTANTIATE_PREPARE,
648 POLICY_EXECUTE_PREPARE,
657 enum FAPI_CREATE_SESSION_STATE { CREATE_SESSION_INIT = 0, CREATE_SESSION, WAIT_FOR_CREATE_SESSION };
662 enum IFAPI_STATE_POLICY state;
667 TPMI_ALG_HASH hash_alg;
678 enum FAPI_CREATE_SESSION_STATE create_session_state;
684 enum IFAPI_STATE_FILE_SEARCH { FSEARCH_INIT = 0, FSEARCH_READ, FSEARCH_OBJECT };
689 enum IFAPI_STATE_FILE_SEARCH state;
697 enum FAPI_STATE_PREPARE_LOAD_KEY {
698 PREPARE_LOAD_KEY_INIT = 0,
699 PREPARE_LOAD_KEY_WAIT_FOR_SESSION,
700 PREPARE_LOAD_KEY_INIT_KEY,
701 PREPARE_LOAD_KEY_WAIT_FOR_KEY
705 enum FAPI_STATE_LOAD_KEY {
706 LOAD_KEY_GET_PATH = 0,
708 LOAD_KEY_WAIT_FOR_PRIMARY,
747 TPM2B_NAME parent_name;
752 TPM2B_PRIVATE *
private;
763 enum FAPI_STATE_LOAD_KEY state;
764 enum FAPI_STATE_PREPARE_LOAD_KEY prepare_state;
771 bool parent_handle_persistent;
844 enum FAPI_STATE_PRIMARY {
847 PRIMARY_READ_HIERARCHY,
848 PRIMARY_READ_HIERARCHY_FINISH,
849 PRIMARY_AUTHORIZE_HIERARCHY,
850 PRIMARY_GET_AUTH_VALUE,
851 PRIMARY_WAIT_FOR_PRIMARY,
854 PRIMARY_VERIFY_PERSISTENT,
859 enum FAPI_STATE_SESSION {
861 SESSION_WAIT_FOR_PRIMARY,
862 SESSION_CREATE_SESSION,
863 SESSION_WAIT_FOR_SESSION1,
864 SESSION_WAIT_FOR_SESSION2
868 enum FAPI_STATE_GET_RANDOM { GET_RANDOM_INIT = 0, GET_RANDOM_SENT };
871 enum FAPI_FLUSH_STATE { FLUSH_INIT = 0, WAIT_FOR_FLUSH };
878 FAPI_STATE_INTERNALERROR,
881 INITIALIZE_INIT_TCTI,
883 INITIALIZE_WAIT_FOR_CAP,
884 INITIALIZE_READ_PROFILE,
885 INITIALIZE_READ_PROFILE_INIT,
886 INITIALIZE_READ_TIME,
887 INITIALIZE_CHECK_NULL_PRIMARY,
888 INITIALIZE_READ_NULL_PRIMARY,
889 INITIALIZE_CHECK_EXISTING_NV,
890 PROVISION_WAIT_FOR_GET_CAP_AUTH_STATE,
891 PROVISION_WAIT_FOR_GET_CAP0,
892 PROVISION_WAIT_FOR_GET_CAP1,
893 PROVISION_INIT_GET_CAP2,
894 PROVISION_WAIT_FOR_GET_CAP2,
895 PROVISION_GET_CERT_NV,
896 PROVISION_GET_CERT_NV_FINISH,
897 PROVISION_GET_CERT_READ_PUBLIC,
899 PROVISION_READ_CERT_CHAIN,
900 PROVISION_PREPARE_READ_ROOT_CERT,
901 PROVISION_READ_ROOT_CERT,
902 PROVISION_PREPARE_READ_INT_CERT,
903 PROVISION_READ_INT_CERT,
906 PROVISION_WAIT_FOR_EK_SESSION,
907 PROVISION_WAIT_FOR_SRK_SESSION,
908 PROVISION_AUTH_EK_NO_AUTH_SENT,
909 PROVISION_AUTH_EK_AUTH_SENT,
910 PROVISION_AUTH_SRK_NO_AUTH_SENT,
911 PROVISION_AUTH_SRK_AUTH_SENT,
912 PROVISION_CLEAN_EK_SESSION,
913 PROVISION_CLEAN_SRK_SESSION,
914 PROVISION_EK_WRITE_PREPARE,
916 PROVISION_EK_CHECK_CERT,
917 PROVISION_SRK_WRITE_PREPARE,
919 PROVISION_WAIT_FOR_EK_PERSISTENT,
920 PROVISION_WAIT_FOR_SRK_PERSISTENT,
921 PROVISION_CHANGE_LOCKOUT_AUTH,
922 PROVISION_CHANGE_EH_CHECK,
923 PROVISION_CHANGE_EH_AUTH,
924 PROVISION_CHANGE_SH_CHECK,
925 PROVISION_CHANGE_SH_AUTH,
926 PROVISION_EH_CHANGE_POLICY,
927 PROVISION_SH_CHANGE_POLICY,
928 PROVISION_LOCKOUT_CHANGE_POLICY,
932 PROVISION_PREPARE_NULL,
933 PROVISION_WRITE_NULL,
934 PROVISION_WRITE_LOCKOUT,
935 PROVISION_WRITE_LOCKOUT_PARAM,
936 PROVISION_PREPARE_LOCKOUT_PARAM,
937 PROVISION_AUTHORIZE_LOCKOUT,
940 PROVISION_CHECK_FOR_VENDOR_CERT,
941 PROVISION_GET_VENDOR,
942 PROVISION_GET_HIERARCHIES,
943 PROVISION_READ_HIERARCHIES,
944 PROVISION_READ_HIERARCHY,
945 PROVISION_WRITE_HIERARCHIES,
946 PROVISION_WRITE_HIERARCHY,
947 PROVISION_PREPARE_GET_CAP_AUTH_STATE,
948 PROVISION_SRK_GET_PERSISTENT_NAME,
949 PROVISION_CHECK_SRK_EVICT_CONTROL,
950 PROVISION_AUTHORIZE_HS_FOR_EK_EVICT,
951 PROVISION_PREPARE_EK_EVICT,
952 PROVISION_READ_EK_TEMPLATE,
953 PROVISION_READ_EK_NONCE,
954 PROVISION_CHECK_EXISTING_NV,
961 KEY_SET_CERTIFICATE_READ,
962 KEY_SET_CERTIFICATE_WRITE,
964 KEY_GET_CERTIFICATE_READ,
966 GET_RANDOM_WAIT_FOR_SESSION,
967 GET_RANDOM_WAIT_FOR_RANDOM,
970 NV_CREATE_READ_PROFILE,
971 NV_CREATE_READ_HIERARCHY,
972 NV_CREATE_AUTHORIZE_HIERARCHY,
974 NV_CREATE_FIND_INDEX,
975 NV_CREATE_WAIT_FOR_SESSION,
979 NV_CREATE_CALCULATE_POLICY,
980 NV_CREATE_CHECK_EXISTING,
989 NV_EXTEND_WAIT_FOR_SESSION,
996 NV_INCREMENT_WAIT_FOR_SESSION,
997 NV_INCREMENT_AUTHORIZE,
998 NV_INCREMENT_AUTH_SENT,
1000 NV_INCREMENT_CLEANUP,
1003 NV_SET_BITS_WAIT_FOR_SESSION,
1004 NV_SET_BITS_AUTHORIZE,
1005 NV_SET_BITS_AUTH_SENT,
1007 NV_SET_BITS_CLEANUP,
1011 NV_READ_WAIT_FOR_SESSION,
1014 ENTITY_DELETE_GET_FILE,
1016 ENTITY_DELETE_WAIT_FOR_SESSION,
1017 ENTITY_DELETE_NULL_AUTH_SENT_FOR_KEY,
1018 ENTITY_DELETE_AUTH_SENT_FOR_KEY,
1019 ENTITY_DELETE_NULL_AUTH_SENT_FOR_NV,
1020 ENTITY_DELETE_AUTH_SENT_FOR_NV,
1022 ENTITY_DELETE_KEY_WAIT_FOR_HIERARCHY,
1023 ENTITY_DELETE_KEY_WAIT_FOR_AUTHORIZATION,
1024 ENTITY_DELETE_AUTHORIZE_NV,
1026 ENTITY_DELETE_POLICY,
1027 ENTITY_DELETE_REMOVE_DIRS,
1028 ENTITY_DELETE_CLEANUP,
1029 ENTITY_DELETE_READ_HIERARCHY,
1031 GET_ESYS_BLOB_GET_FILE,
1033 GET_ESYS_BLOB_NULL_AUTH_SENT_FOR_KEY,
1034 GET_ESYS_BLOB_AUTH_SENT_FOR_KEY,
1035 GET_ESYS_BLOB_NULL_AUTH_SENT_FOR_NV,
1036 GET_ESYS_BLOB_AUTH_SENT_FOR_NV,
1038 GET_ESYS_BLOB_WAIT_FOR_KEY,
1039 GET_ESYS_BLOB_WAIT_FOR_CONTEXT_SAVE,
1040 GET_ESYS_BLOB_SERIALIZE,
1042 GET_ESYS_BLOB_WAIT_FOR_FLUSH,
1043 GET_ESYS_BLOB_CLEANUP,
1045 ENTITY_GET_TPM_BLOBS_READ,
1047 KEY_SIGN_WAIT_FOR_KEY,
1048 KEY_SIGN_WAIT_FOR_SIGN,
1051 KEY_DIGEST_AND_SIGN_WAIT_FOR_KEY,
1052 KEY_DIGEST_AND_SIGN_WAIT_FOR_SIGN,
1053 KEY_DIGEST_AND_SIGN_COMPUTE_HASH,
1054 KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH,
1055 KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH_SEQUENCE_INIT,
1056 KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH_UPDATE_INIT,
1057 KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH_UPDTATE,
1058 KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH_COMPLETE_INIT,
1059 KEY_DIGEST_AND_SIGN_WAIT_FOR_HASH_COMPLETE,
1060 KEY_DIGEST_AND_SIGN_CLEANUP,
1062 ENTITY_CHANGE_AUTH_WAIT_FOR_SESSION,
1063 ENTITY_CHANGE_AUTH_WAIT_FOR_KEY,
1064 ENTITY_CHANGE_AUTH_AUTH_SENT,
1065 ENTITY_CHANGE_AUTH_WAIT_FOR_FLUSH,
1066 ENTITY_CHANGE_AUTH_WRITE_PREPARE,
1067 ENTITY_CHANGE_AUTH_WRITE,
1068 ENTITY_CHANGE_AUTH_WAIT_FOR_KEY_AUTH,
1069 ENTITY_CHANGE_AUTH_WAIT_FOR_NV_READ,
1070 ENTITY_CHANGE_AUTH_WAIT_FOR_NV_AUTH,
1071 ENTITY_CHANGE_AUTH_WAIT_FOR_NV_CHANGE_AUTH,
1072 ENTITY_CHANGE_AUTH_HIERARCHY_CHANGE_AUTH,
1073 ENTITY_CHANGE_AUTH_HIERARCHY_READ,
1074 ENTITY_CHANGE_AUTH_HIERARCHY_AUTHORIZE,
1075 ENTITY_CHANGE_AUTH_SAVE_HIERARCHIES_PREPARE,
1076 ENTITY_CHANGE_AUTH_SAVE_HIERARCHIES_FINISH,
1077 ENTITY_CHANGE_AUTH_CLEANUP,
1079 DATA_ENCRYPT_WAIT_FOR_PROFILE,
1080 DATA_ENCRYPT_WAIT_FOR_SESSION,
1081 DATA_ENCRYPT_WAIT_FOR_KEY,
1082 DATA_ENCRYPT_WAIT_FOR_EXT_KEY,
1083 DATA_ENCRYPT_WAIT_FOR_FLUSH,
1084 DATA_ENCRYPT_WAIT_FOR_RSA_ENCRYPTION,
1087 DATA_DECRYPT_WAIT_FOR_PROFILE,
1088 DATA_DECRYPT_WAIT_FOR_SESSION,
1089 DATA_DECRYPT_WAIT_FOR_KEY,
1090 DATA_DECRYPT_WAIT_FOR_FLUSH,
1091 DATA_DECRYPT_WAIT_FOR_RSA_DECRYPTION,
1092 DATA_DECRYPT_AUTHORIZE_KEY,
1093 DATA_DECRYPT_CLEANUP,
1095 PCR_EXTEND_WAIT_FOR_SESSION,
1096 PCR_EXTEND_WAIT_FOR_GET_CAP,
1097 PCR_EXTEND_READ_EVENT_LOG,
1098 PCR_EXTEND_APPEND_EVENT_LOG,
1103 PCR_READ_READ_EVENT_LIST,
1105 PCR_QUOTE_WAIT_FOR_GET_CAP,
1106 PCR_QUOTE_WAIT_FOR_SESSION,
1107 PCR_QUOTE_WAIT_FOR_KEY,
1108 PCR_QUOTE_AUTH_SENT,
1109 PCR_QUOTE_AUTHORIZE,
1110 PCR_QUOTE_WAIT_FOR_FLUSH,
1111 PCR_QUOTE_READ_EVENT_LIST,
1114 PATH_SET_DESCRIPTION_READ,
1115 PATH_SET_DESCRIPTION_WRITE,
1117 PATH_GET_DESCRIPTION_READ,
1122 AUTHORIZE_NEW_CALCULATE_POLICY,
1123 AUTHORIZE_NEW_LOAD_KEY,
1124 AUTHORIZE_NEW_KEY_SIGN_POLICY,
1125 AUTHORIZE_NEW_WRITE_POLICY_PREPARE,
1126 AUTHORIZE_NEW_WRITE_POLICY,
1127 AUTHORIZE_NEW_CLEANUP,
1129 WRITE_AUTHORIZE_NV_READ_NV,
1130 WRITE_AUTHORIZE_NV_CALCULATE_POLICY,
1131 WRITE_AUTHORIZE_NV_WRITE_NV_RAM_PREPARE,
1132 WRITE_AUTHORIZE_NV_WRITE_NV_RAM,
1133 WRITE_AUTHORIZE_NV_WRITE_OBJCECT,
1134 WRITE_AUTHORIZE_NV_WRITE_POLICY_PREPARE,
1135 WRITE_AUTHORIZE_NV_WRITE_POLICY,
1136 WRITE_AUTHORIZE_NV_CLEANUP,
1138 EXPORT_KEY_READ_PUB_KEY,
1139 EXPORT_KEY_READ_PUB_KEY_PARENT,
1140 EXPORT_KEY_WAIT_FOR_KEY,
1141 EXPORT_KEY_WAIT_FOR_DUPLICATE,
1142 EXPORT_KEY_WAIT_FOR_EXT_KEY,
1143 EXPORT_KEY_WAIT_FOR_AUTHORIZATON,
1144 EXPORT_KEY_WAIT_FOR_FLUSH1,
1145 EXPORT_KEY_WAIT_FOR_FLUSH2,
1148 IMPORT_KEY_WRITE_POLICY,
1151 IMPORT_KEY_LOAD_PARENT,
1152 IMPORT_KEY_AUTHORIZE_PARENT,
1154 IMPORT_KEY_WAIT_FOR_FLUSH,
1155 IMPORT_KEY_WRITE_OBJECT_PREPARE,
1156 IMPORT_KEY_WRITE_OBJECT,
1158 IMPORT_WAIT_FOR_SESSION,
1159 IMPORT_WAIT_FOR_PARENT,
1160 IMPORT_WAIT_FOR_AUTHORIZATION,
1161 IMPORT_WAIT_FOR_KEY,
1163 IMPORT_FLUSH_PARENT,
1167 UNSEAL_WAIT_FOR_KEY,
1168 UNSEAL_AUTHORIZE_OBJECT,
1169 UNSEAL_WAIT_FOR_UNSEAL,
1170 UNSEAL_WAIT_FOR_FLUSH,
1173 GET_PLATFORM_CERTIFICATE,
1175 POLICY_EXPORT_READ_OBJECT,
1176 POLICY_EXPORT_READ_OBJECT_FINISH,
1177 POLICY_EXPORT_READ_POLICY,
1178 POLICY_EXPORT_READ_POLICY_FINISH,
1179 POLICY_EXPORT_CHECK_DIGEST,
1180 POLICY_EXPORT_COMPUTE_POLICY_DIGEST,
1185 GET_INFO_GET_CAP_MORE,
1186 GET_INFO_WAIT_FOR_CAP
1198 Fapi_CB_Branch branch;
1202 Fapi_CB_PolicyAction action;
1223 enum FAPI_STATE
state;
1227 enum IFAPI_HIERACHY_AUTHORIZATION_STATE hierarchy_state;
1228 enum IFAPI_HIERACHY_POLICY_AUTHORIZATION_STATE hierarchy_policy_state;
1229 enum IFAPI_GET_CERT_STATE get_cert_state;
1232 enum IFAPI_READ_NV_PUBLIC_STATE read_nv_public_state;
1247 TPMI_DH_PERSISTENT ek_persistent;
1248 TPMI_DH_PERSISTENT srk_persistent;
1249 IFAPI_SESSION_TYPE session_flags;
1250 TPMA_SESSION session1_attribute_flags;
1251 TPMA_SESSION session2_attribute_flags;
1256 enum IFAPI_IO_STATE io_state;
1262 #define VENDOR_IFX 0x49465800
1263 #define VENDOR_INTC 0x494E5443
1264 #define VEDNOR_IBM 0x49424D20
1265 #define VENDOR_AMD 0x414D4400
uint32_t ESYS_TR
Definition: tss2_esys.h:16
Definition: esys_int.h:168
Definition: fapi_int.h:1212
IFAPI_Key_Sign Key_Sign
Definition: fapi_int.h:1255
enum FAPI_STATE_SESSION session_state
Definition: fapi_int.h:1225
UINT32 nv_buffer_max
Definition: fapi_int.h:1234
ESYS_TR session2
Definition: fapi_int.h:1243
IFAPI_MAX_BUFFER aux_data
Definition: fapi_int.h:1252
IFAPI_CMD_STATE cmd
Definition: fapi_int.h:1235
IFAPI_FILE_SEARCH_CTX fsearch
Definition: fapi_int.h:1254
enum FAPI_STATE_GET_RANDOM get_random_state
Definition: fapi_int.h:1226
IFAPI_OBJECT * duplicate_key
Definition: fapi_int.h:1258
enum FAPI_STATE state
Definition: fapi_int.h:1223
struct IFAPI_CALLBACKS callbacks
Definition: fapi_int.h:1215
ESYS_CONTEXT * esys
Definition: fapi_int.h:1213
IFAPI_CONFIG config
Definition: fapi_int.h:1233
ESYS_TR session1
Definition: fapi_int.h:1242
enum IFAPI_CLEANUP_STATE cleanup_state
Definition: fapi_int.h:1231
TPMS_TIME_INFO init_time
Definition: fapi_int.h:1221
enum FAPI_STATE_PRIMARY primary_state
Definition: fapi_int.h:1224
ESYS_TR policy_session
Definition: fapi_int.h:1244
IFAPI_POLICY_CTX policy
Definition: fapi_int.h:1253
enum FAPI_FLUSH_STATE flush_object_state
Definition: fapi_int.h:1230
Definition: ifapi_eventlog.h:92
Definition: fapi_int.h:1195
Definition: fapi_int.h:166
Definition: ifapi_config.h:18
Definition: fapi_int.h:294
TPMI_YES_NO more_data
Definition: fapi_int.h:302
char ** pathlist
Definition: fapi_int.h:297
UINT32 nv_cap_idx
Definition: fapi_int.h:299
TPMI_RH_NV_INDEX * nv_idx_list
Definition: fapi_int.h:301
TPM2_HANDLE nv_index
Definition: fapi_int.h:303
size_t numPaths
Definition: fapi_int.h:298
char * path
Definition: fapi_int.h:306
TPMS_CAPABILITY_DATA * capability
Definition: fapi_int.h:296
IFAPI_OBJECT nv_object
Definition: fapi_int.h:305
ESYS_TR esys_nv_handle
Definition: fapi_int.h:304
size_t path_idx
Definition: fapi_int.h:300
Definition: fapi_int.h:618
IFAPI_OBJECT hierarchy
Definition: fapi_int.h:620
char * path
Definition: fapi_int.h:619
Definition: fapi_int.h:438
IFAPI_OBJECT * key_object
Definition: fapi_int.h:442
char const * keyPath
Definition: fapi_int.h:439
UINT16 bytesRequested
Definition: fapi_int.h:446
size_t decrypt
Definition: fapi_int.h:445
ESYS_TR key_handle
Definition: fapi_int.h:443
size_t numBytes
Definition: fapi_int.h:444
Definition: ifapi_eventlog.h:80
Definition: ifapi_eventlog.h:104
Definition: fapi_int.h:812
const char * searchPath
Definition: fapi_int.h:813
Definition: fapi_int.h:528
IFAPI_OBJECT * key_object
Definition: fapi_int.h:531
char ** pathlist
Definition: fapi_int.h:539
IFAPI_OBJECT hiearchy_object
Definition: fapi_int.h:536
size_t numPathsCleanup
Definition: fapi_int.h:541
size_t numPaths
Definition: fapi_int.h:540
const char * authValue
Definition: fapi_int.h:532
TPM2B_PRIVATE * newPrivate
Definition: fapi_int.h:534
ESYS_TR hierarchy_handle
Definition: fapi_int.h:538
IFAPI_OBJECT object
Definition: fapi_int.h:535
ESYS_TR nv_index
Definition: fapi_int.h:537
ESYS_TR handle
Definition: fapi_int.h:530
TPM2B_AUTH newAuthValue
Definition: fapi_int.h:533
const char * entityPath
Definition: fapi_int.h:529
Definition: fapi_int.h:779
char ** pathlist
Definition: fapi_int.h:788
TPM2_HANDLE permanentHandle
Definition: fapi_int.h:783
size_t numPaths
Definition: fapi_int.h:789
char * path
Definition: fapi_int.h:786
bool is_key
Definition: fapi_int.h:780
IFAPI_OBJECT object
Definition: fapi_int.h:787
bool is_persistent_key
Definition: fapi_int.h:781
IFAPI_OBJECT auth_object
Definition: fapi_int.h:784
size_t path_idx
Definition: fapi_int.h:790
ESYS_TR auth_index
Definition: fapi_int.h:785
Definition: fapi_int.h:716
IFAPI_OBJECT * key_object
Definition: fapi_int.h:720
IFAPI_OBJECT dup_key
Definition: fapi_int.h:723
char const * pathToPublicKeyOfNewParent
Definition: fapi_int.h:718
IFAPI_OBJECT pub_key
Definition: fapi_int.h:722
TPM2B_PUBLIC public_parent
Definition: fapi_int.h:719
IFAPI_OBJECT export_tree
Definition: fapi_int.h:721
char const * pathOfKeyToDuplicate
Definition: fapi_int.h:717
Definition: fapi_int.h:731
size_t profile_idx
Definition: fapi_int.h:737
TPMS_POLICY policy
Definition: fapi_int.h:735
TPMI_ALG_HASH hashAlg
Definition: fapi_int.h:736
IFAPI_OBJECT object
Definition: fapi_int.h:734
bool compute_policy
Definition: fapi_int.h:738
char const * path
Definition: fapi_int.h:732
Definition: fapi_int.h:688
char ** pathlist
Definition: fapi_int.h:690
size_t numPaths
Definition: fapi_int.h:692
size_t path_idx
Definition: fapi_int.h:691
Definition: fapi_int.h:546
const char * signingKeyPath
Definition: fapi_int.h:548
const char * policyPath
Definition: fapi_int.h:547
Definition: fapi_int.h:795
IFAPI_OBJECT * key_object
Definition: fapi_int.h:807
TPM2_HANDLE permanentHandle
Definition: fapi_int.h:802
uint8_t type
Definition: fapi_int.h:796
char * path
Definition: fapi_int.h:805
bool is_key
Definition: fapi_int.h:799
IFAPI_OBJECT object
Definition: fapi_int.h:806
bool is_persistent_key
Definition: fapi_int.h:800
IFAPI_OBJECT auth_object
Definition: fapi_int.h:803
uint8_t * data
Definition: fapi_int.h:797
size_t length
Definition: fapi_int.h:798
ESYS_TR auth_index
Definition: fapi_int.h:804
Definition: fapi_int.h:502
TPMS_CAPABILITY_DATA * fetched_data
Definition: fapi_int.h:504
TPMS_CAPABILITY_DATA * capability_data
Definition: fapi_int.h:503
Definition: fapi_int.h:363
UINT16 bytesRequested
Definition: fapi_int.h:366
size_t idx
Definition: fapi_int.h:365
uint8_t * ret_data
Definition: fapi_int.h:368
size_t numBytes
Definition: fapi_int.h:364
uint8_t * data
Definition: fapi_int.h:367
Definition: fapi_int.h:171
IFAPI_CONFIG fapi_config
Definition: fapi_int.h:173
char * fapi_version
Definition: fapi_int.h:172
Definition: fapi_int.h:267
char ** pathlist
Definition: fapi_int.h:269
UINT32 nv_cap_idx
Definition: fapi_int.h:274
IFAPI_OBJECT * null_primaries
Definition: fapi_int.h:276
size_t numPaths
Definition: fapi_int.h:270
size_t primary_idx
Definition: fapi_int.h:273
size_t path_idx
Definition: fapi_int.h:275
size_t numNullPrimaries
Definition: fapi_int.h:271
Definition: ifapi_io.h:17
Definition: fapi_int.h:745
TPM2B_SENSITIVE sensitive
Definition: fapi_int.h:757
IFAPI_KEY_TEMPLATE public_templ
Definition: fapi_int.h:755
const char * ossl_priv
Definition: fapi_int.h:756
Definition: fapi_int.h:179
TPMI_YES_NO system
Definition: fapi_int.h:180
UINT32 persistent_handle
Definition: fapi_int.h:183
bool unique_rsa_set
Definition: fapi_int.h:186
TPMI_YES_NO persistent
Definition: fapi_int.h:182
bool unique_ecc_set
Definition: fapi_int.h:187
UINT16 unique_zero
Definition: fapi_int.h:185
Definition: ifapi_keystore.h:125
Definition: fapi_int.h:416
IFAPI_OBJECT hierarchy
Definition: fapi_int.h:424
IFAPI_OBJECT parent
Definition: fapi_int.h:420
bool gen_sensitive_random
Definition: fapi_int.h:432
IFAPI_KEY_TEMPLATE public_templ
Definition: fapi_int.h:422
NODE_STR_T * path_list
Definition: fapi_int.h:419
IFAPI_OBJECT object
Definition: fapi_int.h:421
const char * keyPath
Definition: fapi_int.h:418
Definition: fapi_int.h:373
const char * key_path
Definition: fapi_int.h:376
NODE_STR_T * path_list
Definition: fapi_int.h:377
char * pem_cert_dup
Definition: fapi_int.h:375
const char * pem_cert
Definition: fapi_int.h:374
IFAPI_OBJECT key_object
Definition: fapi_int.h:378
Definition: fapi_int.h:469
IFAPI_OBJECT * key_object
Definition: fapi_int.h:479
uint8_t * ret_signature
Definition: fapi_int.h:485
TPM2B_DIGEST digest
Definition: fapi_int.h:473
size_t chunk
Definition: fapi_int.h:477
TPMT_SIG_SCHEME scheme
Definition: fapi_int.h:478
char const * padding
Definition: fapi_int.h:483
size_t offset
Definition: fapi_int.h:476
TPMT_SIGNATURE * tpm_signature
Definition: fapi_int.h:480
TPMT_SIGNATURE * signature
Definition: fapi_int.h:482
char * certificate
Definition: fapi_int.h:484
ESYS_TR handle
Definition: fapi_int.h:472
uint8_t * data
Definition: fapi_int.h:474
char * publicKey
Definition: fapi_int.h:487
size_t data_size
Definition: fapi_int.h:475
const char * keyPath
Definition: fapi_int.h:471
ESYS_TR sequence_handle
Definition: fapi_int.h:489
TPMI_YES_NO decrypt
Definition: fapi_int.h:481
Definition: fapi_int.h:632
Definition: fapi_int.h:762
NODE_STR_T * path_list
Definition: fapi_int.h:765
Definition: fapi_int.h:89
Definition: fapi_int.h:228
UINT16 bytesRequested
Definition: fapi_int.h:236
TPML_DIGEST_VALUES digests
Definition: fapi_int.h:259
ESYS_TR esys_auth_handle
Definition: fapi_int.h:232
IFAPI_EVENT pcr_event
Definition: fapi_int.h:258
size_t data_idx
Definition: fapi_int.h:238
uint8_t * nv_buffer
Definition: fapi_int.h:240
char * policyPath
Definition: fapi_int.h:230
const uint8_t * data
Definition: fapi_int.h:239
json_object * jso_event_log
Definition: fapi_int.h:256
ESYS_TR auth_session
Definition: fapi_int.h:248
ESYS_TR esys_handle
Definition: fapi_int.h:233
size_t size
Definition: fapi_int.h:242
char * nvPath
Definition: fapi_int.h:229
TPM2B_AUTH auth
Definition: fapi_int.h:245
uint64_t bitmap
Definition: fapi_int.h:249
size_t numBytes
Definition: fapi_int.h:235
uint8_t * rdata
Definition: fapi_int.h:241
IFAPI_OBJECT auth_object
Definition: fapi_int.h:243
IFAPI_OBJECT nv_object
Definition: fapi_int.h:244
char * logData
Definition: fapi_int.h:255
TPMI_RH_NV_INDEX maxNvIndex
Definition: fapi_int.h:257
UINT16 offset
Definition: fapi_int.h:237
TPM2_HANDLE tpm_handle
Definition: fapi_int.h:234
IFAPI_NV nv_obj
Definition: fapi_int.h:246
ESYS_TR auth_index
Definition: fapi_int.h:247
Definition: fapi_int.h:192
TPMI_YES_NO system
Definition: fapi_int.h:193
TPMI_RH_HIERARCHY hierarchy
Definition: fapi_int.h:195
char * description
Definition: fapi_int.h:196
Definition: ifapi_keystore.h:80
Definition: ifapi_keystore.h:153
Definition: fapi_int.h:311
IFAPI_OBJECT * key_object
Definition: fapi_int.h:323
ESYS_TR PCR
Definition: fapi_int.h:314
TPM2B_DATA qualifyingData
Definition: fapi_int.h:327
size_t pcrListSize
Definition: fapi_int.h:326
TPML_PCR_SELECTION pcr_selection
Definition: fapi_int.h:315
TPML_DIGEST_VALUES * event_digests
Definition: fapi_int.h:313
ESYS_TR handle
Definition: fapi_int.h:322
TPML_DIGEST_VALUES digest_list
Definition: fapi_int.h:312
TPML_PCR_SELECTION * pcr_selection_out
Definition: fapi_int.h:316
const char * keyPath
Definition: fapi_int.h:321
uint32_t * pcrList
Definition: fapi_int.h:325
Definition: fapi_int.h:661
char ** pathlist
Definition: fapi_int.h:666
ESYS_TR session
Definition: fapi_int.h:676
IFAPI_POLICYUTIL_STACK * policyutil_stack
Definition: fapi_int.h:672
IFAPI_POLICY_EXEC_CTX * policy_stack
Definition: fapi_int.h:668
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:352
json_object * jso
Definition: fapi_int.h:357
char * object_path
Definition: fapi_int.h:356
char * jso_string
Definition: fapi_int.h:358
IFAPI_OBJECT object
Definition: fapi_int.h:355
char * description
Definition: fapi_int.h:353
UINT8_ARY appData
Definition: fapi_int.h:354
Definition: fapi_int.h:564
char ** pathlist
Definition: fapi_int.h:573
size_t numHierarchyObjects
Definition: fapi_int.h:575
IFAPI_OBJECT hierarchy_hn
Definition: fapi_int.h:568
size_t numPaths
Definition: fapi_int.h:574
IFAPI_KEY_TEMPLATE public_templ
Definition: fapi_int.h:571
IFAPI_OBJECT hierarchy_he
Definition: fapi_int.h:567
IFAPI_OBJECT * hierarchy
Definition: fapi_int.h:569
IFAPI_OBJECT hierarchy_hs
Definition: fapi_int.h:566
IFAPI_OBJECT hierarchy_lockout
Definition: fapi_int.h:565
IFAPI_OBJECT * hierarchies
Definition: fapi_int.h:578
size_t path_idx
Definition: fapi_int.h:577
size_t hiearchy_idx
Definition: fapi_int.h:576
TPMS_POLICY * hierarchy_policy
Definition: fapi_int.h:570
Definition: fapi_int.h:494
IFAPI_OBJECT * object
Definition: fapi_int.h:496
const char * keyPath
Definition: fapi_int.h:495
Definition: fapi_int.h:555
TPMI_ALG_HASH * hash_alg
Definition: fapi_int.h:557
size_t hash_size
Definition: fapi_int.h:558
size_t digest_idx
Definition: fapi_int.h:559
const char * policyPath
Definition: fapi_int.h:556
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:821