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