1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /******************************************************************************* 3 * Copyright 2017-2018, Fraunhofer SIT sponsored by Infineon Technologies AG 4 * All rights reserved. 5 ******************************************************************************/ 6 #ifndef ESYS_IUTIL_H 7 #define ESYS_IUTIL_H 8 9 #include <stdbool.h> 10 #include <inttypes.h> 11 #include <string.h> 12 #include "tss2_esys.h" 13 14 #include "esys_int.h" 15 #include "esys_crypto.h" 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 /** An entry in a cpHash or rpHash table. */ 22 typedef struct { 23 TPM2_ALG_ID alg; /**< The hash algorithm. */ 24 size_t size; /**< The digest size. */ 25 uint8_t digest[sizeof(TPMU_HA)]; /**< The digest. */ 26 } HASH_TAB_ITEM; 27 28 TSS2_RC init_session_tab( 29 ESYS_CONTEXT *esysContext, 30 ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3); 31 32 void iesys_DeleteAllResourceObjects( 33 ESYS_CONTEXT *esys_context); 34 35 TSS2_RC iesys_compute_encrypt_nonce( 36 ESYS_CONTEXT *esysContext, 37 int *encryptNonceIdx, 38 TPM2B_NONCE **encryptNonce); 39 40 TSS2_RC iesys_compute_cp_hashtab( 41 ESYS_CONTEXT *esysContext, 42 const TPM2B_NAME *name1, 43 const TPM2B_NAME *name2, 44 const TPM2B_NAME *name3, 45 HASH_TAB_ITEM cp_hash_tab[3], 46 uint8_t *cpHashNum); 47 48 TSS2_RC iesys_compute_rp_hashtab( 49 ESYS_CONTEXT *esysContext, 50 const uint8_t *rpBuffer, 51 size_t rpBuffer_size, 52 HASH_TAB_ITEM rp_hash_tab[3], 53 uint8_t *rpHashNum); 54 55 TSS2_RC esys_CreateResourceObject( 56 ESYS_CONTEXT *esys_context, 57 ESYS_TR esys_handle, 58 RSRC_NODE_T **node); 59 60 TSS2_RC iesys_handle_to_tpm_handle( 61 ESYS_TR esys_handle, 62 TPM2_HANDLE *tpm_handle); 63 64 TSS2_RC esys_GetResourceObject( 65 ESYS_CONTEXT *esys_context, 66 ESYS_TR rsrc_handle, 67 RSRC_NODE_T **node); 68 69 TPM2_HT iesys_get_handle_type( 70 TPM2_HANDLE handle); 71 72 TSS2_RC iesys_finalize(ESYS_CONTEXT *context); 73 74 bool iesys_compare_name( 75 TPM2B_PUBLIC *publicInfo, 76 TPM2B_NAME *name); 77 78 TSS2_RC iesys_compute_encrypted_salt( 79 ESYS_CONTEXT *esysContext, 80 RSRC_NODE_T *tpmKeyNode, 81 TPM2B_ENCRYPTED_SECRET *encryptedSalt); 82 83 TSS2_RC iesys_gen_caller_nonces( 84 ESYS_CONTEXT *esysContext); 85 86 TSS2_RC iesys_encrypt_param( 87 ESYS_CONTEXT *esysContext, 88 TPM2B_NONCE **decryptNonce, 89 int *decryptNonceIdx); 90 91 TSS2_RC iesys_decrypt_param( 92 ESYS_CONTEXT *esysContext); 93 94 TSS2_RC iesys_check_rp_hmacs( 95 ESYS_CONTEXT *esysContext, 96 TSS2L_SYS_AUTH_RESPONSE *rspAuths, 97 HASH_TAB_ITEM rp_hash_tab[3], 98 uint8_t rpHashNum); 99 100 void iesys_compute_bound_entity( 101 const TPM2B_NAME *name, 102 const TPM2B_AUTH *auth, 103 TPM2B_NAME *bound_entity); 104 105 bool iesys_is_object_bound( 106 const TPM2B_NAME * name, 107 const TPM2B_AUTH * auth, 108 RSRC_NODE_T * session); 109 110 TSS2_RC iesys_check_sequence_async( 111 ESYS_CONTEXT *esysContext); 112 113 TSS2_RC check_session_feasibility( 114 ESYS_TR shandle1, 115 ESYS_TR shandle2, 116 ESYS_TR shandle3, 117 int mandatory); 118 119 void iesys_compute_session_value( 120 RSRC_NODE_T *session, 121 const TPM2B_NAME *name, 122 const TPM2B_AUTH *auth_value); 123 124 TSS2_RC iesys_compute_hmac( 125 RSRC_NODE_T *session, 126 HASH_TAB_ITEM cp_hash_tab[3], 127 uint8_t cpHashNum, 128 TPM2B_NONCE *decryptNonce, 129 TPM2B_NONCE *encryptNonce, 130 TPMS_AUTH_COMMAND *auth); 131 132 TSS2_RC iesys_gen_auths( 133 ESYS_CONTEXT *esysContext, 134 RSRC_NODE_T *h1, 135 RSRC_NODE_T *h2, 136 RSRC_NODE_T *h3, 137 TSS2L_SYS_AUTH_COMMAND *auths); 138 139 TSS2_RC iesys_check_response( 140 ESYS_CONTEXT * esys_context); 141 142 TSS2_RC iesys_nv_get_name( 143 TPM2B_NV_PUBLIC *publicInfo, 144 TPM2B_NAME *name); 145 146 TSS2_RC iesys_get_name( 147 TPM2B_PUBLIC *publicInfo, 148 TPM2B_NAME *name); 149 150 bool iesys_tpm_error( 151 TSS2_RC r); 152 153 #ifdef __cplusplus 154 } /* extern "C" */ 155 #endif 156 157 #endif /* ESYS_IUTIL_H */ 158