1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */ 2*758e9fbaSOystein Eftevaag /******************************************************************************* 3*758e9fbaSOystein Eftevaag * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG 4*758e9fbaSOystein Eftevaag * All rights reserved. 5*758e9fbaSOystein Eftevaag ******************************************************************************/ 6*758e9fbaSOystein Eftevaag #ifndef FAPI_INT_H 7*758e9fbaSOystein Eftevaag #define FAPI_INT_H 8*758e9fbaSOystein Eftevaag 9*758e9fbaSOystein Eftevaag #include "fapi_types.h" 10*758e9fbaSOystein Eftevaag #include "ifapi_policy_types.h" 11*758e9fbaSOystein Eftevaag #include "ifapi_policy_instantiate.h" 12*758e9fbaSOystein Eftevaag #include "ifapi_eventlog.h" 13*758e9fbaSOystein Eftevaag #include "ifapi_io.h" 14*758e9fbaSOystein Eftevaag #include "ifapi_profiles.h" 15*758e9fbaSOystein Eftevaag #include "ifapi_macros.h" 16*758e9fbaSOystein Eftevaag #include "ifapi_keystore.h" 17*758e9fbaSOystein Eftevaag #include "ifapi_policy_store.h" 18*758e9fbaSOystein Eftevaag #include "ifapi_config.h" 19*758e9fbaSOystein Eftevaag 20*758e9fbaSOystein Eftevaag #include <stdlib.h> 21*758e9fbaSOystein Eftevaag #include <stdint.h> 22*758e9fbaSOystein Eftevaag #include <unistd.h> 23*758e9fbaSOystein Eftevaag #include <string.h> 24*758e9fbaSOystein Eftevaag #include <inttypes.h> 25*758e9fbaSOystein Eftevaag #include <stdarg.h> 26*758e9fbaSOystein Eftevaag #include <stdbool.h> 27*758e9fbaSOystein Eftevaag #include <sys/stat.h> 28*758e9fbaSOystein Eftevaag #include <stdio.h> 29*758e9fbaSOystein Eftevaag #include <errno.h> 30*758e9fbaSOystein Eftevaag #include <fcntl.h> 31*758e9fbaSOystein Eftevaag #include <json-c/json.h> 32*758e9fbaSOystein Eftevaag #include <poll.h> 33*758e9fbaSOystein Eftevaag 34*758e9fbaSOystein Eftevaag #include "tss2_esys.h" 35*758e9fbaSOystein Eftevaag #include "tss2_fapi.h" 36*758e9fbaSOystein Eftevaag 37*758e9fbaSOystein Eftevaag #define DEFAULT_LOG_DIR "/run/tpm2_tss" 38*758e9fbaSOystein Eftevaag #define IFAPI_PCR_LOG_FILE "pcr.log" 39*758e9fbaSOystein Eftevaag #define IFAPI_OBJECT_TYPE ".json" 40*758e9fbaSOystein Eftevaag #define IFAPI_OBJECT_FILE "object.json" 41*758e9fbaSOystein Eftevaag #define IFAPI_SRK_KEY_PATH "HS/SRK" 42*758e9fbaSOystein Eftevaag 43*758e9fbaSOystein Eftevaag typedef UINT32 TSS2_KEY_TYPE; 44*758e9fbaSOystein Eftevaag #define TSS2_SRK 2 45*758e9fbaSOystein Eftevaag #define TSS2_EK 3 46*758e9fbaSOystein Eftevaag #define MIN_EK_CERT_HANDLE 0x1c00000 47*758e9fbaSOystein Eftevaag #define MIN_PLATFORM_CERT_HANDLE 0x01C08000 48*758e9fbaSOystein Eftevaag #define MAX_PLATFORM_CERT_HANDLE 0x01C0FFFF 49*758e9fbaSOystein Eftevaag 50*758e9fbaSOystein Eftevaag typedef UINT8 IFAPI_SESSION_TYPE; 51*758e9fbaSOystein Eftevaag #define IFAPI_SESSION_GENEK 0x01 52*758e9fbaSOystein Eftevaag #define IFAPI_SESSION1 0x02 53*758e9fbaSOystein Eftevaag #define IFAPI_SESSION2 0x04 54*758e9fbaSOystein Eftevaag 55*758e9fbaSOystein Eftevaag #define IFAPI_POLICY_PATH "policy" 56*758e9fbaSOystein Eftevaag #define IFAPI_NV_PATH "nv" 57*758e9fbaSOystein Eftevaag #define IFAPI_EXT_PATH "ext" 58*758e9fbaSOystein Eftevaag #define IFAPI_FILE_DELIM "/" 59*758e9fbaSOystein Eftevaag #define IFAPI_LIST_DELIM ":" 60*758e9fbaSOystein Eftevaag #define IFAPI_FILE_DELIM_CHAR '/' 61*758e9fbaSOystein Eftevaag #define IFAPI_PUB_KEY_DIR "ext" 62*758e9fbaSOystein Eftevaag #define IFAPI_POLICY_DIR "policy" 63*758e9fbaSOystein Eftevaag #define IFAPI_PEM_PUBLIC_STRING "-----BEGIN PUBLIC KEY-----" 64*758e9fbaSOystein Eftevaag #define IFAPI_PEM_PRIVATE_KEY "-----PRIVATE KEY-----" 65*758e9fbaSOystein Eftevaag #define IFAPI_JSON_TAG_POLICY "policy" 66*758e9fbaSOystein Eftevaag #define IFAPI_JSON_TAG_DUPLICATE "public_parent" 67*758e9fbaSOystein Eftevaag 68*758e9fbaSOystein Eftevaag 69*758e9fbaSOystein Eftevaag #if TPM2_MAX_NV_BUFFER_SIZE > TPM2_MAX_DIGEST_BUFFER 70*758e9fbaSOystein Eftevaag #define IFAPI_MAX_BUFFER_SIZE TPM2_MAX_NV_BUFFER_SIZE 71*758e9fbaSOystein Eftevaag #else 72*758e9fbaSOystein Eftevaag #define IFAPI_MAX_BUFFER_SIZE TPM2_MAX_DIGEST_BUFFER 73*758e9fbaSOystein Eftevaag #endif 74*758e9fbaSOystein Eftevaag 75*758e9fbaSOystein Eftevaag #define IFAPI_FLUSH_PARENT true 76*758e9fbaSOystein Eftevaag #define IFAPI_NOT_FLUSH_PARENT false 77*758e9fbaSOystein Eftevaag 78*758e9fbaSOystein Eftevaag /* Definition of FAPI buffer for TPM2B transmission */ 79*758e9fbaSOystein Eftevaag typedef struct { 80*758e9fbaSOystein Eftevaag UINT16 size; 81*758e9fbaSOystein Eftevaag BYTE buffer[IFAPI_MAX_BUFFER_SIZE]; 82*758e9fbaSOystein Eftevaag } IFAPI_MAX_BUFFER; 83*758e9fbaSOystein Eftevaag 84*758e9fbaSOystein Eftevaag #define OSSL_FREE(S,TYPE) if((S) != NULL) {TYPE##_free((void*) (S)); (S)=NULL;} 85*758e9fbaSOystein Eftevaag 86*758e9fbaSOystein Eftevaag 87*758e9fbaSOystein Eftevaag #define FAPI_COPY_DIGEST(dest_buffer, dest_size, src, src_size) \ 88*758e9fbaSOystein Eftevaag if (src_size > sizeof(TPMU_HA)) { \ 89*758e9fbaSOystein Eftevaag return_error(TSS2_FAPI_RC_BAD_VALUE, "Digest size too large."); \ 90*758e9fbaSOystein Eftevaag } \ 91*758e9fbaSOystein Eftevaag memcpy(dest_buffer, (src), (src_size)); \ 92*758e9fbaSOystein Eftevaag dest_size = src_size 93*758e9fbaSOystein Eftevaag 94*758e9fbaSOystein Eftevaag #define HASH_UPDATE(CONTEXT, TYPE, OBJECT, R, LABEL) \ 95*758e9fbaSOystein Eftevaag { \ 96*758e9fbaSOystein Eftevaag uint8_t buffer[sizeof(TYPE)]; \ 97*758e9fbaSOystein Eftevaag size_t offset = 0; \ 98*758e9fbaSOystein Eftevaag R = Tss2_MU_ ## TYPE ## _Marshal(OBJECT, \ 99*758e9fbaSOystein Eftevaag &buffer[0], sizeof(TYPE), &offset); \ 100*758e9fbaSOystein Eftevaag goto_if_error(R, "Marshal for hash update", LABEL); \ 101*758e9fbaSOystein Eftevaag R = ifapi_crypto_hash_update(CONTEXT, \ 102*758e9fbaSOystein Eftevaag (const uint8_t *) &buffer[0], \ 103*758e9fbaSOystein Eftevaag offset); \ 104*758e9fbaSOystein Eftevaag goto_if_error(R, "crypto hash update", LABEL); } 105*758e9fbaSOystein Eftevaag 106*758e9fbaSOystein Eftevaag #define HASH_UPDATE_BUFFER(CONTEXT, BUFFER, SIZE, R, LABEL) \ 107*758e9fbaSOystein Eftevaag R = ifapi_crypto_hash_update(CONTEXT, \ 108*758e9fbaSOystein Eftevaag (const uint8_t *) BUFFER, SIZE) ; \ 109*758e9fbaSOystein Eftevaag goto_if_error(R, "crypto hash update", LABEL); 110*758e9fbaSOystein Eftevaag 111*758e9fbaSOystein Eftevaag #define FAPI_SYNC(r,msg,label, ...) \ 112*758e9fbaSOystein Eftevaag if ((r & ~TSS2_RC_LAYER_MASK) == TSS2_BASE_RC_TRY_AGAIN) \ 113*758e9fbaSOystein Eftevaag return TSS2_FAPI_RC_TRY_AGAIN; \ 114*758e9fbaSOystein Eftevaag if (r != TSS2_RC_SUCCESS) { \ 115*758e9fbaSOystein Eftevaag LOG_ERROR(TPM2_ERROR_FORMAT " " msg, TPM2_ERROR_TEXT(r), ## __VA_ARGS__); \ 116*758e9fbaSOystein Eftevaag goto label; \ 117*758e9fbaSOystein Eftevaag } 118*758e9fbaSOystein Eftevaag 119*758e9fbaSOystein Eftevaag /** The states for the FAPI's object authorization state*/ 120*758e9fbaSOystein Eftevaag enum IFAPI_GET_CERT_STATE { 121*758e9fbaSOystein Eftevaag GET_CERT_INIT = 0, 122*758e9fbaSOystein Eftevaag GET_CERT_WAIT_FOR_GET_CAP, 123*758e9fbaSOystein Eftevaag GET_CERT_GET_CERT_NV, 124*758e9fbaSOystein Eftevaag GET_CERT_GET_CERT_NV_FINISH, 125*758e9fbaSOystein Eftevaag GET_CERT_GET_CERT_READ_PUBLIC, 126*758e9fbaSOystein Eftevaag GET_CERT_READ_CERT 127*758e9fbaSOystein Eftevaag }; 128*758e9fbaSOystein Eftevaag 129*758e9fbaSOystein Eftevaag /** The states for the FAPI's cleanup after successful command execution*/ 130*758e9fbaSOystein Eftevaag enum IFAPI_CLEANUP_STATE { 131*758e9fbaSOystein Eftevaag CLEANUP_INIT = 0, 132*758e9fbaSOystein Eftevaag CLEANUP_SESSION1, 133*758e9fbaSOystein Eftevaag CLEANUP_SESSION2, 134*758e9fbaSOystein Eftevaag CLEANUP_SRK 135*758e9fbaSOystein Eftevaag }; 136*758e9fbaSOystein Eftevaag 137*758e9fbaSOystein Eftevaag #define IFAPI_MAX_CAP_INFO 17 138*758e9fbaSOystein Eftevaag 139*758e9fbaSOystein Eftevaag typedef struct { 140*758e9fbaSOystein Eftevaag char *description; 141*758e9fbaSOystein Eftevaag TPMS_CAPABILITY_DATA *capability; 142*758e9fbaSOystein Eftevaag } IFAPI_CAP_INFO; 143*758e9fbaSOystein Eftevaag 144*758e9fbaSOystein Eftevaag typedef struct { 145*758e9fbaSOystein Eftevaag char *fapi_version; /**< The version string of FAPI */ 146*758e9fbaSOystein Eftevaag char *fapi_config; /**< The configuration information */ 147*758e9fbaSOystein Eftevaag IFAPI_CAP_INFO cap[IFAPI_MAX_CAP_INFO]; 148*758e9fbaSOystein Eftevaag } IFAPI_INFO; 149*758e9fbaSOystein Eftevaag 150*758e9fbaSOystein Eftevaag /** Type for representing FAPI template for keys 151*758e9fbaSOystein Eftevaag */ 152*758e9fbaSOystein Eftevaag typedef struct { 153*758e9fbaSOystein Eftevaag TPMI_YES_NO system; /**< Store the object in the system wide 154*758e9fbaSOystein Eftevaag directory */ 155*758e9fbaSOystein Eftevaag TPMI_YES_NO persistent; /**< Store key persistent in NV ram. */ 156*758e9fbaSOystein Eftevaag UINT32 persistent_handle; /**< < Persistent handle which should be used */ 157*758e9fbaSOystein Eftevaag TPM2B_PUBLIC public; /**< Template for public data */ 158*758e9fbaSOystein Eftevaag } IFAPI_KEY_TEMPLATE; 159*758e9fbaSOystein Eftevaag 160*758e9fbaSOystein Eftevaag /** Type for representing template for NV objects 161*758e9fbaSOystein Eftevaag */ 162*758e9fbaSOystein Eftevaag typedef struct { 163*758e9fbaSOystein Eftevaag TPMI_YES_NO system; /**< Store the object in the system wide 164*758e9fbaSOystein Eftevaag directory */ 165*758e9fbaSOystein Eftevaag TPMI_RH_HIERARCHY hierarchy; /**< Hierarchy for NV object. */ 166*758e9fbaSOystein Eftevaag char *description; /**< Description of template. */ 167*758e9fbaSOystein Eftevaag TPMS_NV_PUBLIC public; /**< Template for public data */ 168*758e9fbaSOystein Eftevaag } IFAPI_NV_TEMPLATE; 169*758e9fbaSOystein Eftevaag 170*758e9fbaSOystein Eftevaag /** Type for representing a external public key 171*758e9fbaSOystein Eftevaag */ 172*758e9fbaSOystein Eftevaag typedef struct { 173*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME sig_scheme; /**< Signature scheme used for quote. */ 174*758e9fbaSOystein Eftevaag TPMS_ATTEST attest; /**< Attestation data from Quote */ 175*758e9fbaSOystein Eftevaag } FAPI_QUOTE_INFO; 176*758e9fbaSOystein Eftevaag 177*758e9fbaSOystein Eftevaag 178*758e9fbaSOystein Eftevaag /** The states for the FAPI's NV read state */ 179*758e9fbaSOystein Eftevaag enum _FAPI_STATE_NV_READ { 180*758e9fbaSOystein Eftevaag NV_READ_INIT = 0, 181*758e9fbaSOystein Eftevaag NV_READ_AUTHORIZE, 182*758e9fbaSOystein Eftevaag NV_READ_AUTHORIZE2, 183*758e9fbaSOystein Eftevaag NV_READ_AUTH_SENT 184*758e9fbaSOystein Eftevaag }; 185*758e9fbaSOystein Eftevaag 186*758e9fbaSOystein Eftevaag /** The states for the FAPI's NV write state */ 187*758e9fbaSOystein Eftevaag enum _FAPI_STATE_NV_WRITE { 188*758e9fbaSOystein Eftevaag NV2_WRITE_INIT = 0, 189*758e9fbaSOystein Eftevaag NV2_WRITE_READ, 190*758e9fbaSOystein Eftevaag NV2_WRITE_WAIT_FOR_SESSSION, 191*758e9fbaSOystein Eftevaag NV2_WRITE_NULL_AUTH_SENT, 192*758e9fbaSOystein Eftevaag NV2_WRITE_AUTH_SENT, 193*758e9fbaSOystein Eftevaag NV2_WRITE_WRITE_PREPARE, 194*758e9fbaSOystein Eftevaag NV2_WRITE_WRITE, 195*758e9fbaSOystein Eftevaag NV2_WRITE_AUTHORIZE, 196*758e9fbaSOystein Eftevaag NV2_WRITE_AUTHORIZE2 197*758e9fbaSOystein Eftevaag }; 198*758e9fbaSOystein Eftevaag 199*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi NV commands. 200*758e9fbaSOystein Eftevaag */ 201*758e9fbaSOystein Eftevaag typedef struct { 202*758e9fbaSOystein Eftevaag char *nvPath ; /**< The name of the file for object serialization */ 203*758e9fbaSOystein Eftevaag char *policyPath; /**< The name of the policy file */ 204*758e9fbaSOystein Eftevaag TPM2B_NV_PUBLIC public; /**< The public info of the NV object. */ 205*758e9fbaSOystein Eftevaag ESYS_TR esys_auth_handle; /**< The ESAPI handle for the NV auth object */ 206*758e9fbaSOystein Eftevaag ESYS_TR esys_handle; /**< The ESAPI handle for the NV object */ 207*758e9fbaSOystein Eftevaag size_t numBytes; /**< The number of bytes of a ESYS request */ 208*758e9fbaSOystein Eftevaag UINT16 bytesRequested; /**< Bytes currently requested from TPM */ 209*758e9fbaSOystein Eftevaag UINT16 offset; /**< Offset in TPM memory TPM */ 210*758e9fbaSOystein Eftevaag size_t data_idx; /**< Offset in the read buffer */ 211*758e9fbaSOystein Eftevaag const uint8_t *data; /**< Buffer for data to be written */ 212*758e9fbaSOystein Eftevaag uint8_t *rdata; /**< Buffer for data to be read */ 213*758e9fbaSOystein Eftevaag IFAPI_OBJECT auth_object; /**< Object used for authentication */ 214*758e9fbaSOystein Eftevaag IFAPI_OBJECT nv_object; /**< Deserialized NV object */ 215*758e9fbaSOystein Eftevaag TPM2B_AUTH auth; /**< The Password */ 216*758e9fbaSOystein Eftevaag IFAPI_NV nv_obj; /**< The NV Object */ 217*758e9fbaSOystein Eftevaag ESYS_TR auth_index; /**< The ESAPI handle of the authorization object */ 218*758e9fbaSOystein Eftevaag uint64_t bitmap; /**< The bitmask for the SetBits command */ 219*758e9fbaSOystein Eftevaag IFAPI_NV_TEMPLATE public_templ; /**< The template for nv creation, adjusted 220*758e9fbaSOystein Eftevaag appropriate by the passed flags */ 221*758e9fbaSOystein Eftevaag enum _FAPI_STATE_NV_READ nv_read_state; /**< The current state of NV read */ 222*758e9fbaSOystein Eftevaag enum _FAPI_STATE_NV_WRITE nv_write_state; /**< The current state of NV write*/ 223*758e9fbaSOystein Eftevaag uint8_t *write_data; 224*758e9fbaSOystein Eftevaag char const *logData; /**< The event log for NV objects of type pcr */ 225*758e9fbaSOystein Eftevaag json_object *jso_event_log; /**< logData in JSON format */ 226*758e9fbaSOystein Eftevaag TPMI_RH_NV_INDEX maxNvIndex; /**< Max index for search for free index */ 227*758e9fbaSOystein Eftevaag IFAPI_EVENT pcr_event; /**< Event to be added to log */ 228*758e9fbaSOystein Eftevaag TPML_DIGEST_VALUES digests; /**< Digest for the event data of an extend */ 229*758e9fbaSOystein Eftevaag bool skip_policy_computation; /**< switch whether policy needs to be computed */ 230*758e9fbaSOystein Eftevaag } IFAPI_NV_Cmds; 231*758e9fbaSOystein Eftevaag 232*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_Initialize command. 233*758e9fbaSOystein Eftevaag */ 234*758e9fbaSOystein Eftevaag typedef struct { 235*758e9fbaSOystein Eftevaag TPMS_CAPABILITY_DATA *capability; /* TPM capability data to check available algs */ 236*758e9fbaSOystein Eftevaag } IFAPI_INITIALIZE; 237*758e9fbaSOystein Eftevaag 238*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_PCR commands. 239*758e9fbaSOystein Eftevaag */ 240*758e9fbaSOystein Eftevaag typedef struct { 241*758e9fbaSOystein Eftevaag TPML_DIGEST_VALUES digest_list; /**< The digest list computed for the event */ 242*758e9fbaSOystein Eftevaag TPML_DIGEST_VALUES *event_digests; /**< The digest list computed by TPM2_Event */ 243*758e9fbaSOystein Eftevaag ESYS_TR PCR; /**< The handle of the PCR register to be extended */ 244*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION pcr_selection; /**< Selection used for Read and Quote */ 245*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION *pcr_selection_out; /**< Selection returned by PCR_Read */ 246*758e9fbaSOystein Eftevaag UINT32 update_count; 247*758e9fbaSOystein Eftevaag TPML_DIGEST *pcrValues; /* The values returned by PCR_Read */ 248*758e9fbaSOystein Eftevaag TPM2_HANDLE pcrIndex; 249*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hashAlg; 250*758e9fbaSOystein Eftevaag const char *keyPath; /**< The implicit key path for PCR_Quote */ 251*758e9fbaSOystein Eftevaag ESYS_TR handle; /**< The ESYS handle of the signing key */ 252*758e9fbaSOystein Eftevaag IFAPI_OBJECT *key_object; /**< The IPAPI object of the signing key */ 253*758e9fbaSOystein Eftevaag TPMS_CAPABILITY_DATA *capabilityData; /* TPM capability data to check available algs */ 254*758e9fbaSOystein Eftevaag uint32_t *pcrList; /**< Array of PCR numbers */ 255*758e9fbaSOystein Eftevaag size_t pcrListSize; /**< Size of PCR array */ 256*758e9fbaSOystein Eftevaag TPM2B_DATA qualifyingData; /**< Nonce for quote command */ 257*758e9fbaSOystein Eftevaag uint8_t const *eventData; 258*758e9fbaSOystein Eftevaag TPM2B_EVENT event; 259*758e9fbaSOystein Eftevaag size_t eventDataSize; 260*758e9fbaSOystein Eftevaag uint32_t const *hashAlgs; 261*758e9fbaSOystein Eftevaag uint32_t *hashAlgs2; 262*758e9fbaSOystein Eftevaag size_t numHashAlgs; 263*758e9fbaSOystein Eftevaag char const *quoteInfo; 264*758e9fbaSOystein Eftevaag TPM2B_ATTEST *tpm_quoted; 265*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *tpm_signature; 266*758e9fbaSOystein Eftevaag uint8_t const *signature; 267*758e9fbaSOystein Eftevaag size_t signatureSize; 268*758e9fbaSOystein Eftevaag char const *logData; 269*758e9fbaSOystein Eftevaag char *pcrLog; 270*758e9fbaSOystein Eftevaag IFAPI_EVENT pcr_event; 271*758e9fbaSOystein Eftevaag json_object *event_list; 272*758e9fbaSOystein Eftevaag FAPI_QUOTE_INFO fapi_quote_info; 273*758e9fbaSOystein Eftevaag } IFAPI_PCR; 274*758e9fbaSOystein Eftevaag 275*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_SetDescription. 276*758e9fbaSOystein Eftevaag */ 277*758e9fbaSOystein Eftevaag typedef struct { 278*758e9fbaSOystein Eftevaag char *description; /**< The description of the object */ 279*758e9fbaSOystein Eftevaag UINT8_ARY appData; /**< Application data to be stored in object store. */ 280*758e9fbaSOystein Eftevaag IFAPI_OBJECT object; /**< The IPAPI object to store the info*/ 281*758e9fbaSOystein Eftevaag char *object_path; /**< The realative path to the object */ 282*758e9fbaSOystein Eftevaag json_object *jso; /**< JSON object for storing the AppData */ 283*758e9fbaSOystein Eftevaag char *jso_string; /**< JSON deserialized buffer */ 284*758e9fbaSOystein Eftevaag } IFAPI_Path_SetDescription; 285*758e9fbaSOystein Eftevaag 286*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_GetRandom. 287*758e9fbaSOystein Eftevaag */ 288*758e9fbaSOystein Eftevaag typedef struct { 289*758e9fbaSOystein Eftevaag size_t numBytes; /**< The number of random bytes to be generated */ 290*758e9fbaSOystein Eftevaag size_t idx; /**< Current position in output buffer. */ 291*758e9fbaSOystein Eftevaag UINT16 bytesRequested; /**< Byted currently requested from TPM */ 292*758e9fbaSOystein Eftevaag uint8_t *data; /**< The buffer for the random data */ 293*758e9fbaSOystein Eftevaag } IFAPI_GetRandom; 294*758e9fbaSOystein Eftevaag 295*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_Key_Setcertificate. 296*758e9fbaSOystein Eftevaag */ 297*758e9fbaSOystein Eftevaag typedef struct { 298*758e9fbaSOystein Eftevaag const char *pem_cert; /**< The certifificate in pem or format */ 299*758e9fbaSOystein Eftevaag char *pem_cert_dup; /**< The allocate certifificate */ 300*758e9fbaSOystein Eftevaag const char *key_path; /**< The absolute key path */ 301*758e9fbaSOystein Eftevaag NODE_STR_T *path_list; /**< The computed explicit path */ 302*758e9fbaSOystein Eftevaag IFAPI_OBJECT key_object; /**< The IPAPI object for the certified key */ 303*758e9fbaSOystein Eftevaag } IFAPI_Key_SetCertificate; 304*758e9fbaSOystein Eftevaag 305*758e9fbaSOystein Eftevaag /** The states for the FAPI's key creation */ 306*758e9fbaSOystein Eftevaag enum IFAPI_KEY_CREATE_STATE { 307*758e9fbaSOystein Eftevaag KEY_CREATE_INIT = 0, 308*758e9fbaSOystein Eftevaag KEY_CREATE_WAIT_FOR_SESSION, 309*758e9fbaSOystein Eftevaag KEY_CREATE_WAIT_FOR_PARENT, 310*758e9fbaSOystein Eftevaag KEY_CREATE_AUTH_SENT, 311*758e9fbaSOystein Eftevaag KEY_CREATE_WRITE_PREPARE, 312*758e9fbaSOystein Eftevaag KEY_CREATE_WRITE, 313*758e9fbaSOystein Eftevaag KEY_CREATE_FLUSH, 314*758e9fbaSOystein Eftevaag KEY_CREATE_CALCULATE_POLICY, 315*758e9fbaSOystein Eftevaag KEY_CREATE_WAIT_FOR_AUTHORIZATION, 316*758e9fbaSOystein Eftevaag KEY_CREATE_CLEANUP 317*758e9fbaSOystein Eftevaag }; 318*758e9fbaSOystein Eftevaag 319*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_CreateKey. 320*758e9fbaSOystein Eftevaag */ 321*758e9fbaSOystein Eftevaag typedef struct { 322*758e9fbaSOystein Eftevaag enum IFAPI_KEY_CREATE_STATE state; 323*758e9fbaSOystein Eftevaag const char *keyPath; /**< The pathname from the application */ 324*758e9fbaSOystein Eftevaag NODE_STR_T *path_list; /**< The computed explicit path */ 325*758e9fbaSOystein Eftevaag IFAPI_OBJECT parent; /**< The parent of the key for used for creation. */ 326*758e9fbaSOystein Eftevaag IFAPI_OBJECT object; /**< The current object. */ 327*758e9fbaSOystein Eftevaag IFAPI_KEY_TEMPLATE public_templ; /**< The template for the keys public data */ 328*758e9fbaSOystein Eftevaag TPM2B_PUBLIC public; /**< The public data of the key */ 329*758e9fbaSOystein Eftevaag TPM2B_SENSITIVE_CREATE inSensitive; 330*758e9fbaSOystein Eftevaag TPM2B_DATA outsideInfo; 331*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION creationPCR; 332*758e9fbaSOystein Eftevaag ESYS_TR handle; 333*758e9fbaSOystein Eftevaag const char *authValue; 334*758e9fbaSOystein Eftevaag const char *policyPath; 335*758e9fbaSOystein Eftevaag const IFAPI_PROFILE *profile; 336*758e9fbaSOystein Eftevaag } IFAPI_Key_Create; 337*758e9fbaSOystein Eftevaag 338*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_EncryptDecrypt. 339*758e9fbaSOystein Eftevaag */ 340*758e9fbaSOystein Eftevaag typedef struct { 341*758e9fbaSOystein Eftevaag char const *keyPath; /**< The implicit key path */ 342*758e9fbaSOystein Eftevaag uint8_t const *in_data; 343*758e9fbaSOystein Eftevaag size_t in_dataSize; 344*758e9fbaSOystein Eftevaag IFAPI_OBJECT *key_object; /**< The IPAPI object for the encryption key */ 345*758e9fbaSOystein Eftevaag uint8_t *out_data; /**< The output of symmetric encrypt/decryption */ 346*758e9fbaSOystein Eftevaag ESYS_TR key_handle; /**< The ESYS handle of the encryption key */ 347*758e9fbaSOystein Eftevaag size_t numBytes; /**< The number of bytes of a ESYS request */ 348*758e9fbaSOystein Eftevaag size_t decrypt; /**< Switch whether to encrypt or decrypt */ 349*758e9fbaSOystein Eftevaag UINT16 bytesRequested; /**< Bytes currently requested from TPM */ 350*758e9fbaSOystein Eftevaag TPMT_RSA_DECRYPT rsa_scheme; 351*758e9fbaSOystein Eftevaag ESYS_TR object_handle; 352*758e9fbaSOystein Eftevaag char *policy_path; 353*758e9fbaSOystein Eftevaag ESYS_TR auth_session; 354*758e9fbaSOystein Eftevaag const IFAPI_PROFILE *profile; 355*758e9fbaSOystein Eftevaag } IFAPI_Data_EncryptDecrypt; 356*758e9fbaSOystein Eftevaag 357*758e9fbaSOystein Eftevaag /** The states for signing */ 358*758e9fbaSOystein Eftevaag enum FAPI_SIGN_STATE { 359*758e9fbaSOystein Eftevaag SIGN_INIT = 0, 360*758e9fbaSOystein Eftevaag SIGN_WAIT_FOR_SESSION, 361*758e9fbaSOystein Eftevaag SIGN_WAIT_FOR_KEY, 362*758e9fbaSOystein Eftevaag SIGN_AUTH_SENT, 363*758e9fbaSOystein Eftevaag SIGN_WAIT_FOR_FLUSH 364*758e9fbaSOystein Eftevaag }; 365*758e9fbaSOystein Eftevaag 366*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_Sign. 367*758e9fbaSOystein Eftevaag */ 368*758e9fbaSOystein Eftevaag typedef struct { 369*758e9fbaSOystein Eftevaag enum FAPI_SIGN_STATE state; /**< The state of the signing operation */ 370*758e9fbaSOystein Eftevaag const char *keyPath; /**< The implicit key path */ 371*758e9fbaSOystein Eftevaag ESYS_TR handle; /**< The ESYS handle of the signing key */ 372*758e9fbaSOystein Eftevaag TPM2B_DIGEST digest; /**< The digest to be signed */ 373*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME scheme; /**< The signature scheme from profile */ 374*758e9fbaSOystein Eftevaag IFAPI_OBJECT *key_object; /**< The IPAPI object of the signing key */ 375*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *tpm_signature; /**< The signature in TPM format */ 376*758e9fbaSOystein Eftevaag TPMI_YES_NO decrypt; /**< Switch for symmetric algs */ 377*758e9fbaSOystein Eftevaag TPMT_SIGNATURE *signature; /**< Produced TPM singature */ 378*758e9fbaSOystein Eftevaag char const *padding; /**< Optional padding parameter for key sign. */ 379*758e9fbaSOystein Eftevaag } IFAPI_Key_Sign; 380*758e9fbaSOystein Eftevaag 381*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_Unseal. 382*758e9fbaSOystein Eftevaag */ 383*758e9fbaSOystein Eftevaag typedef struct { 384*758e9fbaSOystein Eftevaag const char *keyPath; /**< The implicit key path */ 385*758e9fbaSOystein Eftevaag IFAPI_OBJECT *object; /**< The IPAPI object storing the data to be unsealed */ 386*758e9fbaSOystein Eftevaag TPM2B_SENSITIVE_DATA *unseal_data; /** The result of the esys unseal operation */ 387*758e9fbaSOystein Eftevaag } IFAPI_Unseal; 388*758e9fbaSOystein Eftevaag 389*758e9fbaSOystein Eftevaag 390*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_GetInfo. 391*758e9fbaSOystein Eftevaag */ 392*758e9fbaSOystein Eftevaag typedef struct { 393*758e9fbaSOystein Eftevaag TPMS_CAPABILITY_DATA *capability_data; /**< The TPM capability for one property */ 394*758e9fbaSOystein Eftevaag TPMS_CAPABILITY_DATA *fetched_data; /**< The data fetched in one TPM command */ 395*758e9fbaSOystein Eftevaag size_t idx_info_cap; 396*758e9fbaSOystein Eftevaag IFAPI_INFO info_obj; 397*758e9fbaSOystein Eftevaag UINT32 property_count; 398*758e9fbaSOystein Eftevaag UINT32 property; 399*758e9fbaSOystein Eftevaag } IFAPI_GetInfo; 400*758e9fbaSOystein Eftevaag 401*758e9fbaSOystein Eftevaag /** The states for the FAPI's hierarchy authorization state*/ 402*758e9fbaSOystein Eftevaag enum IFAPI_HIERACHY_AUTHORIZATION_STATE { 403*758e9fbaSOystein Eftevaag HIERARCHY_CHANGE_AUTH_INIT = 0, 404*758e9fbaSOystein Eftevaag HIERARCHY_CHANGE_AUTH_NULL_AUTH_SENT, 405*758e9fbaSOystein Eftevaag HIERARCHY_CHANGE_AUTH_AUTH_SENT 406*758e9fbaSOystein Eftevaag }; 407*758e9fbaSOystein Eftevaag 408*758e9fbaSOystein Eftevaag /** The states for the FAPI's change policy authorization state*/ 409*758e9fbaSOystein Eftevaag enum IFAPI_HIERACHY_POLICY_AUTHORIZATION_STATE { 410*758e9fbaSOystein Eftevaag HIERARCHY_CHANGE_POLICY_INIT = 0, 411*758e9fbaSOystein Eftevaag HIERARCHY_CHANGE_POLICY_NULL_AUTH_SENT, 412*758e9fbaSOystein Eftevaag HIERARCHY_CHANGE_POLICY_AUTH_SENT 413*758e9fbaSOystein Eftevaag }; 414*758e9fbaSOystein Eftevaag 415*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_ChangeAuth. 416*758e9fbaSOystein Eftevaag */ 417*758e9fbaSOystein Eftevaag typedef struct { 418*758e9fbaSOystein Eftevaag const char *entityPath; /**< The implicit key path */ 419*758e9fbaSOystein Eftevaag ESYS_TR handle; /**< The ESYS handle of the key */ 420*758e9fbaSOystein Eftevaag IFAPI_OBJECT *key_object; /**< The IPAPI object of the key */ 421*758e9fbaSOystein Eftevaag const char *authValue; /**< The new auth value */ 422*758e9fbaSOystein Eftevaag TPM2B_AUTH newAuthValue; /**< The new auth value */ 423*758e9fbaSOystein Eftevaag TPM2B_PRIVATE *newPrivate; /**< New private data created by parend */ 424*758e9fbaSOystein Eftevaag IFAPI_OBJECT object; /**< Deserialized NV object or hierarchy */ 425*758e9fbaSOystein Eftevaag ESYS_TR nv_index; /**< NV handle of the object to be changed */ 426*758e9fbaSOystein Eftevaag ESYS_TR hierarchy_handle; /**< NV handle of the hierarchy to be changed */ 427*758e9fbaSOystein Eftevaag } IFAPI_Entity_ChangeAuth; 428*758e9fbaSOystein Eftevaag 429*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_AuthorizePolicy. 430*758e9fbaSOystein Eftevaag */ 431*758e9fbaSOystein Eftevaag typedef struct { 432*758e9fbaSOystein Eftevaag const char *policyPath; /**< Policy with Policy to be authorized */ 433*758e9fbaSOystein Eftevaag const char *signingKeyPath; /**< Key for policy signing */ 434*758e9fbaSOystein Eftevaag TPM2B_DIGEST policyRef; 435*758e9fbaSOystein Eftevaag TPMS_POLICYAUTHORIZATION authorization; 436*758e9fbaSOystein Eftevaag } IFAPI_Fapi_AuthorizePolicy; 437*758e9fbaSOystein Eftevaag 438*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Fapi_WriteAuthorizeNv. 439*758e9fbaSOystein Eftevaag */ 440*758e9fbaSOystein Eftevaag typedef struct { 441*758e9fbaSOystein Eftevaag const char *policyPath; /**< Policy with Policy to be authorized */ 442*758e9fbaSOystein Eftevaag TPMI_ALG_HASH *hash_alg; /**< The hash alg used for digest computation */ 443*758e9fbaSOystein Eftevaag size_t hash_size; /**< The digest size */ 444*758e9fbaSOystein Eftevaag size_t digest_idx; /**< The index of the digest in the policy */ 445*758e9fbaSOystein Eftevaag } IFAPI_api_WriteAuthorizeNv; 446*758e9fbaSOystein Eftevaag 447*758e9fbaSOystein Eftevaag /** The data structure holding internal state of Provisioning. 448*758e9fbaSOystein Eftevaag */ 449*758e9fbaSOystein Eftevaag typedef struct { 450*758e9fbaSOystein Eftevaag IFAPI_OBJECT hierarchy; /**< The current used hierarchy for CreatePrimary */ 451*758e9fbaSOystein Eftevaag IFAPI_KEY_TEMPLATE public_templ; /**< The basic template for the keys public data */ 452*758e9fbaSOystein Eftevaag TPM2B_PUBLIC public; /**< The public info of the created primary */ 453*758e9fbaSOystein Eftevaag TPM2B_SENSITIVE_CREATE inSensitive; 454*758e9fbaSOystein Eftevaag TPM2B_DATA outsideInfo; 455*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION creationPCR; 456*758e9fbaSOystein Eftevaag ESYS_TR handle; 457*758e9fbaSOystein Eftevaag const char *authValueLockout; 458*758e9fbaSOystein Eftevaag const char *authValueEh; 459*758e9fbaSOystein Eftevaag const char *policyPathEh; 460*758e9fbaSOystein Eftevaag const char *authValueSh; 461*758e9fbaSOystein Eftevaag const char *policyPathSh; 462*758e9fbaSOystein Eftevaag size_t digest_idx; 463*758e9fbaSOystein Eftevaag size_t hash_size; 464*758e9fbaSOystein Eftevaag TPM2_HANDLE cert_nv_idx; 465*758e9fbaSOystein Eftevaag ESYS_TR esys_nv_cert_handle; 466*758e9fbaSOystein Eftevaag char *pem_cert; 467*758e9fbaSOystein Eftevaag TPM2_ALG_ID cert_key_type; 468*758e9fbaSOystein Eftevaag size_t cert_count; 469*758e9fbaSOystein Eftevaag size_t cert_idx; 470*758e9fbaSOystein Eftevaag TPMS_CAPABILITY_DATA *capabilityData; 471*758e9fbaSOystein Eftevaag IFAPI_OBJECT hierarchy_object; 472*758e9fbaSOystein Eftevaag TPM2B_AUTH hierarchy_auth; 473*758e9fbaSOystein Eftevaag TPM2B_DIGEST policy_digest; 474*758e9fbaSOystein Eftevaag char *intermed_crt; 475*758e9fbaSOystein Eftevaag char *root_crt; 476*758e9fbaSOystein Eftevaag } IFAPI_Provision; 477*758e9fbaSOystein Eftevaag 478*758e9fbaSOystein Eftevaag /** The data structure holding internal state of regenerate primary key. 479*758e9fbaSOystein Eftevaag */ 480*758e9fbaSOystein Eftevaag typedef struct { 481*758e9fbaSOystein Eftevaag char *path; /**< Path of the primary (starting with hierarchy) */ 482*758e9fbaSOystein Eftevaag IFAPI_OBJECT hierarchy; /**< The current used hierarchy for CreatePrimary */ 483*758e9fbaSOystein Eftevaag IFAPI_OBJECT pkey_object; 484*758e9fbaSOystein Eftevaag TPM2B_SENSITIVE_CREATE inSensitive; 485*758e9fbaSOystein Eftevaag TPM2B_DATA outsideInfo; 486*758e9fbaSOystein Eftevaag TPML_PCR_SELECTION creationPCR; 487*758e9fbaSOystein Eftevaag ESYS_TR handle; 488*758e9fbaSOystein Eftevaag TPMI_DH_PERSISTENT persistent_handle; 489*758e9fbaSOystein Eftevaag } IFAPI_CreatePrimary; 490*758e9fbaSOystein Eftevaag 491*758e9fbaSOystein Eftevaag /** The data structure holding internal state of key verify signature. 492*758e9fbaSOystein Eftevaag */ 493*758e9fbaSOystein Eftevaag typedef struct { 494*758e9fbaSOystein Eftevaag const char *keyPath; 495*758e9fbaSOystein Eftevaag uint8_t const *signature; 496*758e9fbaSOystein Eftevaag size_t signatureSize; 497*758e9fbaSOystein Eftevaag uint8_t const *digest; 498*758e9fbaSOystein Eftevaag size_t digestSize; 499*758e9fbaSOystein Eftevaag IFAPI_OBJECT key_object; 500*758e9fbaSOystein Eftevaag } IFAPI_Key_VerifySignature; 501*758e9fbaSOystein Eftevaag 502*758e9fbaSOystein Eftevaag /** The states for the FAPI's policy loading */ 503*758e9fbaSOystein Eftevaag enum IFAPI_STATE_POLICY { 504*758e9fbaSOystein Eftevaag POLICY_INIT = 0, 505*758e9fbaSOystein Eftevaag POLICY_READ, 506*758e9fbaSOystein Eftevaag POLICY_READ_FINISH, 507*758e9fbaSOystein Eftevaag POLICY_INSTANTIATE_PREPARE, 508*758e9fbaSOystein Eftevaag POLICY_INSTANTIATE, 509*758e9fbaSOystein Eftevaag POLICY_EXECUTE, 510*758e9fbaSOystein Eftevaag POLICY_FLUSH 511*758e9fbaSOystein Eftevaag }; 512*758e9fbaSOystein Eftevaag 513*758e9fbaSOystein Eftevaag typedef struct IFAPI_POLICY_EXEC_CTX IFAPI_POLICY_EXEC_CTX; 514*758e9fbaSOystein Eftevaag typedef struct IFAPI_POLICYUTIL_STACK IFAPI_POLICYUTIL_STACK; 515*758e9fbaSOystein Eftevaag 516*758e9fbaSOystein Eftevaag /** The states for session creation */ 517*758e9fbaSOystein Eftevaag enum FAPI_CREATE_SESSION_STATE { 518*758e9fbaSOystein Eftevaag CREATE_SESSION_INIT = 0, 519*758e9fbaSOystein Eftevaag CREATE_SESSION, 520*758e9fbaSOystein Eftevaag WAIT_FOR_CREATE_SESSION 521*758e9fbaSOystein Eftevaag }; 522*758e9fbaSOystein Eftevaag 523*758e9fbaSOystein Eftevaag /** The data structure holding internal policy state. 524*758e9fbaSOystein Eftevaag */ 525*758e9fbaSOystein Eftevaag typedef struct { 526*758e9fbaSOystein Eftevaag enum IFAPI_STATE_POLICY state; 527*758e9fbaSOystein Eftevaag struct TPMS_POLICY policy; 528*758e9fbaSOystein Eftevaag size_t digest_idx; 529*758e9fbaSOystein Eftevaag size_t hash_size; 530*758e9fbaSOystein Eftevaag char **pathlist; /**< The array of all objects in the search path */ 531*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hash_alg; 532*758e9fbaSOystein Eftevaag IFAPI_POLICY_EXEC_CTX *policy_stack; /**< The stack used for storing current policy information. 533*758e9fbaSOystein Eftevaag e.g. for retry the current index of policy elements hash 534*758e9fbaSOystein Eftevaag to be stored. */ 535*758e9fbaSOystein Eftevaag IFAPI_POLICYUTIL_STACK *util_current_policy; 536*758e9fbaSOystein Eftevaag IFAPI_POLICYUTIL_STACK *policyutil_stack; 537*758e9fbaSOystein Eftevaag /**< The stack used for storing current policy information. 538*758e9fbaSOystein Eftevaag e.g. for retry the current index of policy elements hash 539*758e9fbaSOystein Eftevaag to be stored. */ 540*758e9fbaSOystein Eftevaag ESYS_TR session; /**< Auxiliary variable to store created policy session. 541*758e9fbaSOystein Eftevaag The value will also be stored in the policy stack */ 542*758e9fbaSOystein Eftevaag enum FAPI_CREATE_SESSION_STATE create_session_state; 543*758e9fbaSOystein Eftevaag char *path; 544*758e9fbaSOystein Eftevaag IFAPI_POLICY_EVAL_INST_CTX eval_ctx; 545*758e9fbaSOystein Eftevaag } IFAPI_POLICY_CTX; 546*758e9fbaSOystein Eftevaag 547*758e9fbaSOystein Eftevaag /** The states for the IFAPI's policy loading */ 548*758e9fbaSOystein Eftevaag enum IFAPI_STATE_FILE_SEARCH { 549*758e9fbaSOystein Eftevaag FSEARCH_INIT = 0, 550*758e9fbaSOystein Eftevaag FSEARCH_READ, 551*758e9fbaSOystein Eftevaag FSEARCH_OBJECT 552*758e9fbaSOystein Eftevaag }; 553*758e9fbaSOystein Eftevaag 554*758e9fbaSOystein Eftevaag /** The data structure holding internal policy state. 555*758e9fbaSOystein Eftevaag */ 556*758e9fbaSOystein Eftevaag typedef struct { 557*758e9fbaSOystein Eftevaag enum IFAPI_STATE_FILE_SEARCH state; 558*758e9fbaSOystein Eftevaag char **pathlist; /**< The array of all objects in the search path */ 559*758e9fbaSOystein Eftevaag size_t path_idx; /**< Index of array of objects to be searched */ 560*758e9fbaSOystein Eftevaag size_t numPaths; /**< Number of all objects in data store */ 561*758e9fbaSOystein Eftevaag char *current_path; 562*758e9fbaSOystein Eftevaag } IFAPI_FILE_SEARCH_CTX; 563*758e9fbaSOystein Eftevaag 564*758e9fbaSOystein Eftevaag /** The states for the FAPI's key loading */ 565*758e9fbaSOystein Eftevaag enum _FAPI_STATE_LOAD_KEY { 566*758e9fbaSOystein Eftevaag LOAD_KEY_GET_PATH = 0, 567*758e9fbaSOystein Eftevaag LOAD_KEY_READ_KEY, 568*758e9fbaSOystein Eftevaag LOAD_KEY_WAIT_FOR_PRIMARY, 569*758e9fbaSOystein Eftevaag LOAD_KEY_LOAD_KEY, 570*758e9fbaSOystein Eftevaag LOAD_KEY_AUTH, 571*758e9fbaSOystein Eftevaag LOAD_KEY_AUTHORIZE 572*758e9fbaSOystein Eftevaag }; 573*758e9fbaSOystein Eftevaag 574*758e9fbaSOystein Eftevaag /** The data structure holding internal state of export key. 575*758e9fbaSOystein Eftevaag */ 576*758e9fbaSOystein Eftevaag typedef struct { 577*758e9fbaSOystein Eftevaag char const *pathOfKeyToDuplicate; /**< The relative path of the key to be exported */ 578*758e9fbaSOystein Eftevaag char const *pathToPublicKeyOfNewParent; /**< The relative path of the new parent */ 579*758e9fbaSOystein Eftevaag TPM2B_PUBLIC public_parent; /**< The public key of the new parent */ 580*758e9fbaSOystein Eftevaag IFAPI_OBJECT *key_object; /**< The IPAPI object of the key to be duplicated */ 581*758e9fbaSOystein Eftevaag IFAPI_OBJECT export_tree; /**< The complete tree to be exported */ 582*758e9fbaSOystein Eftevaag IFAPI_OBJECT pub_key; /**< The public part of the new parent */ 583*758e9fbaSOystein Eftevaag IFAPI_OBJECT dup_key; /**< The key to be duplicated or exported */ 584*758e9fbaSOystein Eftevaag struct TPMS_POLICY policy; 585*758e9fbaSOystein Eftevaag ESYS_TR handle_ext_key; 586*758e9fbaSOystein Eftevaag } IFAPI_ExportKey; 587*758e9fbaSOystein Eftevaag 588*758e9fbaSOystein Eftevaag /** The data structure holding internal state of export policy. 589*758e9fbaSOystein Eftevaag */ 590*758e9fbaSOystein Eftevaag typedef struct { 591*758e9fbaSOystein Eftevaag char const *path; /**< Path of the object with the policy to be 592*758e9fbaSOystein Eftevaag exported */ 593*758e9fbaSOystein Eftevaag IFAPI_OBJECT object; /**< Object corresponding to path */ 594*758e9fbaSOystein Eftevaag } IFAPI_ExportPolicy; 595*758e9fbaSOystein Eftevaag 596*758e9fbaSOystein Eftevaag /** The data structure holding internal state of import key. 597*758e9fbaSOystein Eftevaag */ 598*758e9fbaSOystein Eftevaag typedef struct { 599*758e9fbaSOystein Eftevaag IFAPI_OBJECT object; 600*758e9fbaSOystein Eftevaag TPM2B_NAME parent_name; 601*758e9fbaSOystein Eftevaag IFAPI_OBJECT *parent_object; 602*758e9fbaSOystein Eftevaag IFAPI_OBJECT new_object; 603*758e9fbaSOystein Eftevaag char *parent_path; 604*758e9fbaSOystein Eftevaag char *out_path; 605*758e9fbaSOystein Eftevaag TPM2B_PRIVATE *private; 606*758e9fbaSOystein Eftevaag char *jso_string; 607*758e9fbaSOystein Eftevaag } IFAPI_ImportKey; 608*758e9fbaSOystein Eftevaag 609*758e9fbaSOystein Eftevaag 610*758e9fbaSOystein Eftevaag /** The data structure holding internal state of loading keys. 611*758e9fbaSOystein Eftevaag */ 612*758e9fbaSOystein Eftevaag typedef struct { 613*758e9fbaSOystein Eftevaag enum _FAPI_STATE_LOAD_KEY state; /**< The current state of key loading */ 614*758e9fbaSOystein Eftevaag NODE_STR_T *path_list; /**< The current used hierarchy for CreatePrimary */ 615*758e9fbaSOystein Eftevaag NODE_OBJECT_T *key_list; 616*758e9fbaSOystein Eftevaag IFAPI_OBJECT auth_object; 617*758e9fbaSOystein Eftevaag size_t position; 618*758e9fbaSOystein Eftevaag ESYS_TR handle; 619*758e9fbaSOystein Eftevaag ESYS_TR parent_handle; 620*758e9fbaSOystein Eftevaag bool parent_handle_persistent; 621*758e9fbaSOystein Eftevaag IFAPI_OBJECT *key_object; 622*758e9fbaSOystein Eftevaag char *key_path; 623*758e9fbaSOystein Eftevaag } IFAPI_LoadKey; 624*758e9fbaSOystein Eftevaag 625*758e9fbaSOystein Eftevaag /** The data structure holding internal state of entity delete. 626*758e9fbaSOystein Eftevaag */ 627*758e9fbaSOystein Eftevaag typedef struct { 628*758e9fbaSOystein Eftevaag bool is_key; /**< Entity to be deleted is a key */ 629*758e9fbaSOystein Eftevaag bool is_persistent_key; /**< Entity to be deleted is a key */ 630*758e9fbaSOystein Eftevaag ESYS_TR new_object_handle; 631*758e9fbaSOystein Eftevaag TPM2_HANDLE permanentHandle; /**< The TPM permanent handle */ 632*758e9fbaSOystein Eftevaag IFAPI_OBJECT auth_object; /**< Object used for authentication */ 633*758e9fbaSOystein Eftevaag ESYS_TR auth_index; /**< The ESAPI handle of the nv authorization object */ 634*758e9fbaSOystein Eftevaag char *path; /**< The name of the file to be deleted */ 635*758e9fbaSOystein Eftevaag IFAPI_OBJECT object; /**< Deserialized object */ 636*758e9fbaSOystein Eftevaag char **pathlist; /**< The array with the object files to be deleted */ 637*758e9fbaSOystein Eftevaag size_t numPaths; /**< Size of array with the object files to be deleted */ 638*758e9fbaSOystein Eftevaag size_t path_idx; /**< Index of array with the object files to be deleted */ 639*758e9fbaSOystein Eftevaag } IFAPI_Entity_Delete; 640*758e9fbaSOystein Eftevaag 641*758e9fbaSOystein Eftevaag /** The data structure holding internal state of list entities. 642*758e9fbaSOystein Eftevaag */ 643*758e9fbaSOystein Eftevaag typedef struct { 644*758e9fbaSOystein Eftevaag const char *searchPath; /**< The path to searched for objectws */ 645*758e9fbaSOystein Eftevaag } IFAPI_Entities_List; 646*758e9fbaSOystein Eftevaag 647*758e9fbaSOystein Eftevaag /** Union for all input parameters. 648*758e9fbaSOystein Eftevaag * 649*758e9fbaSOystein Eftevaag * The input parameters of a command need to be stored in order to enable 650*758e9fbaSOystein Eftevaag * resubmission. This type provides the corresponding facilities. 651*758e9fbaSOystein Eftevaag */ 652*758e9fbaSOystein Eftevaag typedef union { 653*758e9fbaSOystein Eftevaag IFAPI_Provision Provision; 654*758e9fbaSOystein Eftevaag IFAPI_Key_Create Key_Create; 655*758e9fbaSOystein Eftevaag IFAPI_Key_SetCertificate Key_SetCertificate; 656*758e9fbaSOystein Eftevaag IFAPI_Entity_ChangeAuth Entity_ChangeAuth; 657*758e9fbaSOystein Eftevaag IFAPI_Entity_Delete Entity_Delete; 658*758e9fbaSOystein Eftevaag IFAPI_Entities_List Entities_List; 659*758e9fbaSOystein Eftevaag IFAPI_Key_VerifySignature Key_VerifySignature; 660*758e9fbaSOystein Eftevaag IFAPI_Data_EncryptDecrypt Data_EncryptDecrypt; 661*758e9fbaSOystein Eftevaag IFAPI_PCR pcr; 662*758e9fbaSOystein Eftevaag IFAPI_INITIALIZE Initialize; 663*758e9fbaSOystein Eftevaag IFAPI_Path_SetDescription path_set_info; 664*758e9fbaSOystein Eftevaag IFAPI_Fapi_AuthorizePolicy Policy_AuthorizeNewPolicy; 665*758e9fbaSOystein Eftevaag IFAPI_api_WriteAuthorizeNv WriteAuthorizeNV; 666*758e9fbaSOystein Eftevaag IFAPI_ExportKey ExportKey; 667*758e9fbaSOystein Eftevaag IFAPI_ImportKey ImportKey; 668*758e9fbaSOystein Eftevaag IFAPI_Unseal Unseal; 669*758e9fbaSOystein Eftevaag IFAPI_GetInfo GetInfo; 670*758e9fbaSOystein Eftevaag IFAPI_ExportPolicy ExportPolicy; 671*758e9fbaSOystein Eftevaag } IFAPI_CMD_STATE; 672*758e9fbaSOystein Eftevaag 673*758e9fbaSOystein Eftevaag /** The states for the FAPI's primary key regeneration */ 674*758e9fbaSOystein Eftevaag enum _FAPI_STATE_PRIMARY { 675*758e9fbaSOystein Eftevaag PRIMARY_INIT = 0, 676*758e9fbaSOystein Eftevaag PRIMARY_READ_KEY, 677*758e9fbaSOystein Eftevaag PRIMARY_READ_HIERARCHY, 678*758e9fbaSOystein Eftevaag PRIMARY_READ_HIERARCHY_FINISH, 679*758e9fbaSOystein Eftevaag PRIMARY_AUTHORIZE_HIERARCHY, 680*758e9fbaSOystein Eftevaag PRIMARY_HAUTH_SENT, 681*758e9fbaSOystein Eftevaag PRIMARY_CREATED 682*758e9fbaSOystein Eftevaag }; 683*758e9fbaSOystein Eftevaag 684*758e9fbaSOystein Eftevaag /** The states for the FAPI's primary key regeneration */ 685*758e9fbaSOystein Eftevaag enum _FAPI_STATE_SESSION { 686*758e9fbaSOystein Eftevaag SESSION_INIT = 0, 687*758e9fbaSOystein Eftevaag SESSION_WAIT_FOR_PRIMARY, 688*758e9fbaSOystein Eftevaag SESSION_CREATE_SESSION, 689*758e9fbaSOystein Eftevaag SESSION_WAIT_FOR_SESSION1, 690*758e9fbaSOystein Eftevaag SESSION_WAIT_FOR_SESSION2 691*758e9fbaSOystein Eftevaag }; 692*758e9fbaSOystein Eftevaag 693*758e9fbaSOystein Eftevaag /** The states for the FAPI's get random state */ 694*758e9fbaSOystein Eftevaag enum _FAPI_STATE_GET_RANDOM { 695*758e9fbaSOystein Eftevaag GET_RANDOM_INIT = 0, 696*758e9fbaSOystein Eftevaag GET_RANDOM_SENT 697*758e9fbaSOystein Eftevaag }; 698*758e9fbaSOystein Eftevaag 699*758e9fbaSOystein Eftevaag /** The states for flushing objects */ 700*758e9fbaSOystein Eftevaag enum _FAPI_FLUSH_STATE { 701*758e9fbaSOystein Eftevaag FLUSH_INIT = 0, 702*758e9fbaSOystein Eftevaag WAIT_FOR_FLUSH 703*758e9fbaSOystein Eftevaag }; 704*758e9fbaSOystein Eftevaag 705*758e9fbaSOystein Eftevaag /** The states for the FAPI's internal state machine */ 706*758e9fbaSOystein Eftevaag enum _FAPI_STATE { 707*758e9fbaSOystein Eftevaag _FAPI_STATE_INIT = 0, /**< The initial state after creation or after 708*758e9fbaSOystein Eftevaag finishing a command. A new command can only 709*758e9fbaSOystein Eftevaag be issued in this state. */ 710*758e9fbaSOystein Eftevaag _FAPI_STATE_INTERNALERROR, /**< A non-recoverable error occurred within the 711*758e9fbaSOystein Eftevaag ESAPI code. */ 712*758e9fbaSOystein Eftevaag INITIALIZE_READ, 713*758e9fbaSOystein Eftevaag INITIALIZE_INIT_TCTI, 714*758e9fbaSOystein Eftevaag INITIALIZE_GET_CAP, 715*758e9fbaSOystein Eftevaag INITIALIZE_WAIT_FOR_CAP, 716*758e9fbaSOystein Eftevaag INITIALIZE_READ_PROFILE, 717*758e9fbaSOystein Eftevaag INITIALIZE_READ_PROFILE_INIT, 718*758e9fbaSOystein Eftevaag 719*758e9fbaSOystein Eftevaag PROVISION_WAIT_FOR_GET_CAP1, 720*758e9fbaSOystein Eftevaag PROVISION_INIT_GET_CAP2, 721*758e9fbaSOystein Eftevaag PROVISION_WAIT_FOR_GET_CAP2, 722*758e9fbaSOystein Eftevaag PROVISION_GET_CERT_NV, 723*758e9fbaSOystein Eftevaag PROVISION_GET_CERT_NV_FINISH, 724*758e9fbaSOystein Eftevaag PROVISION_GET_CERT_READ_PUBLIC, 725*758e9fbaSOystein Eftevaag PROVISION_READ_CERT, 726*758e9fbaSOystein Eftevaag PROVISION_PREPARE_READ_ROOT_CERT, 727*758e9fbaSOystein Eftevaag PROVISION_READ_ROOT_CERT, 728*758e9fbaSOystein Eftevaag PROVISION_READ_PROFILE, 729*758e9fbaSOystein Eftevaag PROVISION_INIT_SRK, 730*758e9fbaSOystein Eftevaag PROVISION_AUTH_EK_NO_AUTH_SENT, 731*758e9fbaSOystein Eftevaag PROVISION_AUTH_EK_AUTH_SENT, 732*758e9fbaSOystein Eftevaag PROVISION_AUTH_SRK_NO_AUTH_SENT, 733*758e9fbaSOystein Eftevaag PROVISION_AUTH_SRK_AUTH_SENT, 734*758e9fbaSOystein Eftevaag PROVISION_EK_WRITE_PREPARE, 735*758e9fbaSOystein Eftevaag PROVISION_EK_WRITE, 736*758e9fbaSOystein Eftevaag PROVISION_EK_CHECK_CERT, 737*758e9fbaSOystein Eftevaag PROVISION_SRK_WRITE_PREPARE, 738*758e9fbaSOystein Eftevaag PROVISION_SRK_WRITE, 739*758e9fbaSOystein Eftevaag PROVISION_WAIT_FOR_EK_PERSISTENT, 740*758e9fbaSOystein Eftevaag PROVISION_WAIT_FOR_SRK_PERSISTENT, 741*758e9fbaSOystein Eftevaag PROVISION_CHANGE_LOCKOUT_AUTH, 742*758e9fbaSOystein Eftevaag PROVISION_CHANGE_EH_CHECK, 743*758e9fbaSOystein Eftevaag PROVISION_CHANGE_EH_AUTH, 744*758e9fbaSOystein Eftevaag PROVISION_CHANGE_SH_CHECK, 745*758e9fbaSOystein Eftevaag PROVISION_CHANGE_SH_AUTH, 746*758e9fbaSOystein Eftevaag PROVISION_EH_CHANGE_POLICY, 747*758e9fbaSOystein Eftevaag PROVISION_SH_CHANGE_POLICY, 748*758e9fbaSOystein Eftevaag PROVISION_LOCKOUT_CHANGE_POLICY, 749*758e9fbaSOystein Eftevaag PROVISION_FINISHED, 750*758e9fbaSOystein Eftevaag PROVISION_WRITE_SH, 751*758e9fbaSOystein Eftevaag PROVISION_WRITE_EH, 752*758e9fbaSOystein Eftevaag PROVISION_WRITE_LOCKOUT, 753*758e9fbaSOystein Eftevaag PROVISION_WRITE_LOCKOUT_PARAM, 754*758e9fbaSOystein Eftevaag PROVISION_FLUSH_SRK, 755*758e9fbaSOystein Eftevaag PROVISION_FLUSH_EK, 756*758e9fbaSOystein Eftevaag PROVISION_CHECK_FOR_VENDOR_CERT, 757*758e9fbaSOystein Eftevaag PROVISION_GET_VENDOR, 758*758e9fbaSOystein Eftevaag 759*758e9fbaSOystein Eftevaag KEY_CREATE, 760*758e9fbaSOystein Eftevaag 761*758e9fbaSOystein Eftevaag CREATE_SEAL, 762*758e9fbaSOystein Eftevaag 763*758e9fbaSOystein Eftevaag KEY_SET_CERTIFICATE_READ, 764*758e9fbaSOystein Eftevaag KEY_SET_CERTIFICATE_WRITE, 765*758e9fbaSOystein Eftevaag 766*758e9fbaSOystein Eftevaag KEY_GET_CERTIFICATE_READ, 767*758e9fbaSOystein Eftevaag 768*758e9fbaSOystein Eftevaag GET_RANDOM_WAIT_FOR_SESSION, 769*758e9fbaSOystein Eftevaag GET_RANDOM_WAIT_FOR_RANDOM, 770*758e9fbaSOystein Eftevaag GET_RANDOM_CLEANUP, 771*758e9fbaSOystein Eftevaag 772*758e9fbaSOystein Eftevaag NV_CREATE_READ_PROFILE, 773*758e9fbaSOystein Eftevaag NV_CREATE_READ_HIERARCHY, 774*758e9fbaSOystein Eftevaag NV_CREATE_AUTHORIZE_HIERARCHY, 775*758e9fbaSOystein Eftevaag NV_CREATE_GET_INDEX, 776*758e9fbaSOystein Eftevaag NV_CREATE_FIND_INDEX, 777*758e9fbaSOystein Eftevaag NV_CREATE_WAIT_FOR_SESSION, 778*758e9fbaSOystein Eftevaag 779*758e9fbaSOystein Eftevaag NV_CREATE_AUTH_SENT, 780*758e9fbaSOystein Eftevaag NV_CREATE_WRITE, 781*758e9fbaSOystein Eftevaag NV_CREATE_CALCULATE_POLICY, 782*758e9fbaSOystein Eftevaag 783*758e9fbaSOystein Eftevaag NV_WRITE_READ, 784*758e9fbaSOystein Eftevaag NV_WRITE_WRITE, 785*758e9fbaSOystein Eftevaag NV_WRITE_CLEANUP, 786*758e9fbaSOystein Eftevaag 787*758e9fbaSOystein Eftevaag NV_EXTEND_READ, 788*758e9fbaSOystein Eftevaag NV_EXTEND_WAIT_FOR_SESSION, 789*758e9fbaSOystein Eftevaag NV_EXTEND_AUTHORIZE, 790*758e9fbaSOystein Eftevaag NV_EXTEND_AUTH_SENT, 791*758e9fbaSOystein Eftevaag NV_EXTEND_WRITE, 792*758e9fbaSOystein Eftevaag NV_EXTEND_CLEANUP, 793*758e9fbaSOystein Eftevaag 794*758e9fbaSOystein Eftevaag NV_INCREMENT_READ, 795*758e9fbaSOystein Eftevaag NV_INCREMENT_WAIT_FOR_SESSION, 796*758e9fbaSOystein Eftevaag NV_INCREMENT_AUTHORIZE, 797*758e9fbaSOystein Eftevaag NV_INCREMENT_AUTH_SENT, 798*758e9fbaSOystein Eftevaag NV_INCREMENT_WRITE, 799*758e9fbaSOystein Eftevaag NV_INCREMENT_CLEANUP, 800*758e9fbaSOystein Eftevaag 801*758e9fbaSOystein Eftevaag NV_SET_BITS_READ, 802*758e9fbaSOystein Eftevaag NV_SET_BITS_WAIT_FOR_SESSION, 803*758e9fbaSOystein Eftevaag NV_SET_BITS_AUTHORIZE, 804*758e9fbaSOystein Eftevaag NV_SET_BITS_AUTH_SENT, 805*758e9fbaSOystein Eftevaag NV_SET_BITS_WRITE, 806*758e9fbaSOystein Eftevaag NV_SET_BITS_CLEANUP, 807*758e9fbaSOystein Eftevaag 808*758e9fbaSOystein Eftevaag NV_READ_READ, 809*758e9fbaSOystein Eftevaag NV_READ_WAIT, 810*758e9fbaSOystein Eftevaag NV_READ_WAIT_FOR_SESSION, 811*758e9fbaSOystein Eftevaag NV_READ_CLEANUP, 812*758e9fbaSOystein Eftevaag 813*758e9fbaSOystein Eftevaag ENTITY_DELETE_GET_FILE, 814*758e9fbaSOystein Eftevaag ENTITY_DELETE_READ, 815*758e9fbaSOystein Eftevaag ENTITY_DELETE_WAIT_FOR_SESSION, 816*758e9fbaSOystein Eftevaag ENTITY_DELETE_NULL_AUTH_SENT_FOR_KEY, 817*758e9fbaSOystein Eftevaag ENTITY_DELETE_AUTH_SENT_FOR_KEY, 818*758e9fbaSOystein Eftevaag ENTITY_DELETE_NULL_AUTH_SENT_FOR_NV, 819*758e9fbaSOystein Eftevaag ENTITY_DELETE_AUTH_SENT_FOR_NV, 820*758e9fbaSOystein Eftevaag ENTITY_DELETE_KEY, 821*758e9fbaSOystein Eftevaag ENTITY_DELETE_AUTHORIZE_NV, 822*758e9fbaSOystein Eftevaag ENTITY_DELETE_FILE, 823*758e9fbaSOystein Eftevaag ENTITY_DELETE_POLICY, 824*758e9fbaSOystein Eftevaag ENTITY_DELETE_REMOVE_DIRS, 825*758e9fbaSOystein Eftevaag 826*758e9fbaSOystein Eftevaag ENTITY_GET_TPM_BLOBS_READ, 827*758e9fbaSOystein Eftevaag 828*758e9fbaSOystein Eftevaag KEY_SIGN_WAIT_FOR_KEY, 829*758e9fbaSOystein Eftevaag KEY_SIGN_WAIT_FOR_SIGN, 830*758e9fbaSOystein Eftevaag KEY_SIGN_CLEANUP, 831*758e9fbaSOystein Eftevaag 832*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_WAIT_FOR_SESSION, 833*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_WAIT_FOR_KEY, 834*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_AUTH_SENT, 835*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_WAIT_FOR_FLUSH, 836*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_WRITE_PREPARE, 837*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_WRITE, 838*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_WAIT_FOR_KEY_AUTH, 839*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_WAIT_FOR_NV_READ, 840*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_WAIT_FOR_NV_AUTH, 841*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_WAIT_FOR_NV_CHANGE_AUTH, 842*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_HIERARCHY_CHANGE_AUTH, 843*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_HIERARCHY_READ, 844*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_HIERARCHY_AUTHORIZE, 845*758e9fbaSOystein Eftevaag ENTITY_CHANGE_AUTH_CLEANUP, 846*758e9fbaSOystein Eftevaag 847*758e9fbaSOystein Eftevaag DATA_ENCRYPT_WAIT_FOR_PROFILE, 848*758e9fbaSOystein Eftevaag DATA_ENCRYPT_WAIT_FOR_SESSION, 849*758e9fbaSOystein Eftevaag DATA_ENCRYPT_WAIT_FOR_KEY, 850*758e9fbaSOystein Eftevaag DATA_ENCRYPT_WAIT_FOR_FLUSH, 851*758e9fbaSOystein Eftevaag DATA_ENCRYPT_WAIT_FOR_RSA_ENCRYPTION, 852*758e9fbaSOystein Eftevaag DATA_ENCRYPT_CLEAN, 853*758e9fbaSOystein Eftevaag 854*758e9fbaSOystein Eftevaag DATA_DECRYPT_WAIT_FOR_PROFILE, 855*758e9fbaSOystein Eftevaag DATA_DECRYPT_WAIT_FOR_SESSION, 856*758e9fbaSOystein Eftevaag DATA_DECRYPT_WAIT_FOR_KEY, 857*758e9fbaSOystein Eftevaag DATA_DECRYPT_WAIT_FOR_FLUSH, 858*758e9fbaSOystein Eftevaag DATA_DECRYPT_WAIT_FOR_RSA_DECRYPTION, 859*758e9fbaSOystein Eftevaag DATA_DECRYPT_AUTHORIZE_KEY, 860*758e9fbaSOystein Eftevaag DATA_DECRYPT_CLEANUP, 861*758e9fbaSOystein Eftevaag 862*758e9fbaSOystein Eftevaag PCR_EXTEND_WAIT_FOR_SESSION, 863*758e9fbaSOystein Eftevaag PCR_EXTEND_WAIT_FOR_GET_CAP, 864*758e9fbaSOystein Eftevaag PCR_EXTEND_APPEND_EVENT_LOG, 865*758e9fbaSOystein Eftevaag PCR_EXTEND_FINISH, 866*758e9fbaSOystein Eftevaag PCR_EXTEND_CLEANUP, 867*758e9fbaSOystein Eftevaag 868*758e9fbaSOystein Eftevaag PCR_READ_READ_PCR, 869*758e9fbaSOystein Eftevaag PCR_READ_READ_EVENT_LIST, 870*758e9fbaSOystein Eftevaag 871*758e9fbaSOystein Eftevaag PCR_QUOTE_WAIT_FOR_GET_CAP, 872*758e9fbaSOystein Eftevaag PCR_QUOTE_WAIT_FOR_SESSION, 873*758e9fbaSOystein Eftevaag PCR_QUOTE_WAIT_FOR_KEY, 874*758e9fbaSOystein Eftevaag PCR_QUOTE_AUTH_SENT, 875*758e9fbaSOystein Eftevaag PCR_QUOTE_AUTHORIZE, 876*758e9fbaSOystein Eftevaag PCR_QUOTE_WAIT_FOR_FLUSH, 877*758e9fbaSOystein Eftevaag PCR_QUOTE_READ_EVENT_LIST, 878*758e9fbaSOystein Eftevaag PCR_QUOTE_CLEANUP, 879*758e9fbaSOystein Eftevaag 880*758e9fbaSOystein Eftevaag PATH_SET_DESCRIPTION_READ, 881*758e9fbaSOystein Eftevaag PATH_SET_DESCRIPTION_WRITE, 882*758e9fbaSOystein Eftevaag 883*758e9fbaSOystein Eftevaag PATH_GET_DESCRIPTION_READ, 884*758e9fbaSOystein Eftevaag 885*758e9fbaSOystein Eftevaag APP_DATA_SET_READ, 886*758e9fbaSOystein Eftevaag APP_DATA_SET_WRITE, 887*758e9fbaSOystein Eftevaag 888*758e9fbaSOystein Eftevaag AUTHORIZE_NEW_CALCULATE_POLICY, 889*758e9fbaSOystein Eftevaag AUTHORIZE_NEW_LOAD_KEY, 890*758e9fbaSOystein Eftevaag AUTHORIZE_NEW_KEY_SIGN_POLICY, 891*758e9fbaSOystein Eftevaag AUTHORIZE_NEW_WRITE_POLICY_PREPARE, 892*758e9fbaSOystein Eftevaag AUTHORIZE_NEW_WRITE_POLICY, 893*758e9fbaSOystein Eftevaag AUTHORIZE_NEW_CLEANUP, 894*758e9fbaSOystein Eftevaag 895*758e9fbaSOystein Eftevaag WRITE_AUTHORIZE_NV_READ_NV, 896*758e9fbaSOystein Eftevaag WRITE_AUTHORIZE_NV_CALCULATE_POLICY, 897*758e9fbaSOystein Eftevaag WRITE_AUTHORIZE_NV_WRITE_NV_RAM_PREPARE, 898*758e9fbaSOystein Eftevaag WRITE_AUTHORIZE_NV_WRITE_NV_RAM, 899*758e9fbaSOystein Eftevaag WRITE_AUTHORIZE_NV_WRITE_OBJCECT, 900*758e9fbaSOystein Eftevaag WRITE_AUTHORIZE_NV_WRITE_POLICY_PREPARE, 901*758e9fbaSOystein Eftevaag WRITE_AUTHORIZE_NV_WRITE_POLICY, 902*758e9fbaSOystein Eftevaag WRITE_AUTHORIZE_NV_CLEANUP, 903*758e9fbaSOystein Eftevaag 904*758e9fbaSOystein Eftevaag EXPORT_KEY_READ_PUB_KEY, 905*758e9fbaSOystein Eftevaag EXPORT_KEY_READ_PUB_KEY_PARENT, 906*758e9fbaSOystein Eftevaag EXPORT_KEY_WAIT_FOR_KEY, 907*758e9fbaSOystein Eftevaag EXPORT_KEY_WAIT_FOR_DUPLICATE, 908*758e9fbaSOystein Eftevaag EXPORT_KEY_WAIT_FOR_EXT_KEY, 909*758e9fbaSOystein Eftevaag EXPORT_KEY_WAIT_FOR_AUTHORIZATON, 910*758e9fbaSOystein Eftevaag EXPORT_KEY_WAIT_FOR_FLUSH1, 911*758e9fbaSOystein Eftevaag EXPORT_KEY_WAIT_FOR_FLUSH2, 912*758e9fbaSOystein Eftevaag EXPORT_KEY_CLEANUP, 913*758e9fbaSOystein Eftevaag 914*758e9fbaSOystein Eftevaag IMPORT_KEY_WRITE_POLICY, 915*758e9fbaSOystein Eftevaag IMPORT_KEY_WRITE, 916*758e9fbaSOystein Eftevaag IMPORT_KEY_SEARCH, 917*758e9fbaSOystein Eftevaag IMPORT_KEY_LOAD_PARENT, 918*758e9fbaSOystein Eftevaag IMPORT_KEY_AUTHORIZE_PARENT, 919*758e9fbaSOystein Eftevaag IMPORT_KEY_IMPORT, 920*758e9fbaSOystein Eftevaag IMPORT_KEY_WAIT_FOR_FLUSH, 921*758e9fbaSOystein Eftevaag IMPORT_KEY_WRITE_OBJECT_PREPARE, 922*758e9fbaSOystein Eftevaag IMPORT_KEY_WRITE_OBJECT, 923*758e9fbaSOystein Eftevaag IMPORT_KEY_CLEANUP, 924*758e9fbaSOystein Eftevaag 925*758e9fbaSOystein Eftevaag UNSEAL_WAIT_FOR_KEY, 926*758e9fbaSOystein Eftevaag UNSEAL_AUTHORIZE_OBJECT, 927*758e9fbaSOystein Eftevaag UNSEAL_WAIT_FOR_UNSEAL, 928*758e9fbaSOystein Eftevaag UNSEAL_WAIT_FOR_FLUSH, 929*758e9fbaSOystein Eftevaag UNSEAL_CLEANUP, 930*758e9fbaSOystein Eftevaag 931*758e9fbaSOystein Eftevaag GET_PLATFORM_CERTIFICATE, 932*758e9fbaSOystein Eftevaag 933*758e9fbaSOystein Eftevaag POLICY_EXPORT_READ_OBJECT, 934*758e9fbaSOystein Eftevaag POLICY_EXPORT_READ_OBJECT_FINISH, 935*758e9fbaSOystein Eftevaag POLICY_EXPORT_READ_POLICY, 936*758e9fbaSOystein Eftevaag POLICY_EXPORT_READ_POLICY_FINISH, 937*758e9fbaSOystein Eftevaag 938*758e9fbaSOystein Eftevaag VERIFY_QUOTE_READ, 939*758e9fbaSOystein Eftevaag 940*758e9fbaSOystein Eftevaag GET_INFO_GET_CAP, 941*758e9fbaSOystein Eftevaag GET_INFO_GET_CAP_MORE, 942*758e9fbaSOystein Eftevaag GET_INFO_WAIT_FOR_CAP 943*758e9fbaSOystein Eftevaag }; 944*758e9fbaSOystein Eftevaag 945*758e9fbaSOystein Eftevaag /** Structure holding FAPI callbacks and userData 946*758e9fbaSOystein Eftevaag * 947*758e9fbaSOystein Eftevaag * This structure holds the callback pointers and corresponding userData pointers for each of the 948*758e9fbaSOystein Eftevaag * three callback types of FAPI. They are set using Fapi_SetAuthCB, Fapi_SetBranchCB and 949*758e9fbaSOystein Eftevaag * Fapi_SetSignCB. 950*758e9fbaSOystein Eftevaag */ 951*758e9fbaSOystein Eftevaag struct IFAPI_CALLBACKS { 952*758e9fbaSOystein Eftevaag Fapi_CB_Auth auth; 953*758e9fbaSOystein Eftevaag void *authData; 954*758e9fbaSOystein Eftevaag Fapi_CB_Branch branch; 955*758e9fbaSOystein Eftevaag void *branchData; 956*758e9fbaSOystein Eftevaag Fapi_CB_Sign sign; 957*758e9fbaSOystein Eftevaag void *signData; 958*758e9fbaSOystein Eftevaag Fapi_CB_PolicyAction action; 959*758e9fbaSOystein Eftevaag void *actionData; 960*758e9fbaSOystein Eftevaag }; 961*758e9fbaSOystein Eftevaag 962*758e9fbaSOystein Eftevaag /** The data structure holding internal state information. 963*758e9fbaSOystein Eftevaag * 964*758e9fbaSOystein Eftevaag * Each FAPI_CONTEXT respresents a logically independent connection to the TPM. 965*758e9fbaSOystein Eftevaag * It stores meta data information about object in order to calculate session 966*758e9fbaSOystein Eftevaag * auths and similar things. 967*758e9fbaSOystein Eftevaag */ 968*758e9fbaSOystein Eftevaag struct FAPI_CONTEXT { 969*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys; /**< The ESYS context used internally to talk to 970*758e9fbaSOystein Eftevaag the TPM. */ 971*758e9fbaSOystein Eftevaag struct IFAPI_CALLBACKS callbacks; /**< Callbacks for user interaction from FAPI */ 972*758e9fbaSOystein Eftevaag struct IFAPI_IO io; 973*758e9fbaSOystein Eftevaag struct IFAPI_EVENTLOG eventlog; 974*758e9fbaSOystein Eftevaag struct IFAPI_KEYSTORE keystore; 975*758e9fbaSOystein Eftevaag struct IFAPI_POLICY_STORE pstore; 976*758e9fbaSOystein Eftevaag struct IFAPI_PROFILES profiles; 977*758e9fbaSOystein Eftevaag 978*758e9fbaSOystein Eftevaag enum _FAPI_STATE state; /**< The current state of the command execution */ 979*758e9fbaSOystein Eftevaag enum _FAPI_STATE_PRIMARY primary_state; /**< The current state of the primary regeneration */ 980*758e9fbaSOystein Eftevaag enum _FAPI_STATE_SESSION session_state; /**< The current state of the session creation */ 981*758e9fbaSOystein Eftevaag enum _FAPI_STATE_GET_RANDOM get_random_state; /**< The current state of get random */ 982*758e9fbaSOystein Eftevaag enum IFAPI_HIERACHY_AUTHORIZATION_STATE hierarchy_state; 983*758e9fbaSOystein Eftevaag enum IFAPI_HIERACHY_POLICY_AUTHORIZATION_STATE hierarchy_policy_state; 984*758e9fbaSOystein Eftevaag enum IFAPI_GET_CERT_STATE get_cert_state; 985*758e9fbaSOystein Eftevaag enum _FAPI_FLUSH_STATE flush_object_state; /**< The current state of a flush operation */ 986*758e9fbaSOystein Eftevaag enum IFAPI_CLEANUP_STATE cleanup_state; /**< The state of cleanup after command execution */ 987*758e9fbaSOystein Eftevaag IFAPI_CONFIG config; /**< The profile independet configuration data */ 988*758e9fbaSOystein Eftevaag UINT32 nv_buffer_max; /**< The maximal size for transfer of nv buffer content */ 989*758e9fbaSOystein Eftevaag IFAPI_CMD_STATE cmd; /**< The state information of the currently executed 990*758e9fbaSOystein Eftevaag command */ 991*758e9fbaSOystein Eftevaag IFAPI_NV_Cmds nv_cmd; 992*758e9fbaSOystein Eftevaag IFAPI_GetRandom get_random; 993*758e9fbaSOystein Eftevaag IFAPI_CreatePrimary createPrimary; 994*758e9fbaSOystein Eftevaag IFAPI_LoadKey loadKey; 995*758e9fbaSOystein Eftevaag ESYS_TR session1; /**< The first session used by FAPI */ 996*758e9fbaSOystein Eftevaag ESYS_TR session2; /**< The second session used by FAPI */ 997*758e9fbaSOystein Eftevaag ESYS_TR policy_session; /**< The policy session used by FAPI */ 998*758e9fbaSOystein Eftevaag ESYS_TR ek_handle; 999*758e9fbaSOystein Eftevaag ESYS_TR srk_handle; 1000*758e9fbaSOystein Eftevaag bool ek_persistent; 1001*758e9fbaSOystein Eftevaag bool srk_persistent; 1002*758e9fbaSOystein Eftevaag IFAPI_SESSION_TYPE session_flags; 1003*758e9fbaSOystein Eftevaag TPMA_SESSION session1_attribute_flags; 1004*758e9fbaSOystein Eftevaag TPMA_SESSION session2_attribute_flags; 1005*758e9fbaSOystein Eftevaag IFAPI_MAX_BUFFER aux_data; /**< tpm2b data to be transferred */ 1006*758e9fbaSOystein Eftevaag IFAPI_POLICY_CTX policy; /**< The context of current policy. */ 1007*758e9fbaSOystein Eftevaag IFAPI_FILE_SEARCH_CTX fsearch; /**< The context for object search in key/policy store */ 1008*758e9fbaSOystein Eftevaag IFAPI_Key_Sign Key_Sign; /**< State information for key signing */ 1009*758e9fbaSOystein Eftevaag enum IFAPI_IO_STATE io_state; 1010*758e9fbaSOystein Eftevaag NODE_OBJECT_T *object_list; 1011*758e9fbaSOystein Eftevaag IFAPI_OBJECT *duplicate_key; /**< Will be needed for policy execution */ 1012*758e9fbaSOystein Eftevaag }; 1013*758e9fbaSOystein Eftevaag 1014*758e9fbaSOystein Eftevaag #define VENDOR_IFX 0x49465800 1015*758e9fbaSOystein Eftevaag #define VENDOR_INTC 0x494E5443 1016*758e9fbaSOystein Eftevaag #define VEDNOR_IBM 0x49424D20 1017*758e9fbaSOystein Eftevaag 1018*758e9fbaSOystein Eftevaag #endif /* FAPI_INT_H */ 1019