コード例 #1
0
void Unmarshal_Simple_TPM2B( UINT8 *outBuffPtr, UINT32 maxResponseSize, UINT8 **nextData, TPM2B *value, TSS2_RC *rval )
{
//deleted for now--spec issues with nested TPM2B's
#if 0
    INT64 callerAllocatedSize;
#endif    
    int i;
    UINT16 length;
    
    if( *rval == TSS2_RC_SUCCESS )
    {
        if( outBuffPtr == 0 || nextData == 0 || *nextData == 0 )
        {
            *rval = TSS2_SYS_RC_BAD_REFERENCE;
        }
        else
        {
            if( *rval == TSS2_RC_SUCCESS )
            {
                length = CHANGE_ENDIAN_WORD( *(UINT16 *)*nextData );
                
                if( value != 0 )
                {
                    Unmarshal_UINT16( outBuffPtr, maxResponseSize, nextData, &( value->size ), rval );
                }
                else
                {
                    Unmarshal_UINT16( outBuffPtr, maxResponseSize, nextData, 0, rval );
                }

                if( *rval == TSS2_RC_SUCCESS )
                {
                    // Copy to output TPM2B.
                    for( i = 0; i < length; i++ )
                    {
                        if( value != 0 )
                        {
                            Unmarshal_UINT8( outBuffPtr, maxResponseSize, nextData,  &( value->buffer[i] ), rval );
                        }
                        else
                        {
                            Unmarshal_UINT8( outBuffPtr, maxResponseSize, nextData, 0, rval );
                        }

                        if( *rval != TSS2_RC_SUCCESS )
                        {
                            break;
                        }
                    }
                }
            }
        }
    }
}
コード例 #2
0
TPM_RC Tss2_Sys_PCR_Allocate_Complete(
    TSS2_SYS_CONTEXT *sysContext,
    TPMI_YES_NO	*allocationSuccess,
    UINT32	*maxPCR,
    UINT32	*sizeNeeded,
    UINT32	*sizeAvailable
    )
{
    if( sysContext == NULL )
    {
        return( TSS2_SYS_RC_BAD_REFERENCE );
    }

    CommonComplete( sysContext );

    Unmarshal_UINT8( SYS_CONTEXT->tpmInBuffPtr, SYS_CONTEXT->maxCommandSize, &(SYS_CONTEXT->nextData), allocationSuccess, &(SYS_CONTEXT->rval) );

    Unmarshal_UINT32( SYS_CONTEXT->tpmInBuffPtr, SYS_CONTEXT->maxCommandSize, &(SYS_CONTEXT->nextData), maxPCR, &(SYS_CONTEXT->rval) );

    Unmarshal_UINT32( SYS_CONTEXT->tpmInBuffPtr, SYS_CONTEXT->maxCommandSize, &(SYS_CONTEXT->nextData), sizeNeeded, &(SYS_CONTEXT->rval) );

    Unmarshal_UINT32( SYS_CONTEXT->tpmInBuffPtr, SYS_CONTEXT->maxCommandSize, &(SYS_CONTEXT->nextData), sizeAvailable, &(SYS_CONTEXT->rval) );

    return SYS_CONTEXT->rval;
}
コード例 #3
0
void Unmarshal_TPMS_PCR_SELECTION(
	TSS2_SYS_CONTEXT *sysContext,
	TPMS_PCR_SELECTION *pcrSelection
	)
{
	UINT32	i;

	if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS )
		return;

	if( pcrSelection == 0 )
		return;

	Unmarshal_UINT16( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &pcrSelection->hash, &( SYS_CONTEXT->rval ) );
	Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &pcrSelection->sizeofSelect, &( SYS_CONTEXT->rval ) );

	for( i = 0; i < pcrSelection->sizeofSelect; i++ )
	{
		Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &pcrSelection->pcrSelect[i], &( SYS_CONTEXT->rval ) );
	}

	return;
}
コード例 #4
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;
}
コード例 #5
0
void Unmarshal_TPMA_SESSION(
	TSS2_SYS_CONTEXT *sysContext,
	TPMA_SESSION *session
	)
{
	void	*tmp;

	if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS )
		return;

	if( session == 0 )
		return;

	tmp = (void *)session;
	Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), (UINT8 *)tmp, &( SYS_CONTEXT->rval ) );

	return;
}
コード例 #6
0
void Unmarshal_TPMS_CLOCK_INFO(
	TSS2_SYS_CONTEXT *sysContext,
	TPMS_CLOCK_INFO *clockInfo
	)
{
	if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS )
		return;

	if( clockInfo == 0 )
		return;

	Unmarshal_UINT64( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &clockInfo->clock, &( SYS_CONTEXT->rval ) );
	Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &clockInfo->resetCount, &( SYS_CONTEXT->rval ) );
	Unmarshal_UINT32( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &clockInfo->restartCount, &( SYS_CONTEXT->rval ) );
	Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &clockInfo->safe, &( SYS_CONTEXT->rval ) );

	return;
}
コード例 #7
0
TPM_RC Tss2_Sys_GetCapability_Complete(
    TSS2_SYS_CONTEXT *sysContext,
    TPMI_YES_NO	*moreData,
    TPMS_CAPABILITY_DATA	*capabilityData
    )
{
    if( sysContext == NULL )
    {
        return( TSS2_SYS_RC_BAD_REFERENCE );
    }

    CommonComplete( sysContext );

    Unmarshal_UINT8( SYS_CONTEXT->tpmInBuffPtr, SYS_CONTEXT->maxCommandSize, &(SYS_CONTEXT->nextData), moreData, &(SYS_CONTEXT->rval) );

    Unmarshal_TPMS_CAPABILITY_DATA( sysContext, capabilityData );

    return SYS_CONTEXT->rval;
}
コード例 #8
0
void Unmarshal_TPMU_HA(
	TSS2_SYS_CONTEXT *sysContext,
	TPMU_HA *ha,
	UINT32 selector
	)
{
	UINT32	i;

	if( SYS_CONTEXT->rval != TSS2_RC_SUCCESS )
		return;

	if( ha == 0 )
		return;

	switch( selector )
	{
#ifdef TPM_ALG_SHA
	case TPM_ALG_SHA:
		
	for( i = 0; i < SHA_DIGEST_SIZE; i++ )
	{
		Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &ha->sha[i], &( SYS_CONTEXT->rval ) );
	}
			break;
#endif
#ifdef TPM_ALG_SHA1
	case TPM_ALG_SHA1:
		
	for( i = 0; i < SHA1_DIGEST_SIZE; i++ )
	{
		Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &ha->sha1[i], &( SYS_CONTEXT->rval ) );
	}
			break;
#endif
#ifdef TPM_ALG_SHA256
	case TPM_ALG_SHA256:
		
	for( i = 0; i < SHA256_DIGEST_SIZE; i++ )
	{
		Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &ha->sha256[i], &( SYS_CONTEXT->rval ) );
	}
			break;
#endif
#ifdef TPM_ALG_SHA384
	case TPM_ALG_SHA384:
		
	for( i = 0; i < SHA384_DIGEST_SIZE; i++ )
	{
		Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &ha->sha384[i], &( SYS_CONTEXT->rval ) );
	}
			break;
#endif
#ifdef TPM_ALG_SHA512
	case TPM_ALG_SHA512:
		
	for( i = 0; i < SHA512_DIGEST_SIZE; i++ )
	{
		Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &ha->sha512[i], &( SYS_CONTEXT->rval ) );
	}
			break;
#endif
#ifdef TPM_ALG_SM3_256
	case TPM_ALG_SM3_256:
		
	for( i = 0; i < SM3_256_DIGEST_SIZE; i++ )
	{
		Unmarshal_UINT8( SYS_CONTEXT->tpmOutBuffPtr, SYS_CONTEXT->maxResponseSize, &(SYS_CONTEXT->nextData), &ha->sm3_256[i], &( SYS_CONTEXT->rval ) );
	}
			break;
#endif
#ifdef TPM_ALG_NULL
	case TPM_ALG_NULL:
					break;
#endif
	}
	return;
}