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_UTIL_H 7*758e9fbaSOystein Eftevaag #define FAPI_UTIL_H 8*758e9fbaSOystein Eftevaag 9*758e9fbaSOystein Eftevaag #include <stdint.h> 10*758e9fbaSOystein Eftevaag #include <stdarg.h> 11*758e9fbaSOystein Eftevaag #include <stdbool.h> 12*758e9fbaSOystein Eftevaag #include <sys/stat.h> 13*758e9fbaSOystein Eftevaag #include <json-c/json.h> 14*758e9fbaSOystein Eftevaag #include <json-c/json_util.h> 15*758e9fbaSOystein Eftevaag 16*758e9fbaSOystein Eftevaag #include "tss2_esys.h" 17*758e9fbaSOystein Eftevaag #include "tss2_fapi.h" 18*758e9fbaSOystein Eftevaag #include "fapi_int.h" 19*758e9fbaSOystein Eftevaag #include "ifapi_helpers.h" 20*758e9fbaSOystein Eftevaag 21*758e9fbaSOystein Eftevaag 22*758e9fbaSOystein Eftevaag TSS2_RC 23*758e9fbaSOystein Eftevaag ifapi_flush_object(FAPI_CONTEXT *context, ESYS_TR session); 24*758e9fbaSOystein Eftevaag 25*758e9fbaSOystein Eftevaag TSS2_RC 26*758e9fbaSOystein Eftevaag ifapi_get_session_async( 27*758e9fbaSOystein Eftevaag ESYS_CONTEXT *esys, 28*758e9fbaSOystein Eftevaag ESYS_TR saltkey, 29*758e9fbaSOystein Eftevaag const IFAPI_PROFILE*profile, 30*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hashAlg); 31*758e9fbaSOystein Eftevaag 32*758e9fbaSOystein Eftevaag TSS2_RC 33*758e9fbaSOystein Eftevaag ifapi_get_session_finish(ESYS_CONTEXT *esys, ESYS_TR *session, 34*758e9fbaSOystein Eftevaag TPMA_SESSION flags); 35*758e9fbaSOystein Eftevaag 36*758e9fbaSOystein Eftevaag TSS2_RC 37*758e9fbaSOystein Eftevaag ifapi_set_auth( 38*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 39*758e9fbaSOystein Eftevaag IFAPI_OBJECT *auth_object, 40*758e9fbaSOystein Eftevaag const char *description); 41*758e9fbaSOystein Eftevaag 42*758e9fbaSOystein Eftevaag TSS2_RC 43*758e9fbaSOystein Eftevaag ifapi_get_free_handle_async(FAPI_CONTEXT *fctx, TPM2_HANDLE *handle); 44*758e9fbaSOystein Eftevaag 45*758e9fbaSOystein Eftevaag TSS2_RC 46*758e9fbaSOystein Eftevaag ifapi_get_free_handle_finish(FAPI_CONTEXT *fctx, TPM2_HANDLE *handle, 47*758e9fbaSOystein Eftevaag TPM2_HANDLE max); 48*758e9fbaSOystein Eftevaag 49*758e9fbaSOystein Eftevaag TSS2_RC 50*758e9fbaSOystein Eftevaag ifapi_init_primary_async( 51*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 52*758e9fbaSOystein Eftevaag TSS2_KEY_TYPE ktype); 53*758e9fbaSOystein Eftevaag 54*758e9fbaSOystein Eftevaag TSS2_RC 55*758e9fbaSOystein Eftevaag ifapi_init_primary_finish( 56*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 57*758e9fbaSOystein Eftevaag TSS2_KEY_TYPE ktype); 58*758e9fbaSOystein Eftevaag 59*758e9fbaSOystein Eftevaag TSS2_RC 60*758e9fbaSOystein Eftevaag ifapi_session_init(FAPI_CONTEXT *context); 61*758e9fbaSOystein Eftevaag 62*758e9fbaSOystein Eftevaag TSS2_RC 63*758e9fbaSOystein Eftevaag ifapi_non_tpm_mode_init(FAPI_CONTEXT *context); 64*758e9fbaSOystein Eftevaag 65*758e9fbaSOystein Eftevaag void 66*758e9fbaSOystein Eftevaag ifapi_session_clean(FAPI_CONTEXT *context); 67*758e9fbaSOystein Eftevaag 68*758e9fbaSOystein Eftevaag TSS2_RC 69*758e9fbaSOystein Eftevaag ifapi_cleanup_session(FAPI_CONTEXT *context); 70*758e9fbaSOystein Eftevaag 71*758e9fbaSOystein Eftevaag void 72*758e9fbaSOystein Eftevaag ifapi_primary_clean(FAPI_CONTEXT *context); 73*758e9fbaSOystein Eftevaag 74*758e9fbaSOystein Eftevaag TSS2_RC 75*758e9fbaSOystein Eftevaag ifapi_get_sessions_async( 76*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 77*758e9fbaSOystein Eftevaag IFAPI_SESSION_TYPE session_flags, 78*758e9fbaSOystein Eftevaag TPMA_SESSION attribute_flags1, 79*758e9fbaSOystein Eftevaag TPMA_SESSION attribute_flags2); 80*758e9fbaSOystein Eftevaag 81*758e9fbaSOystein Eftevaag TSS2_RC 82*758e9fbaSOystein Eftevaag ifapi_get_sessions_finish( 83*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 84*758e9fbaSOystein Eftevaag const IFAPI_PROFILE *profile, 85*758e9fbaSOystein Eftevaag TPMI_ALG_HASH hash_alg); 86*758e9fbaSOystein Eftevaag 87*758e9fbaSOystein Eftevaag TSS2_RC 88*758e9fbaSOystein Eftevaag ifapi_merge_profile_into_nv_template( 89*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 90*758e9fbaSOystein Eftevaag IFAPI_NV_TEMPLATE *template); 91*758e9fbaSOystein Eftevaag 92*758e9fbaSOystein Eftevaag TSS2_RC 93*758e9fbaSOystein Eftevaag ifapi_merge_profile_into_template( 94*758e9fbaSOystein Eftevaag const IFAPI_PROFILE *profile, 95*758e9fbaSOystein Eftevaag IFAPI_KEY_TEMPLATE *template); 96*758e9fbaSOystein Eftevaag 97*758e9fbaSOystein Eftevaag TSS2_RC 98*758e9fbaSOystein Eftevaag ifapi_load_key_async(FAPI_CONTEXT *context, size_t position); 99*758e9fbaSOystein Eftevaag 100*758e9fbaSOystein Eftevaag TSS2_RC 101*758e9fbaSOystein Eftevaag ifapi_load_key_finish(FAPI_CONTEXT *context, bool flush_parent); 102*758e9fbaSOystein Eftevaag 103*758e9fbaSOystein Eftevaag TSS2_RC 104*758e9fbaSOystein Eftevaag ifapi_load_keys_async( 105*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 106*758e9fbaSOystein Eftevaag char const *keyPath); 107*758e9fbaSOystein Eftevaag 108*758e9fbaSOystein Eftevaag TSS2_RC 109*758e9fbaSOystein Eftevaag ifapi_load_keys_finish( 110*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 111*758e9fbaSOystein Eftevaag bool flush_parent, 112*758e9fbaSOystein Eftevaag ESYS_TR *handle, 113*758e9fbaSOystein Eftevaag IFAPI_OBJECT **key_object); 114*758e9fbaSOystein Eftevaag 115*758e9fbaSOystein Eftevaag TSS2_RC 116*758e9fbaSOystein Eftevaag ifapi_nv_read( 117*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 118*758e9fbaSOystein Eftevaag uint8_t **data, 119*758e9fbaSOystein Eftevaag size_t *size); 120*758e9fbaSOystein Eftevaag 121*758e9fbaSOystein Eftevaag void 122*758e9fbaSOystein Eftevaag ifapi_flush_policy_session( 123*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 124*758e9fbaSOystein Eftevaag ESYS_TR session, 125*758e9fbaSOystein Eftevaag TSS2_RC r); 126*758e9fbaSOystein Eftevaag 127*758e9fbaSOystein Eftevaag TSS2_RC 128*758e9fbaSOystein Eftevaag ifapi_nv_write( 129*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 130*758e9fbaSOystein Eftevaag char *nvPath, 131*758e9fbaSOystein Eftevaag size_t param_offset, 132*758e9fbaSOystein Eftevaag uint8_t const *data, 133*758e9fbaSOystein Eftevaag size_t size); 134*758e9fbaSOystein Eftevaag 135*758e9fbaSOystein Eftevaag TSS2_RC 136*758e9fbaSOystein Eftevaag ifapi_get_random( 137*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 138*758e9fbaSOystein Eftevaag size_t numBytes, 139*758e9fbaSOystein Eftevaag uint8_t **data); 140*758e9fbaSOystein Eftevaag 141*758e9fbaSOystein Eftevaag TSS2_RC 142*758e9fbaSOystein Eftevaag ifapi_load_key( 143*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 144*758e9fbaSOystein Eftevaag char const *keyPath, 145*758e9fbaSOystein Eftevaag IFAPI_OBJECT **key_object); 146*758e9fbaSOystein Eftevaag 147*758e9fbaSOystein Eftevaag TSS2_RC 148*758e9fbaSOystein Eftevaag ifapi_key_sign( 149*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 150*758e9fbaSOystein Eftevaag IFAPI_OBJECT *sig_key_object, 151*758e9fbaSOystein Eftevaag char const *padding, 152*758e9fbaSOystein Eftevaag TPM2B_DIGEST *digest, 153*758e9fbaSOystein Eftevaag TPMT_SIGNATURE **tpm_signature, 154*758e9fbaSOystein Eftevaag char **publicKey, 155*758e9fbaSOystein Eftevaag char **certificate); 156*758e9fbaSOystein Eftevaag 157*758e9fbaSOystein Eftevaag TSS2_RC 158*758e9fbaSOystein Eftevaag ifapi_authorize_object( 159*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 160*758e9fbaSOystein Eftevaag IFAPI_OBJECT *object, 161*758e9fbaSOystein Eftevaag ESYS_TR *session); 162*758e9fbaSOystein Eftevaag 163*758e9fbaSOystein Eftevaag TSS2_RC 164*758e9fbaSOystein Eftevaag ifapi_get_json( 165*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 166*758e9fbaSOystein Eftevaag IFAPI_OBJECT *object, 167*758e9fbaSOystein Eftevaag char **json_string); 168*758e9fbaSOystein Eftevaag 169*758e9fbaSOystein Eftevaag TSS2_RC 170*758e9fbaSOystein Eftevaag ifapi_key_create_prepare( 171*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 172*758e9fbaSOystein Eftevaag char const *keyPath, 173*758e9fbaSOystein Eftevaag char const *policyPath); 174*758e9fbaSOystein Eftevaag 175*758e9fbaSOystein Eftevaag TSS2_RC 176*758e9fbaSOystein Eftevaag ifapi_key_create_prepare_auth( 177*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 178*758e9fbaSOystein Eftevaag char const *keyPath, 179*758e9fbaSOystein Eftevaag char const *policyPath, 180*758e9fbaSOystein Eftevaag char const *authValue); 181*758e9fbaSOystein Eftevaag 182*758e9fbaSOystein Eftevaag TSS2_RC 183*758e9fbaSOystein Eftevaag ifapi_key_create_prepare_sensitive( 184*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 185*758e9fbaSOystein Eftevaag char const *keyPath, 186*758e9fbaSOystein Eftevaag char const *policyPath, 187*758e9fbaSOystein Eftevaag size_t dataSize, 188*758e9fbaSOystein Eftevaag char const *authValue, 189*758e9fbaSOystein Eftevaag uint8_t const *data); 190*758e9fbaSOystein Eftevaag 191*758e9fbaSOystein Eftevaag TSS2_RC 192*758e9fbaSOystein Eftevaag ifapi_key_create( 193*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 194*758e9fbaSOystein Eftevaag IFAPI_KEY_TEMPLATE *template); 195*758e9fbaSOystein Eftevaag 196*758e9fbaSOystein Eftevaag TSS2_RC 197*758e9fbaSOystein Eftevaag ifapi_get_sig_scheme( 198*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 199*758e9fbaSOystein Eftevaag IFAPI_OBJECT *object, 200*758e9fbaSOystein Eftevaag char const *padding, 201*758e9fbaSOystein Eftevaag TPM2B_DIGEST *digest, 202*758e9fbaSOystein Eftevaag TPMT_SIG_SCHEME *sig_scheme); 203*758e9fbaSOystein Eftevaag 204*758e9fbaSOystein Eftevaag TSS2_RC 205*758e9fbaSOystein Eftevaag ifapi_change_auth_hierarchy( 206*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 207*758e9fbaSOystein Eftevaag ESYS_TR handle, 208*758e9fbaSOystein Eftevaag IFAPI_OBJECT *hierarchy_object, 209*758e9fbaSOystein Eftevaag TPM2B_AUTH *newAuthValue); 210*758e9fbaSOystein Eftevaag 211*758e9fbaSOystein Eftevaag TSS2_RC 212*758e9fbaSOystein Eftevaag ifapi_change_policy_hierarchy( 213*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 214*758e9fbaSOystein Eftevaag ESYS_TR handle, 215*758e9fbaSOystein Eftevaag IFAPI_OBJECT *hierarchy_object, 216*758e9fbaSOystein Eftevaag TPMS_POLICY *policy); 217*758e9fbaSOystein Eftevaag 218*758e9fbaSOystein Eftevaag IFAPI_OBJECT 219*758e9fbaSOystein Eftevaag *ifapi_allocate_object(FAPI_CONTEXT *context); 220*758e9fbaSOystein Eftevaag 221*758e9fbaSOystein Eftevaag void 222*758e9fbaSOystein Eftevaag ifapi_free_objects(FAPI_CONTEXT *context); 223*758e9fbaSOystein Eftevaag 224*758e9fbaSOystein Eftevaag void 225*758e9fbaSOystein Eftevaag ifapi_free_object(FAPI_CONTEXT *context, IFAPI_OBJECT **object); 226*758e9fbaSOystein Eftevaag 227*758e9fbaSOystein Eftevaag TPM2_RC 228*758e9fbaSOystein Eftevaag ifapi_capability_init(FAPI_CONTEXT *context); 229*758e9fbaSOystein Eftevaag 230*758e9fbaSOystein Eftevaag TPM2_RC 231*758e9fbaSOystein Eftevaag ifapi_capability_get(FAPI_CONTEXT *context, TPM2_CAP capability, 232*758e9fbaSOystein Eftevaag UINT32 count, TPMS_CAPABILITY_DATA **capability_data); 233*758e9fbaSOystein Eftevaag 234*758e9fbaSOystein Eftevaag TSS2_RC 235*758e9fbaSOystein Eftevaag ifapi_get_certificates( 236*758e9fbaSOystein Eftevaag FAPI_CONTEXT *context, 237*758e9fbaSOystein Eftevaag UINT32 min_handle, 238*758e9fbaSOystein Eftevaag UINT32 max_handle, 239*758e9fbaSOystein Eftevaag NODE_OBJECT_T **cert_list); 240*758e9fbaSOystein Eftevaag 241*758e9fbaSOystein Eftevaag TSS2_RC 242*758e9fbaSOystein Eftevaag ifapi_initialize_object( 243*758e9fbaSOystein Eftevaag ESYS_CONTEXT *ectx, 244*758e9fbaSOystein Eftevaag IFAPI_OBJECT *object); 245*758e9fbaSOystein Eftevaag 246*758e9fbaSOystein Eftevaag TSS2_RC 247*758e9fbaSOystein Eftevaag ifapi_esys_serialize_object( 248*758e9fbaSOystein Eftevaag ESYS_CONTEXT *ectx, 249*758e9fbaSOystein Eftevaag IFAPI_OBJECT *object); 250*758e9fbaSOystein Eftevaag 251*758e9fbaSOystein Eftevaag TSS2_RC 252*758e9fbaSOystein Eftevaag ifapi_get_description(IFAPI_OBJECT *object, char **description); 253*758e9fbaSOystein Eftevaag 254*758e9fbaSOystein Eftevaag void 255*758e9fbaSOystein Eftevaag ifapi_set_description(IFAPI_OBJECT *object, char *description); 256*758e9fbaSOystein Eftevaag 257*758e9fbaSOystein Eftevaag #endif /* FAPI_UTIL_H */ 258