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