int hash(TPMI_RH_HIERARCHY hierarchyValue, TPM2B_MAX_BUFFER *data, TPMI_ALG_HASH halg, const char *outHashFilePath, const char *outTicketFilePath) { UINT32 rval; TPM2B_DIGEST outHash = { { sizeof(TPM2B_DIGEST)-2, } }; TPMT_TK_HASHCHECK validation; rval = Tss2_Sys_Hash(sysContext, 0, data, halg, hierarchyValue, &outHash, &validation, 0); if(rval != TPM_RC_SUCCESS) { printf("\n......TPM2_Hash Error. TPM Error:0x%x......\n", rval); return -1; } printf("\ntpm2_hash succ.\n\n"); printf("\nhash value(hex type): "); for(UINT16 i = 0; i < outHash.t.size; i++) printf("%02x ", outHash.t.buffer[i]); printf("\n"); printf("\nvalidation value(hex type): "); for(INT16 j = 0; j < validation.digest.t.size; j++) printf("%02x ", validation.digest.t.buffer[j]); printf("\n"); if(saveDataToFile(outHashFilePath, (UINT8 *)&outHash, sizeof(outHash))) return -2; if(saveDataToFile(outTicketFilePath, (UINT8 *)&validation, sizeof(validation))) return -3; return 0; }
// // This function does a hash on a string of data. // UINT32 TpmHash( TPMI_ALG_HASH hashAlg, UINT16 size, BYTE *data, TPM2B_DIGEST *result ) { TPM_RC rval; TPM2B_MAX_BUFFER dataSizedBuffer; UINT16 i; TSS2_SYS_CONTEXT *sysContext; dataSizedBuffer.t.size = size; for( i = 0; i < size; i++ ) dataSizedBuffer.t.buffer[i] = data[i]; sysContext = InitSysContext( 3000, resMgrTctiContext, &abiVersion ); if( sysContext == 0 ) return TSS2_APP_RC_INIT_SYS_CONTEXT_FAILED; rval = Tss2_Sys_Hash ( sysContext, 0, &dataSizedBuffer, hashAlg, TPM_RH_NULL, result, 0, 0); TeardownSysContext( &sysContext ); return rval; }