コード例 #1
0
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;
}
コード例 #2
0
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;
}
コード例 #3
0
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;
}
コード例 #4
0
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;
}
コード例 #5
0
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;
}
コード例 #6
0
ファイル: Tss2_Sys_Load.c プロジェクト: alex1818/TPM2.0-TSS
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;
}
コード例 #7
0
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;
}
コード例 #8
0
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;
}
コード例 #9
0
ファイル: Unmarshal_TPML_ALG.c プロジェクト: KunYi/TPM2.0-TSS
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;
}
コード例 #10
0
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;
}
コード例 #11
0
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;
}
コード例 #12
0
ファイル: Unmarshal_TPML_CCA.c プロジェクト: KunYi/TPM2.0-TSS
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;
}
コード例 #13
0
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;
}
コード例 #14
0
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;
}
コード例 #15
0
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;
}
コード例 #16
0
ファイル: execute.c プロジェクト: dandantx/TPM2.0-TSS
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;
}