void Unmarshal_TPMS_RSA_PARMS( TSS2_SYS_CONTEXT *sysContext, TPMS_RSA_PARMS *rsaParms ) { if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( rsaParms == 0 ) return; Unmarshal_TPMT_SYM_DEF_OBJECT( sysContext, &rsaParms->symmetric ); Unmarshal_TPMT_RSA_SCHEME( sysContext, &rsaParms->scheme ); Unmarshal_UINT16( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &rsaParms->keyBits, &( SYS_CONTEXT->rval ) ); Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &rsaParms->exponent, &( SYS_CONTEXT->rval ) ); return; }
void Unmarshal_TPMA_PERMANENT( TSS2_SYS_CONTEXT *sysContext, TPMA_PERMANENT *permanent ) { void *tmp; if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( permanent == 0 ) return; tmp = (void *)permanent; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), (UINT32 *)tmp, &( SYS_CONTEXT->rval ) ); return; }
void Unmarshal_TPMA_STARTUP_CLEAR( TSS2_SYS_CONTEXT *sysContext, TPMA_STARTUP_CLEAR *startupClear ) { void *tmp; if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( startupClear == 0 ) return; tmp = (void *)startupClear; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), (UINT32 *)tmp, &( SYS_CONTEXT->rval ) ); return; }
void Unmarshal_TPMA_ALGORITHM( TSS2_SYS_CONTEXT *sysContext, TPMA_ALGORITHM *algorithm ) { void *tmp; if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( algorithm == 0 ) return; tmp = (void *)algorithm; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), (UINT32 *)tmp, &( SYS_CONTEXT->rval ) ); return; }
void Unmarshal_TPMS_NV_PUBLIC( TSS2_SYS_CONTEXT *sysContext, TPMS_NV_PUBLIC *nvPublic ) { if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( nvPublic == 0 ) return; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &nvPublic->nvIndex, &( SYS_CONTEXT->rval ) ); Unmarshal_UINT16( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &nvPublic->nameAlg, &( SYS_CONTEXT->rval ) ); Unmarshal_TPMA_NV( sysContext, &nvPublic->attributes ); UNMARSHAL_SIMPLE_TPM2B( sysContext, (TPM2B *)&nvPublic->authPolicy ); Unmarshal_UINT16( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &nvPublic->dataSize, &( SYS_CONTEXT->rval ) ); return; }
TPM_RC Tss2_Sys_Load_Complete( TSS2_SYS_CONTEXT *sysContext, TPM_HANDLE *objectHandle, TPM2B_NAME *name ) { if( sysContext == NULL ) { return( TSS2_SYS_RC_BAD_REFERENCE ); } Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), objectHandle, &(SYS_CONTEXT->rval) ); CommonComplete( sysContext ); UNMARSHAL_SIMPLE_TPM2B( sysContext, &( name->b ) ); return SYS_CONTEXT->rval; }
TPM_RC Tss2_Sys_GetTestResult_Complete( TSS2_SYS_CONTEXT *sysContext, TPM2B_MAX_BUFFER *outData, TPM_RC *testResult ) { if( sysContext == NULL ) { return( TSS2_SYS_RC_BAD_REFERENCE ); } CommonComplete( sysContext ); UNMARSHAL_SIMPLE_TPM2B( sysContext, &( outData->b ) ); Unmarshal_UINT32( SYS_CONTEXT->tpmInBuffPtr, SYS_CONTEXT->maxCommandSize, &(SYS_CONTEXT->nextData), testResult, &(SYS_CONTEXT->rval) ); return SYS_CONTEXT->rval; }
void Unmarshal_TPMS_ATTEST( TSS2_SYS_CONTEXT *sysContext, TPMS_ATTEST *attest ) { if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( attest == 0 ) return; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &attest->magic, &( SYS_CONTEXT->rval ) ); Unmarshal_UINT16( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &attest->type, &( SYS_CONTEXT->rval ) ); UNMARSHAL_SIMPLE_TPM2B_NO_SIZE_CHECK( sysContext, (TPM2B *)&attest->qualifiedSigner ); UNMARSHAL_SIMPLE_TPM2B_NO_SIZE_CHECK( sysContext, (TPM2B *)&attest->extraData ); Unmarshal_TPMS_CLOCK_INFO( sysContext, &attest->clockInfo ); Unmarshal_UINT64( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &attest->firmwareVersion, &( SYS_CONTEXT->rval ) ); Unmarshal_TPMU_ATTEST( sysContext, &attest->attested, attest->type ); return; }
void Unmarshal_TPML_ALG( TSS2_SYS_CONTEXT *sysContext, TPML_ALG *alg ) { UINT32 i; if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( alg == 0 ) return; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &alg->count, &( SYS_CONTEXT->rval ) ); for( i = 0; i < alg->count; i++ ) { Unmarshal_UINT16( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &alg->algorithms[i], &( SYS_CONTEXT->rval ) ); } return; }
void Unmarshal_TPML_TAGGED_PCR_PROPERTY( TSS2_SYS_CONTEXT *sysContext, TPML_TAGGED_PCR_PROPERTY *taggedPcrProperty ) { UINT32 i; if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( taggedPcrProperty == 0 ) return; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &taggedPcrProperty->count, &( SYS_CONTEXT->rval ) ); for( i = 0; i < taggedPcrProperty->count; i++ ) { Unmarshal_TPMS_TAGGED_PCR_SELECT( sysContext, &taggedPcrProperty->pcrProperty[i] ); } return; }
void Unmarshal_TPML_ALG_PROPERTY( TSS2_SYS_CONTEXT *sysContext, TPML_ALG_PROPERTY *algProperty ) { UINT32 i; if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( algProperty == 0 ) return; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &algProperty->count, &( SYS_CONTEXT->rval ) ); for( i = 0; i < algProperty->count; i++ ) { Unmarshal_TPMS_ALG_PROPERTY( sysContext, &algProperty->algProperties[i] ); } return; }
void Unmarshal_TPML_CCA( TSS2_SYS_CONTEXT *sysContext, TPML_CCA *cca ) { UINT32 i; if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( cca == 0 ) return; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &cca->count, &( SYS_CONTEXT->rval ) ); for( i = 0; i < cca->count; i++ ) { Unmarshal_TPMA_CC( sysContext, &cca->commandAttributes[i] ); } return; }
void Unmarshal_TPML_ECC_CURVE( TSS2_SYS_CONTEXT *sysContext, TPML_ECC_CURVE *eccCurve ) { UINT32 i; if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( eccCurve == 0 ) return; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &eccCurve->count, &( SYS_CONTEXT->rval ) ); for( i = 0; i < eccCurve->count; i++ ) { Unmarshal_UINT16( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &eccCurve->eccCurves[i], &( SYS_CONTEXT->rval ) ); } return; }
void Unmarshal_TPML_DIGEST( TSS2_SYS_CONTEXT *sysContext, TPML_DIGEST *digest ) { UINT32 i; if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( digest == 0 ) return; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &digest->count, &( SYS_CONTEXT->rval ) ); for( i = 0; i < digest->count; i++ ) { UNMARSHAL_SIMPLE_TPM2B( sysContext, (TPM2B *)&digest->digests[i] ); } return; }
void Unmarshal_TPMS_TAGGED_PCR_SELECT( TSS2_SYS_CONTEXT *sysContext, TPMS_TAGGED_PCR_SELECT *taggedPcrSelect ) { UINT32 i; if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS ) return; if( taggedPcrSelect == 0 ) return; Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &taggedPcrSelect->tag, &( SYS_CONTEXT->rval ) ); Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &taggedPcrSelect->sizeofSelect, &( SYS_CONTEXT->rval ) ); for( i = 0; i < taggedPcrSelect->sizeofSelect; i++ ) { Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &taggedPcrSelect->pcrSelect[i], &( SYS_CONTEXT->rval ) ); } return; }
TSS2_RC Tss2_Sys_ExecuteFinish( TSS2_SYS_CONTEXT *sysContext, int32_t timeout ) { TSS2_RC rval = TSS2_RC_SUCCESS; size_t responseSize = 0; UINT8 tpmError = 0; if( sysContext == 0 ) { rval = TSS2_SYS_RC_BAD_REFERENCE; } else if( SYS_CONTEXT->previousStage != CMD_STAGE_SEND_COMMAND ) { rval = TSS2_SYS_RC_BAD_SEQUENCE; } else { responseSize = SYS_CONTEXT->maxResponseSize; rval = (*( TCTI_CONTEXT )->receive) ( SYS_CONTEXT->tctiContext, (size_t *)&responseSize, SYS_CONTEXT->tpmOutBuffPtr, timeout ); } if( rval == TSS2_RC_SUCCESS ) { if( responseSize < sizeof( TPM20_ErrorResponse ) ) { rval = TSS2_SYS_RC_INSUFFICIENT_RESPONSE; } else { // Unmarshal the tag, response size, and response code here so that nextData pointer // is set up for getting response handles. This avoids having to put special code // in each Part 3 command's Complete function for this. SYS_CONTEXT->nextData = SYS_CONTEXT->tpmOutBuffPtr; Unmarshal_UINT16( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxCommandSize, &(SYS_CONTEXT->nextData), 0, &(SYS_CONTEXT->rval) ); Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxCommandSize, &(SYS_CONTEXT->nextData), (UINT32 *)&responseSize, &(SYS_CONTEXT->rval) ); if( responseSize < ( sizeof( TPM20_Header_Out ) - 1 ) ) { rval = SYS_CONTEXT->rval = TSS2_SYS_RC_INSUFFICIENT_RESPONSE; } else { Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxCommandSize, &(SYS_CONTEXT->nextData), &(SYS_CONTEXT->rval), &rval ); // Return TPM return code if no other errors have occured. if( rval == TSS2_RC_SUCCESS ) { if( SYS_CONTEXT->rval != TPM_RC_SUCCESS ) { tpmError = 1; SYS_CONTEXT->responseCode = rval = SYS_CONTEXT->rval; } } } } // If we received a TPM error other than CANCELED or if we didn't receive enough response bytes, // reset SAPI state machine to CMD_STAGE_PREPARE. There's nothing // else we can do for current command. if( ( tpmError && rval != TPM_RC_CANCELED ) || ( rval == TSS2_SYS_RC_INSUFFICIENT_RESPONSE ) ) { SYS_CONTEXT->previousStage = CMD_STAGE_PREPARE; } else { SYS_CONTEXT->previousStage = CMD_STAGE_RECEIVE_RESPONSE; SYS_CONTEXT->responseCode = SYS_CONTEXT->rval; } } return rval; }