Exemplo n.º 1
0
/*
 * Logs that the testharness was unable to read or parse the testinfo.dat for
 * a test case.
 */
void LogTestDatError(FILE* ResultsFile, char* Path)
{
    LogResult(ResultsFile, SZ_BLANKDATA, SZ_BLANKDATA,
              SZ_BLANKDATA, UNKNOWN_TYPE, Path,
              TSTPHASE_BUILD, TSTRESULT_NOINFO, 0);

    LogResult(ResultsFile, SZ_BLANKDATA, SZ_BLANKDATA,
              SZ_BLANKDATA, UNKNOWN_TYPE, Path,
              TSTPHASE_EXEC, TSTRESULT_NOINFO, 0);
}
Exemplo n.º 2
0
/*
 * Logs a result the testharness was unable to change to the test case dir.
 */
void LogDirectoryError(FILE* ResultsFile, char* Path)
{
    LogResult(ResultsFile, SZ_BLANKDATA, SZ_BLANKDATA,
              SZ_BLANKDATA, UNKNOWN_TYPE, Path,
              TSTPHASE_BUILD, TSTRESULT_DIRERR,
              "HARNESS: Could not change to test case directory.");

    LogResult(ResultsFile, SZ_BLANKDATA, SZ_BLANKDATA,
              SZ_BLANKDATA, UNKNOWN_TYPE, Path,
              TSTPHASE_EXEC, TSTRESULT_DIRERR,
              "HARNESS: Could not change to test case directory.");
}
Exemplo n.º 3
0
TSS_RESULT
TCSP_GetCapability_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
			    TCPA_CAPABILITY_AREA capArea,	/* in */
			    UINT32 subCapSize,	/* in */
			    BYTE * subCap,	/* in */
			    UINT32 * respSize,	/* out */
			    BYTE ** resp)	/* out */
{
	UINT64 offset = 0;
	UINT32 paramSize;
	TSS_RESULT result;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebug("Entering Get Cap");

	if ((result = tpm_rqu_build(TPM_ORD_GetCapability, &offset, txBlob, capArea, subCapSize,
				    subCap, NULL)))
		return result;

	if ((result = req_mgr_submit_req(txBlob)))
		return result;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_GetCapability, txBlob, paramSize, respSize, resp,
				       NULL, NULL);
	}
	LogResult("Get Cap", result);
	return result;
}
Exemplo n.º 4
0
TSS_RESULT
TCSP_SetOperatorAuth_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
			      TCPA_SECRET *operatorAuth)	/* in */
{
	TSS_RESULT result;
	UINT64 offset = 0;
	UINT32 paramSize;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebugFn("Enter");

	if ((result = ctx_verify_context(hContext)))
		return result;

	if ((result = tpm_rqu_build(TPM_ORD_SetOperatorAuth, &offset, txBlob, TPM_AUTHDATA_SIZE,
				    operatorAuth->authdata)))
		return result;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);

	LogResult("SetOperatorAuth", result);
done:
	return result;
}
Exemplo n.º 5
0
///////////////////////////////////////////////////////////////
//
// CDatabaseJobQueueImpl::ProcessQuery
//
//
//
///////////////////////////////////////////////////////////////
void CDatabaseJobQueueImpl::ProcessQuery ( CDbJobData* pJobData )
{
    // CDatabaseConnection* from handle
    CDatabaseConnection* pConnection = GetConnectionFromHandle ( pJobData->command.connectionHandle );
    if ( !pConnection )
    {
        pJobData->result.status = EJobResult::FAIL;
        pJobData->result.strReason = "Invalid connection";
        return;
    }

    // And query
    if ( !pConnection->Query ( pJobData->command.strData, pJobData->result.registryResult ) )
    {
        pJobData->result.status = EJobResult::FAIL;
        pJobData->result.strReason = pConnection->GetLastErrorMessage ();
        pJobData->result.uiErrorCode = pConnection->GetLastErrorCode ();
        pJobData->result.bErrorSuppressed = MapContains ( pConnection->m_SuppressedErrorCodes, pConnection->GetLastErrorCode () );
    }
    else
    {
        pJobData->result.status = EJobResult::SUCCESS;
    }

    // And log if required
    LogResult ( pJobData );
}
Exemplo n.º 6
0
TSS_RESULT
TCSP_OwnerClear_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
			 TPM_AUTH * ownerAuth)	/* in, out */
{
	UINT64 offset = 0;
	UINT32 paramSize;
	TSS_RESULT result;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebug("Entering OwnerClear");

	if ((result = ctx_verify_context(hContext)))
		goto done;

	if ((result = auth_mgr_check(hContext, &ownerAuth->AuthHandle)))
		goto done;

	if ((result = tpm_rqu_build(TPM_ORD_OwnerClear, &offset, txBlob, ownerAuth)))
		goto done;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_OwnerClear, txBlob, paramSize, ownerAuth);
	}
	LogResult("Ownerclear", result);
done:
	auth_mgr_release_auth(ownerAuth, NULL, hContext);
	return result;
}
Exemplo n.º 7
0
TSS_RESULT
TCSP_CMK_CreateKey_Internal(TCS_CONTEXT_HANDLE	hContext,		/* in */
			    TCS_KEY_HANDLE	hWrappingKey,		/* in */
			    TPM_ENCAUTH		KeyUsageAuth,		/* in */
			    TPM_HMAC		MigAuthApproval,	/* in */
			    TPM_DIGEST		MigAuthorityDigest,	/* in */
			    UINT32*		keyDataSize,		/* in, out */
			    BYTE**		prgbKeyData,		/* in, out */
			    TPM_AUTH*		pAuth)			/* in, out */
{
	TSS_RESULT result;
	UINT64 offset = 0;
	UINT32 paramSize;
	UINT32 parentSlot;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebugFn("Enter");

	if ((result = ctx_verify_context(hContext))) {
		free(*prgbKeyData);
		return result;
	}

	if ((result = get_slot(hContext, hWrappingKey, &parentSlot))) {
		free(*prgbKeyData);
		return result;
	}

	if (pAuth) {
		if ((result = auth_mgr_check(hContext, &pAuth->AuthHandle))) {
			free(*prgbKeyData);
			return result;
		}
	}

	if ((result = tpm_rqu_build(TPM_ORD_CMK_CreateKey, &offset, txBlob,
				    parentSlot, &KeyUsageAuth, *keyDataSize, *prgbKeyData,
				    &MigAuthApproval, &MigAuthorityDigest, pAuth))) {
		free(*prgbKeyData);
		goto done;
	}
	free(*prgbKeyData);

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_CMK_CreateKey, txBlob, paramSize,
				       keyDataSize, prgbKeyData, pAuth);
	}

	LogResult("CMK_SetRestrictions", result);

done:
	auth_mgr_release_auth(pAuth, NULL, hContext);

	return result;
}
Exemplo n.º 8
0
void CBenchMarker::RunL()
	{
	iTest.Printf(_L("Starting CntModel benchmarks...\n")); // This forces the console to get loaded under WINS - would otherwise scew profiles.

	for (TInt i=0;i<ENumTests;++i)
		{
		StartProfile();
		TInt timeMinorNumber=0;
		TRAPD(err,timeMinorNumber=DoTestL(TTest(i)));
		if (err)
			{
			iLog->LogLine(_L("Test %d left with %d"),i,err);
			break;
			}

		LogResult(i,timeMinorNumber,KTimeProfileFormat,EndProfile());

		User::CompressAllHeaps();
		TMemoryInfoV1Buf memoryBuf;
		UserHal::MemoryInfo(memoryBuf);
		TMemoryInfoV1 memory(memoryBuf());
		const TInt totalK=memory.iTotalRamInBytes>>10;
		const TInt freeK=memory.iFreeRamInBytes>>10;
		const TInt usedK=totalK-freeK;
		LogResult(i,timeMinorNumber+1,KSystemMemoryFormat,usedK);
		
		TInt allocSize;
		User::Heap().AllocSize(allocSize);;
		allocSize>>=10;
		LogResult(i,timeMinorNumber+2,KThreadMemoryFormat,allocSize);
		}

	iTest.Printf(_L("Dump log to comm port? (y/n) "));
	TKeyCode key=iTest.Getch();
	if (key=='y' || key=='Y')
		{
writelog:
		iLog->WriteLogToCommPortL();
		}
	iTest.Printf(_L("\nAgain? (y/n)"));
	key=iTest.Getch();
	if (key=='y' || key=='Y')
		{
		goto writelog;
		}
	}
Exemplo n.º 9
0
TSS_RESULT
TCSP_Seal_Internal(UINT32 sealOrdinal,		/* in */
		   TCS_CONTEXT_HANDLE hContext,	/* in */
		   TCS_KEY_HANDLE keyHandle,	/* in */
		   TCPA_ENCAUTH encAuth,	/* in */
		   UINT32 pcrInfoSize,	/* in */
		   BYTE * PcrInfo,	/* in */
		   UINT32 inDataSize,	/* in */
		   BYTE * inData,	/* in */
		   TPM_AUTH * pubAuth,	/* in, out */
		   UINT32 * SealedDataSize,	/* out */
		   BYTE ** SealedData)	/* out */
{
	UINT64 offset = 0;
	TSS_RESULT result;
	UINT32 paramSize;
	TCPA_KEY_HANDLE keySlot;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebug("Entering Seal");
	if (!pubAuth)
		return TCSERR(TSS_E_BAD_PARAMETER);

	if ((result = ctx_verify_context(hContext)))
		goto done;

	if ((result = auth_mgr_check(hContext, &pubAuth->AuthHandle)))
		goto done;

	if ((result = ensureKeyIsLoaded(hContext, keyHandle, &keySlot)))
		goto done;

	/* XXX What's this check for? */
	if (keySlot == 0) {
		result = TCSERR(TSS_E_FAIL);
		goto done;
	}

	if ((result = tpm_rqu_build(sealOrdinal, &offset, txBlob, keySlot, encAuth.authdata,
				    pcrInfoSize, PcrInfo, inDataSize, inData, pubAuth)))
		return result;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	offset = 10;
	result = UnloadBlob_Header(txBlob, &paramSize);

	if (!result) {
		result = tpm_rsp_parse(sealOrdinal, txBlob, paramSize, SealedDataSize,
				       SealedData, pubAuth);
	}
	LogResult("Seal", result);
done:
	auth_mgr_release_auth(pubAuth, NULL, hContext);
	return result;
}
Exemplo n.º 10
0
TSS_RESULT
TCSP_CMK_ConvertMigration_Internal(TCS_CONTEXT_HANDLE	hContext,	/* in */
				   TCS_KEY_HANDLE	parentHandle,	/* in */
				   TPM_CMK_AUTH		restrictTicket,	/* in */
				   TPM_HMAC		sigTicket,	/* in */
				   UINT32		keyDataSize,	/* in */
				   BYTE*		prgbKeyData,	/* in */
				   UINT32		msaListSize,	/* in */
				   BYTE*		msaList,	/* in */
				   UINT32		randomSize,	/* in */
				   BYTE*		random,		/* in */
				   TPM_AUTH*		parentAuth,	/* in, out */
				   UINT32*		outDataSize,	/* out */
				   BYTE**		outData)	/* out */
{
	TSS_RESULT result;
	UINT64 offset = 0;
	UINT32 paramSize;
	UINT32 parentSlot;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebugFn("Enter");

	if ((result = ctx_verify_context(hContext)))
		return result;

	if ((result = get_slot(hContext, parentHandle, &parentSlot)))
		return result;

	if (parentAuth) {
		if ((result = auth_mgr_check(hContext, &parentAuth->AuthHandle)))
			return result;
	}

	if ((result = tpm_rqu_build(TPM_ORD_CMK_ConvertMigration, &offset, txBlob,
				    parentSlot, &restrictTicket, &sigTicket,
				    keyDataSize, prgbKeyData, msaListSize, msaList,
				    randomSize, random, parentAuth)))
		goto done;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_CMK_ConvertMigration, txBlob, paramSize,
				       outDataSize, outData, parentAuth, NULL);
	}

	LogResult("CMK_SetRestrictions", result);

done:
	auth_mgr_release_auth(parentAuth, NULL, hContext);

	return result;
}
Exemplo n.º 11
0
TSS_RESULT
TCSP_Quote2_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
		    TCS_KEY_HANDLE keyHandle,	/* in */
		    TCPA_NONCE antiReplay,	/* in */
		    UINT32 pcrDataSizeIn,	/* in */
		    BYTE * pcrDataIn,	/* in */
		    TSS_BOOL addVersion, /* in */
		    TPM_AUTH * privAuth,	/* in, out */
		    UINT32 * pcrDataSizeOut,	/* out */
		    BYTE ** pcrDataOut,	/* out */
		    UINT32 * versionInfoSize, /* out */
		    BYTE ** versionInfo, /* out */
		    UINT32 * sigSize,	/* out */
		    BYTE ** sig)	/* out */
{
	UINT64 offset = 0;
	UINT32 paramSize;
	TSS_RESULT result;
	UINT32 keySlot;

	/* Command packet to be sent to the TPM */
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebug("Entering quote2");

	if ((result = ctx_verify_context(hContext)))
		goto done;

	if (privAuth != NULL) {
		LogDebug("Auth Used");
		if ((result = auth_mgr_check(hContext, &privAuth->AuthHandle)))
			goto done;
	} else {
		LogDebug("No Auth");
	}
	if ((result = ensureKeyIsLoaded(hContext, keyHandle, &keySlot)))
		goto done;

	if ((result = tpm_rqu_build(TPM_ORD_Quote2, &offset, txBlob, keySlot, antiReplay.nonce,
				    pcrDataSizeIn, pcrDataIn, &addVersion, privAuth)))
		goto done;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_Quote2, txBlob, paramSize, pcrDataSizeOut,
				       pcrDataOut, &addVersion, versionInfoSize, versionInfo,
				       sigSize, sig, privAuth);
	}
	LogResult("Quote2", result);
done:
	auth_mgr_release_auth(privAuth, NULL, hContext);
	return result;
}
Exemplo n.º 12
0
GUID Str2GUID( __in const std::wstring&  source )
{
    GUID dest;
    static_assert( sizeof( GUID ) == sizeof( CLSID ), "GUID is not the samesize as a CLSID" );
    HRESULT hr = CLSIDFromString(source.c_str(), (LPCLSID)&dest);
    if ( FAILED( hr ) ) {
        LogResult(hr, "CLSIDFromString(%ls) Failed.", source );
        throw hr;
    }
    return dest;
}
Exemplo n.º 13
0
int main()
{
	// Case #0
	int case_zero_result = FindPath(0, 0, 3, 2, gCaseZeroMap, 4, 3, gCaseZeroBuffer, gCaseZeroBufferSize);
	LogResult(4 * 0 + 0, case_zero_result, gCaseZeroBuffer);

	// Case #1
	int case_one_result = FindPath(2, 0, 0, 2, gCaseOneMap, 3, 3, gCaseOneBuffer, gCaseOneBufferSize);
	LogResult(3 * 0 + 2, case_one_result, gCaseOneBuffer);

	// Case #2 - test with a larger map
	int result = FindPath(0, 0, 4, 5, gLargerMap, 5, 6, gLargerBuffer, gLargerBufferSize);
	LogResult(0, result, gLargerBuffer);

	// Case #3 - map with only one available path, but we can't move diagonally so it is invalid
	int one_available_result = FindPath(0, 0, 1, 1, gOneAvailableMap, 2, 2, gOneAvialableBuffer, gOneAvailableBufferSize);
	LogResult(0, one_available_result, gOneAvialableBuffer);

	// Case #4 - output buffer is too small to hold the output buffer
	int small_buffer_result = FindPath(0, 0, 3, 3, gSmallBufferMap, 4, 4, gSmallBufferBuffer, gSmallBufferBufferSize);
	LogResult(0, small_buffer_result, gSmallBufferBuffer);

	// Case #5 - huge map
	int huge_map_result = FindPath(0, 0, 0, 19, gHugeMap, 20, 20, gHugeBuffer, gHugeBufferSize);
	LogResult(0, huge_map_result, gHugeBuffer);
	
	return 0;
}
Exemplo n.º 14
0
GUID Inf2ClassGUID( __inout std::wstring& pathName, __out std::wstring& classStr ) {

    GUID ClassGUID;
    wchar_t ClassName[1+MAX_CLASS_NAME_LEN];
    std::vector< wchar_t > InfPath( 0 );
    DWORD pathSize = MAX_PATH;
    ClassName[MAX_CLASS_NAME_LEN] = L'\0';

    while ( pathSize > InfPath.size() ) {

        InfPath.resize( 1 + pathSize );

        pathSize = GetFullPathName(pathName.c_str(), static_cast<DWORD>(InfPath.size()) ,&InfPath[0], NULL);

        if ( 0 == pathSize ) {
            HRESULT hr = HRESULT_FROM_WIN32( GetLastError() );
            LogResult( hr, "GetFullPathName('%ls') Failed", pathName.c_str() );
            throw hr;
        }
    }

    //
    // Use the INF File to extract the Class GUID.
    //
    if (!SetupDiGetINFClassW(&InfPath[0],&ClassGUID,ClassName,sizeof(ClassName)/sizeof(ClassName[0]),0))
    {
        HRESULT hr = HRESULT_FROM_WIN32( GetLastError() );
        LogResult( hr, "SetupDiGetINFClass('%ls') Failed", &InfPath[0] );
        throw hr;
    }

    pathName = &InfPath[0];
    classStr = ClassName;
    return ClassGUID;

} //GUID Inf2ClassGUID( __in const std::wstring& pathName )
Exemplo n.º 15
0
TSS_RESULT
TCSP_Sign_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
		   TCS_KEY_HANDLE keyHandle,	/* in */
		   UINT32 areaToSignSize,	/* in */
		   BYTE * areaToSign,	/* in */
		   TPM_AUTH * privAuth,	/* in, out */
		   UINT32 * sigSize,	/* out */
		   BYTE ** sig	/* out */
    )
{
	UINT64 offset = 0;
	UINT32 paramSize;
	TSS_RESULT result;
	TCPA_KEY_HANDLE keySlot;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebug("Entering Sign");
	if ((result = ctx_verify_context(hContext)))
		return result;

	if (privAuth != NULL) {
		LogDebug("Auth Used");
		if ((result = auth_mgr_check(hContext, &privAuth->AuthHandle)))
			goto done;
	} else {
		LogDebug("No Auth");
	}

	if ((result = ensureKeyIsLoaded(hContext, keyHandle, &keySlot)))
		goto done;

	if ((result = tpm_rqu_build(TPM_ORD_Sign, &offset, txBlob, keySlot, areaToSignSize,
				    areaToSign, privAuth)))
		return result;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_Sign, txBlob, paramSize, sigSize, sig, privAuth,
				       NULL);
	}
	LogResult("sign", result);
done:
	auth_mgr_release_auth(privAuth, NULL, hContext);
	return result;
}
Exemplo n.º 16
0
TSS_RESULT
TCSP_CMK_CreateTicket_Internal(TCS_CONTEXT_HANDLE	hContext,		/* in */
			       UINT32			PublicVerifyKeySize,	/* in */
			       BYTE*			PublicVerifyKey,	/* in */
			       TPM_DIGEST		SignedData,		/* in */
			       UINT32			SigValueSize,		/* in */
			       BYTE*			SigValue,		/* in */
			       TPM_AUTH*		pOwnerAuth,		/* in, out */
			       TPM_HMAC*		SigTicket)		/* out */
{
	TSS_RESULT result;
	UINT64 offset = 0;
	UINT32 paramSize;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebugFn("Enter");

	if ((result = ctx_verify_context(hContext)))
		return result;

	if ((result = auth_mgr_check(hContext, &pOwnerAuth->AuthHandle)))
		return result;

	if ((result = tpm_rqu_build(TPM_ORD_CMK_CreateTicket, &offset, txBlob,
				    PublicVerifyKeySize, PublicVerifyKey, &SignedData,
				    SigValueSize, SigValue, pOwnerAuth)))
		goto done;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_CMK_CreateTicket, txBlob, paramSize,
				       SigTicket, pOwnerAuth);
	}

	LogResult("CMK_SetRestrictions", result);

done:
	auth_mgr_release_auth(pOwnerAuth, NULL, hContext);

	return result;
}
Exemplo n.º 17
0
TSS_RESULT
TCSP_CMK_ApproveMA_Internal(TCS_CONTEXT_HANDLE	hContext,		/* in */
			    TPM_DIGEST		migAuthorityDigest,	/* in */
			    TPM_AUTH*		ownerAuth,		/* in, out */
			    TPM_HMAC*		HmacMigAuthDigest)	/* out */
{
	TSS_RESULT result;
	UINT64 offset = 0;
	UINT32 paramSize;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebugFn("Enter");

	if ((result = ctx_verify_context(hContext)))
		return result;

	if ((result = auth_mgr_check(hContext, &ownerAuth->AuthHandle)))
		return result;

	if ((result = tpm_rqu_build(TPM_ORD_CMK_ApproveMA, &offset, txBlob,
				    &migAuthorityDigest, ownerAuth)))
		goto done;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_CMK_ApproveMA, txBlob, paramSize,
				       HmacMigAuthDigest, ownerAuth);
	}

	LogResult("CMK_SetRestrictions", result);

done:
	auth_mgr_release_auth(ownerAuth, NULL, hContext);

	return result;
}
Exemplo n.º 18
0
TSS_RESULT
TCSP_GetCapabilityOwner_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
				 TPM_AUTH * pOwnerAuth,		/* in / out */
				 TCPA_VERSION * pVersion,	/* out */
				 UINT32 * pNonVolatileFlags,	/* out */
				 UINT32 * pVolatileFlags)	/* out */
{
	UINT64 offset = 0;
	TSS_RESULT result;
	UINT32 paramSize;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebug("Entering Getcap owner");

	if ((result = ctx_verify_context(hContext)))
		goto done;

	if ((result = auth_mgr_check(hContext, &pOwnerAuth->AuthHandle)))
		goto done;

	if ((result = tpm_rqu_build(TPM_ORD_GetCapabilityOwner, &offset, txBlob, pOwnerAuth)))
		goto done;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_GetCapabilityOwner, txBlob, paramSize, pVersion,
				       pNonVolatileFlags, pVolatileFlags, pOwnerAuth);
	}

	LogResult("GetCapowner", result);
done:
	auth_mgr_release_auth(pOwnerAuth, NULL, hContext);
	return result;
}
Exemplo n.º 19
0
TSS_RESULT
TCSP_TakeOwnership_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
			    UINT16 protocolID,	/* in */
			    UINT32 encOwnerAuthSize,	/* in  */
			    BYTE * encOwnerAuth,	/* in */
			    UINT32 encSrkAuthSize,	/* in */
			    BYTE * encSrkAuth,	/* in */
			    UINT32 srkInfoSize,	/*in */
			    BYTE * srkInfo,	/*in */
			    TPM_AUTH * ownerAuth,	/* in, out */
			    UINT32 * srkKeySize,	/*out */
			    BYTE ** srkKey)	/*out */
{
	UINT64 offset;
	UINT32 paramSize;
	TSS_RESULT result;
	TSS_KEY srkKeyContainer;
	BYTE fake_pubkey[256] = { 0, }, fake_srk[2048] = { 0, };
	BYTE oldAuthDataUsage;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	if ((result = ctx_verify_context(hContext)))
		goto done;

	if ((result = auth_mgr_check(hContext, &ownerAuth->AuthHandle)))
		goto done;

	/* Check on the Atmel Bug Patch */
	offset = 0;
	UnloadBlob_TSS_KEY(&offset, srkInfo, &srkKeyContainer);
	oldAuthDataUsage = srkKeyContainer.authDataUsage;
	LogDebug("auth data usage is %.2X", oldAuthDataUsage);

	offset = 0;
	if ((result = tpm_rqu_build(TPM_ORD_TakeOwnership, &offset, txBlob, protocolID,
				    encOwnerAuthSize, encOwnerAuth, encSrkAuthSize, encSrkAuth,
				    srkInfoSize, srkInfo, ownerAuth)))
		return result;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		if ((result = tpm_rsp_parse(TPM_ORD_TakeOwnership, txBlob, paramSize, srkKeySize,
					    srkKey, ownerAuth)))
			goto done;

		offset = 0;
		if ((result = UnloadBlob_TSS_KEY(&offset, *srkKey, &srkKeyContainer))) {
			*srkKeySize = 0;
			free(*srkKey);
			goto done;
		}

		if (srkKeyContainer.authDataUsage != oldAuthDataUsage) {
			LogDebug("AuthDataUsage was changed by TPM.  Atmel Bug. Fixing it in PS");
			srkKeyContainer.authDataUsage = oldAuthDataUsage;
		}

#ifdef TSS_BUILD_PS
		{
			BYTE *save;

			/* Once the key file is created, it stays forever. There could be
			 * migratable keys in the hierarchy that are still useful to someone.
			 */
			result = ps_remove_key(&SRK_UUID);
			if (result != TSS_SUCCESS && result != TCSERR(TSS_E_PS_KEY_NOTFOUND)) {
				destroy_key_refs(&srkKeyContainer);
				LogError("Error removing SRK from key file.");
				*srkKeySize = 0;
				free(*srkKey);
				goto done;
			}

			/* Set the SRK pubkey to all 0's before writing the SRK to disk, this is for
			 * privacy reasons as outlined in the TSS spec */
			save = srkKeyContainer.pubKey.key;
			srkKeyContainer.pubKey.key = fake_pubkey;
			offset = 0;
			LoadBlob_TSS_KEY(&offset, fake_srk, &srkKeyContainer);

			if ((result = ps_write_key(&SRK_UUID, &NULL_UUID, NULL, 0, fake_srk,
						   offset))) {
				destroy_key_refs(&srkKeyContainer);
				LogError("Error writing SRK to disk");
				*srkKeySize = 0;
				free(*srkKey);
				goto done;
			}

			srkKeyContainer.pubKey.key = save;
		}
#endif
		if ((result = mc_add_entry_init(SRK_TPM_HANDLE, SRK_TPM_HANDLE, &srkKeyContainer,
					        &SRK_UUID))) {
			destroy_key_refs(&srkKeyContainer);
			LogError("Error creating SRK mem cache entry");
			*srkKeySize = 0;
			free(*srkKey);
		}
		destroy_key_refs(&srkKeyContainer);
	}
	LogResult("TakeOwnership", result);
done:
	auth_mgr_release_auth(ownerAuth, NULL, hContext);
	return result;
}
Exemplo n.º 20
0
GUID ClassName2GUID( __in const std::wstring& ClassName ) {

    GUID ClassGUID;
    HRESULT hr = E_FAIL;

    if ( ClassName.empty() ) {
        throw std::runtime_error( "Unable to convert empty string from class name to GUID" );
    }

    AutoCloseHKey hKeyClass, hKey;
    LONG lResult = RegOpenKeyEx( HKEY_LOCAL_MACHINE, TEXT("SYSTEM\\CurrentControlSet\\Control\\Class"), 
        0, KEY_ENUMERATE_SUB_KEYS, hKeyClass );
    if ( ERROR_SUCCESS != lResult ) {
        // Couldn't open the Class key to find key names underneath.
        hr = HRESULT_FROM_WIN32( lResult );
        LogResult( hr, "Unable to open Registry Key HKLM\\SYSTEM\\CurrentControlSet\\Control\\Class" );
        throw hr;
    }

    BOOL found = FALSE;
    wchar_t buffer[MAX_PATH];
    DWORD bufferSize = 0;
    for ( DWORD i = 0; FAILED(hr); ++i ) {

        bufferSize = MAX_PATH; // size of subkeyName in characters (not bytes)
        lResult = RegEnumKeyExW( hKeyClass, i, buffer, &bufferSize, NULL, NULL, NULL, NULL );
        if ( ERROR_SUCCESS != lResult ) {
            hr = HRESULT_FROM_WIN32( lResult );
            if ( ERROR_NO_MORE_ITEMS == lResult ) {
                LogResult( hr, "Class name not found in registry." );
                throw hr;
            } else {
                LogResult( hr, "RegEnumKeyEx() Failed." );
                throw hr;
            }
        }

        lResult = RegOpenKeyExW( hKeyClass, buffer, 0, KEY_QUERY_VALUE, hKey );
        if ( ERROR_SUCCESS != lResult ) {
            hr = HRESULT_FROM_WIN32( lResult );
            LogResult( hr, "Registry key '%ls' could not be opened.", buffer );
        } else {
            wchar_t classBuffer[MAX_PATH];
            DWORD classSize = sizeof(classBuffer); // size in bytes (not characters)
            DWORD dataType = REG_SZ;

            lResult = RegQueryValueExW( hKey, L"Class", NULL, &dataType,
                (LPBYTE)classBuffer, &classSize );
            if ( ERROR_SUCCESS == lResult 
                && REG_SZ == dataType
                && 0 == _wcsicmp( classBuffer, ClassName.c_str() ) 
                ) {
                    try
                    {
                        ClassGUID = Str2GUID( buffer );
                        hr = S_OK;
                    }
                    catch( HRESULT err)
                    {
                        hr = err;
                    }
            }
            hKey.Close();
        }

    } // FOR loop incrementing i.

    if ( FAILED( hr ) ) {
        LogResult( hr, "Unable to find class GUID by name" );
    }
    return ClassGUID;
} // ClassName2GUID
Exemplo n.º 21
0
TInt CBenchMarker::DoTestL(TTest aTest)
	{
	TInt timeMinorNumber=0;
	iLog->Log(_L("Test   #%d   "),aTest);
	TPtrC match;

	switch (aTest)
		{
		case EOpenNewDb:
			iLog->LogLine(_L("Open new database"));
			if (iNoDataGenerationTests)
				{
				iDb=CContactDatabase::OpenL(iDbFileName);
				}
			else
				{
				iDb=CContactDatabase::ReplaceL(iDbFileName);
				LogResult(aTest,0,KFileSizeText,DbFileSize());
				timeMinorNumber=1;
				}
			iGenerator->SetDbL(*iDb);
			break;
		case ECreateSecondaryClients:
			iLog->LogLine(_L("Create %d secondary client threads"),KNumSecondaryClients);
			CreateSecondaryClients();
			break;
		case EAddContacts:
			iLog->LogLine(_L("Add %d typical and %d atypical contacts"),iNumTypicalContacts,iNumAtypicalContacts);
			if (!iNoDataGenerationTests)
				{
				LogResult(aTest,0,KAverageTimeText,AddContactsL());
				LogResult(aTest,1,KFileSizeText,DbFileSize());
				timeMinorNumber=2;
				}
			break;
		case ECompactDb:
			iLog->LogLine(_L("Compact database"));
			if (!iNoDataGenerationTests)
				{
				iDb->CompactL();
				LogResult(aTest,0,KFileSizeText,DbFileSize());
				timeMinorNumber=1;
				}
			break;
		case EAddAndCompact:
			iLog->LogLine(_L("Add %d typical and %d atypical contacts (compact after each)"),iNumTypicalContactsCompact,iNumAtypicalContactsCompact);
			if (!iNoDataGenerationTests)
				{
				LogResult(aTest,0,KAverageTimeText,AddContactsCompactL());
				LogResult(aTest,1,KFileSizeText,DbFileSize());
				timeMinorNumber=2;
				}
			break;
		case EGetSortedItems:
			iLog->LogLine(_L("Get sorted id array by firstname, lastname, company name"));
			DoSortL();
			break;
		case ELogContactSummary:
			iLog->LogLine(_L("Log contact summary"));
			LogContactSummaryL(EFalse);
			break;
		case ELogContactSummaryFast:
			iLog->LogLine(_L("Log contact summary using TContactTextDefItem"));
			LogContactSummaryL(ETrue);
			break;
		case EOpenRContactView:
			iLog->LogLine(_L("Open RContactView"));
			OpenRContactViewL();
			break;
		case ESetSortOrderOfRContactView:
			iLog->LogLine(_L("Set order of RContactView"));
			SetSortOrderOfRContactViewL();
			break;
		case EGetSortOrderOfRContactView:
			iLog->LogLine(_L("Get order of RContactView"));
			GetSortOrderOfRContactViewL();
			break;
		case ELogContactSummaryWithRContactView:
			iLog->LogLine(_L("Log contact summary using RContactView"));
			LogContactSummaryFromRContactViewL(EFalse);
			break;
		case ELogContactSummaryFastWithRContactView:
			iLog->LogLine(_L("Log contact summary using RContactView and TContactTextDefItem"));
			LogContactSummaryFromRContactViewL(ETrue);
			break;
		case EFindWithRContactView:
			iLog->LogLine(_L("Find TContactItemId from RContactView"));
			FindInRContactViewL();
			break;
		case ECloseRContactView:
			iLog->LogLine(_L("Close RContactView"));
#ifdef __USE_NEW_INTERFACES
			iSortedIdList.Close();
#endif
			break;
		case EFindFromLargeFieldSetSuceed:
			match.Set(iGenerator->NameMatch());
			iLog->LogLine(_L("FindLC %S using large field set (will suceed)"),&match);
			FindFromLargeFieldSetL(match);
			break;
		case EFindFromLargeFieldSetFail:
			iLog->LogLine(_L("FindLC %S using large field set (will fail)"),&KNameMatchFail);
			FindFromLargeFieldSetL(KNameMatchFail);
			break;
		case EFindFromSmallFieldSetSuceed:
			match.Set(iGenerator->NameMatch());
			iLog->LogLine(_L("FindLC %S using small field set (will suceed)"),&match);
			FindFromSmallFieldSetL(match);
			break;
		case EFindFromSmallFieldSetFail:
			iLog->LogLine(_L("FindLC %S using small field set (will fail)"),&KNameMatchFail);
			FindFromSmallFieldSetL(KNameMatchFail);
			break;
		case EFindPhoneNumberSuceed:
			match.Set(iGenerator->PhoneMatch());
			iLog->LogLine(_L("FindLC %S using just phone field (will suceed)"),&match);
			FindPhoneNumberL(match);
			break;
		case EFindPhoneNumberFail:
			iLog->LogLine(_L("FindLC %S using just phone field (will fail)"),&KPhoneMatchFail);
			FindPhoneNumberL(KPhoneMatchFail);
			break;
		case EFindEmailAddressSuceed:
			match.Set(iGenerator->EmailMatch());
			iLog->LogLine(_L("FindLC %S using just email field (will suceed)"),&match);
			FindEmailAddressL(match);
			break;
		case EFindEmailAddressFail:
			iLog->LogLine(_L("FindLC %S using just email field (will fail)"),&KNameMatchFail);
			FindEmailAddressL(KNameMatchFail);
			break;
		case EFindAsyncFromLargeFieldSet:
			iLog->LogLine(_L("FindAsyncL %S using large field set"),&KAsyncFindMatch);
			FindAsyncFromLargeFieldSetL(KAsyncFindMatch);
			break;
		case EFindAsyncFromSmallFieldSet:
			iLog->LogLine(_L("FindAsyncL %S using small field set"),&KAsyncFindMatch);
			FindAsyncFromSmallFieldSetL(KAsyncFindMatch);
			break;
		case ECloseDb:
			iLog->LogLine(_L("Close database"));
			delete iDb;
			iDb=NULL;
			break;
		case ECloseSecondaryClients:
			iLog->LogLine(_L("Close secondary clients"));
			CloseSecondaryClients();
			break;
		case EOpenExistingDb:
			iLog->LogLine(_L("Open existing database"));
			iDb=CContactDatabase::OpenL(iDbFileName);
			break;
		case EMultiClientSort:
			iLog->LogLine(_L("%d client simultaneous sort"),KNumSortClients);
			CreateSortClients();
			break;
		case ENumTests:
			ASSERT(EFalse);
			break;
		}

	return timeMinorNumber;
	}
Exemplo n.º 22
0
TSS_RESULT
TCSP_CMK_CreateBlob_Internal(TCS_CONTEXT_HANDLE	hContext,		/* in */
			     TCS_KEY_HANDLE	parentHandle,		/* in */
			     TSS_MIGRATE_SCHEME	migrationType,		/* in */
			     UINT32		MigrationKeyAuthSize,	/* in */
			     BYTE*		MigrationKeyAuth,	/* in */
			     TPM_DIGEST		PubSourceKeyDigest,	/* in */
			     UINT32		msaListSize,		/* in */
			     BYTE*		msaList,		/* in */
			     UINT32		restrictTicketSize,	/* in */
			     BYTE*		restrictTicket,		/* in */
			     UINT32		sigTicketSize,		/* in */
			     BYTE*		sigTicket,		/* in */
			     UINT32		encDataSize,		/* in */
			     BYTE*		encData,		/* in */
			     TPM_AUTH*		parentAuth,		/* in, out */
			     UINT32*		randomSize,		/* out */
			     BYTE**		random,			/* out */
			     UINT32*		outDataSize,		/* out */
			     BYTE**		outData)		/* out */
{
	TSS_RESULT result;
	UINT64 offset = 0;
	UINT32 paramSize;
	UINT32 parentSlot;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebugFn("Enter");

	if ((result = ctx_verify_context(hContext)))
		return result;

	if ((result = get_slot(hContext, parentHandle, &parentSlot)))
		return result;

	if (parentAuth) {
		if ((result = auth_mgr_check(hContext, &parentAuth->AuthHandle)))
			return result;
	}

	if ((result = tpm_rqu_build(TPM_ORD_CMK_CreateBlob, &offset, txBlob,
				    parentSlot, migrationType, MigrationKeyAuthSize,
				    MigrationKeyAuth, &PubSourceKeyDigest, msaListSize, msaList,
				    restrictTicketSize, restrictTicket, sigTicketSize, sigTicket,
				    encDataSize, encData, parentAuth)))
		goto done;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_CMK_CreateBlob, txBlob, paramSize,
				       randomSize, random, outDataSize, outData, parentAuth, NULL);
	}

	LogResult("CMK_SetRestrictions", result);

done:
	auth_mgr_release_auth(parentAuth, NULL, hContext);

	return result;
}
Exemplo n.º 23
0
TSS_RESULT
TCSP_CertifyKey_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
			 TCS_KEY_HANDLE certHandle,	/* in */
			 TCS_KEY_HANDLE keyHandle,	/* in */
			 TCPA_NONCE antiReplay,	/* in */
			 TPM_AUTH * certAuth,	/* in, out */
			 TPM_AUTH * keyAuth,	/* in, out */
			 UINT32 * CertifyInfoSize,	/* out */
			 BYTE ** CertifyInfo,	/* out */
			 UINT32 * outDataSize,	/* out */
			 BYTE ** outData)	/* out */
{
	UINT64 offset = 0;
	UINT32 paramSize;
	TSS_RESULT result;
	TCPA_KEY_HANDLE certKeySlot, keySlot;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebug("Entering Certify Key");
	if ((result = ctx_verify_context(hContext)))
		goto done;

	if (certAuth != NULL) {
		LogDebug("Auth Used for Cert signing key");
		if ((result = auth_mgr_check(hContext, &certAuth->AuthHandle)))
			goto done;
	} else {
		LogDebug("No Auth used for Cert signing key");
	}

	if (keyAuth != NULL) {
		LogDebug("Auth Used for Key being signed");
		if ((result = auth_mgr_check(hContext, &keyAuth->AuthHandle)))
			goto done;
	} else {
		LogDebug("No Auth used for Key being signed");
	}

	if ((result = ensureKeyIsLoaded(hContext, certHandle, &certKeySlot)))
		goto done;

	if ((result = ensureKeyIsLoaded(hContext, keyHandle, &keySlot)))
		goto done;

	if ((result = tpm_rqu_build(TPM_ORD_CertifyKey, &offset, txBlob, certKeySlot, keySlot,
				    antiReplay.nonce, certAuth, keyAuth)))
		goto done;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	result = UnloadBlob_Header(txBlob, &paramSize);
	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_CertifyKey, txBlob, paramSize, CertifyInfoSize,
				       CertifyInfo, outDataSize, outData, certAuth, keyAuth);
	}
	LogResult("Certify Key", result);
done:
	auth_mgr_release_auth(certAuth, keyAuth, hContext);
	return result;
}
Exemplo n.º 24
0
TSS_RESULT
TCSP_Unseal_Internal(TCS_CONTEXT_HANDLE hContext,	/* in */
		     TCS_KEY_HANDLE parentHandle,	/* in */
		     UINT32 SealedDataSize,	/* in */
		     BYTE * SealedData,	/* in */
		     TPM_AUTH * parentAuth,	/* in, out */
		     TPM_AUTH * dataAuth,	/* in, out */
		     UINT32 * DataSize,	/* out */
		     BYTE ** Data)	/* out */
{
	UINT64 offset = 0;
	UINT32 paramSize;
	TSS_RESULT result;
	TCPA_KEY_HANDLE keySlot;
	BYTE txBlob[TSS_TPM_TXBLOB_SIZE];

	LogDebug("Entering Unseal");

	if (dataAuth == NULL)
		return TCSERR(TSS_E_BAD_PARAMETER);

	if ((result = ctx_verify_context(hContext)))
		goto done;

	if (parentAuth != NULL) {
		LogDebug("Auth used");
		if ((result = auth_mgr_check(hContext, &parentAuth->AuthHandle)))
			goto done;
	} else {
		LogDebug("No Auth");
	}

	if ((result = auth_mgr_check(hContext, &dataAuth->AuthHandle)))
		goto done;

	if ((result = ensureKeyIsLoaded(hContext, parentHandle, &keySlot)))
		goto done;

	/* XXX What's this check for? */
	if (keySlot == 0) {
		result = TCSERR(TSS_E_FAIL);
		goto done;
	}

	if ((result = tpm_rqu_build(TPM_ORD_Unseal, &offset, txBlob, keySlot, SealedDataSize,
				    SealedData, parentAuth, dataAuth)))
		return result;

	if ((result = req_mgr_submit_req(txBlob)))
		goto done;

	offset = 10;
	result = UnloadBlob_Header(txBlob, &paramSize);

	if (!result) {
		result = tpm_rsp_parse(TPM_ORD_Unseal, txBlob, paramSize, DataSize, Data,
				       parentAuth, dataAuth);
	}
	LogResult("Unseal", result);
done:
	auth_mgr_release_auth(parentAuth, dataAuth, hContext);
	return result;
}
Exemplo n.º 25
0
/*
 * Logs that the testharness was unable to read or parse the testconfig.dat
 */
void LogConfigFileError(FILE* ResultsFile, char* path)
{
    LogResult(ResultsFile, SZ_BLANKDATA, SZ_BLANKDATA,
              SZ_BLANKDATA, UNKNOWN_TYPE, path,
              "CONFIG", "HARNESS: Error in the testconfig.dat file.", 0);
}
Exemplo n.º 26
0
BOOL roadmap_thread_run ( RMThreadFunc func, void* context, RMThreadPriority priority, const char* name, BOOL separate_thread )
{
	pthread_t thread_id;

	if ( separate_thread )
	{
	   struct sched_param params;
	   pthread_attr_t attr;
	   int retVal;
	   RMThreadContext* thread_context;

	   /*
	   int min_priority;
	   int cur_priority;
	   int cur_policy;

	   retVal = pthread_getschedparam( pthread_self(), &cur_policy, &cur_param );
	   LogResult( retVal, "pthread_getschedparam. ", ROADMAP_ERROR );

	   min_priority = sched_get_priority_min( cur_policy );
	   LogResult( retVal, "sched_get_priority_min. ", ROADMAP_ERROR );

	   cur_priority = cur_param.sched_priority;
	   cur_param.sched_priority = min_priority;

	   pthread_attr_init ( &attr );
	   LogResult( retVal, "pthread_attr_init. ", ROADMAP_ERROR );
	   pthread_attr_setschedparam( &attr, &cur_param );
	   LogResult( retVal, "pthread_attr_setschedparam. ", ROADMAP_ERROR );
	    */


	   /*
	    * Set the thread attributes to match the requested priority
	    */
	   retVal = pthread_attr_init ( &attr );
	   LogResult( retVal, "pthread_attr_init. ", ROADMAP_ERROR );

	   params.sched_priority = android_thread_priority( priority );

	   retVal = pthread_attr_setschedparam( &attr, &params );
	   LogResult( retVal, "pthread_attr_setschedparam. ", ROADMAP_ERROR );

	   /*
	    * Preparing the thread context
	    */
	   thread_context = malloc( sizeof( RMThreadContext ) );
	   roadmap_check_allocated( thread_context );
	   thread_context->func = func;
	   thread_context->context = context;
	   /*
	    * Starting the thread
	    */
	   retVal = pthread_create( &thread_id, &attr, ( void *(*)(void *) ) roadmap_thread_func_wrapper, thread_context );
	   LogResult( retVal, "pthread_create. ", ROADMAP_ERROR );
	}
	else
	{
		/*
		 * There is no async implementation meanwhile just execute synchronously
		 */
		func( context );
	}
	return TRUE;
}
Exemplo n.º 27
0
/*
 * Log that the testharness was unable to build the command to execute the
 * test.
 */
void LogCommandLineError(FILE* ResultsFile, char* Path)
{
    LogResult(ResultsFile, SZ_BLANKDATA, SZ_BLANKDATA,
              SZ_BLANKDATA, UNKNOWN_TYPE, Path,
              TSTPHASE_EXEC, "HARNESS: Unable to build command line", 0);
}