⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcs.c

📁 xen虚拟机源代码安装包
💻 C
📖 第 1 页 / 共 3 页
字号:
  if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) {    // unpack OutBuf to get the tag, paramSize, & returnCode    int i = BSG_UnpackList(OutBuf, 3, 			   BSG_TPM_TAG, &tag, 			   BSG_TYPE_UINT32, &paramSize, 			   BSG_TPM_COMMAND_CODE, &returnCode);        if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_AUTH1_COMMAND) {      // Extract the remaining output parameters      i += BSG_Unpack(BSG_TYPE_UINT32, OutBuf+i, outDataSize);      if (TCS_Malloc(hContext, *outDataSize, outData) == TPM_FAIL)        return TPM_SIZE;          memcpy(*outData, OutBuf+i, *outDataSize);      i += *outDataSize;      unpackAuth(privAuth, OutBuf+i);            vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d\n", paramSize);    } else       vtpmlogerror(VTPM_LOG_TCS, "TCSP_UnBind Failed with return code %s\n", tpm_get_error_name(returnCode));  }    return(returnCode);}TPM_RESULT TCSP_CreateWrapKey(TCS_CONTEXT_HANDLE hContext,   // in			      TCS_KEY_HANDLE  hWrappingKey,  // in			      TPM_ENCAUTH  KeyUsageAuth,  // in			      TPM_ENCAUTH  KeyMigrationAuth, // in			      UINT32*    pcKeySize,   // in, out			      BYTE**    prgbKey,   // in, out			      TCS_AUTH*   pAuth)    // in, out{  // setup input/output parameters block  TPM_TAG tag = TPM_TAG_RQU_AUTH1_COMMAND;  UINT32 paramSize = 0;  TPM_COMMAND_CODE ordinal = TPM_ORD_CreateWrapKey;  TPM_RESULT returnCode = TPM_SUCCESS;    // setup the TPM driver input and output buffers  TDDL_RESULT hRes = TDDL_E_FAIL;  TDDL_UINT32  InLength = TCPA_MAX_BUFFER_LENGTH;  TDDL_UINT32  OutLength = TCPA_MAX_BUFFER_LENGTH;    // check input params  if (pcKeySize == NULL || *prgbKey == NULL || pAuth == NULL)    return TPM_BAD_PARAMETER;      // Convert Byte Input parameter in the input byte stream InBuf  InLength = BSG_PackList(InBuf, 6, 			  BSG_TPM_TAG, &tag, 			  BSG_TYPE_UINT32, &paramSize, 			  BSG_TPM_COMMAND_CODE, &ordinal, 			  BSG_TYPE_UINT32, &hWrappingKey, 			  BSG_TPM_ENCAUTH, KeyUsageAuth, 			  BSG_TPM_ENCAUTH, KeyMigrationAuth);   memcpy(InBuf+InLength, *prgbKey, *pcKeySize);  InLength += *pcKeySize;  InLength += packAuth(InBuf+InLength, pAuth);  // fill paramSize again as we now have the correct size  BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2);    vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength);    // call the TPM driver  if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) {    // unpack OutBuf to get the tag, paramSize, & returnCode    int i = BSG_UnpackList(OutBuf, 3, 			   BSG_TPM_TAG, &tag, 			   BSG_TYPE_UINT32, &paramSize, 			   BSG_TPM_RESULT, &returnCode);        if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_AUTH1_COMMAND) {      // Extract the remaining output parameters      TPM_KEY wrappedKey;            i += BSG_Unpack(BSG_TPM_KEY, OutBuf+i, &wrappedKey);      unpackAuth(pAuth, OutBuf+i);            // Fill prgbKey      BYTE tempBuf[1024];      *pcKeySize = BSG_Pack(BSG_TPM_KEY, &wrappedKey, tempBuf);      if (TCS_Malloc(hContext, *pcKeySize, prgbKey) == TPM_FAIL)         return TPM_SIZE;            memcpy(*prgbKey, tempBuf, *pcKeySize);            vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d\n", paramSize);    } else       vtpmlogerror(VTPM_LOG_TCS, "TCSP_CreateWrapKey Failed with return code %s\n", tpm_get_error_name(returnCode));   }    return(returnCode);}TPM_RESULT TCSP_LoadKeyByBlob(TCS_CONTEXT_HANDLE hContext,    // in			      TCS_KEY_HANDLE  hUnwrappingKey,   // in			      UINT32    cWrappedKeyBlobSize, // in			      BYTE*    rgbWrappedKeyBlob,  // in			      TCS_AUTH*   pAuth,     // in, out			      TCS_KEY_HANDLE*  phKeyTCSI,    // out			      TCS_KEY_HANDLE*  phKeyHMAC)    // out{  // setup input/output parameters block  TPM_TAG tag = TPM_TAG_RQU_AUTH1_COMMAND;  UINT32 paramSize = 0;  TPM_COMMAND_CODE ordinal = TPM_ORD_LoadKey;  TPM_RESULT returnCode = TPM_SUCCESS;    // setup the TPM driver input and output buffers  TDDL_RESULT hRes = TDDL_E_FAIL;  TDDL_UINT32  InLength = TCPA_MAX_BUFFER_LENGTH;  TDDL_UINT32  OutLength = TCPA_MAX_BUFFER_LENGTH;    // check input params  if (rgbWrappedKeyBlob == NULL || pAuth == NULL || phKeyTCSI == NULL || phKeyHMAC == NULL)     return TPM_BAD_PARAMETER;     *phKeyHMAC = hUnwrappingKey; // the parent key is the one that the TPM use to make the HMAC calc    // Convert Byte Input parameter in the input byte stream InBuf  InLength = BSG_PackList(InBuf, 4, 			  BSG_TPM_TAG, &tag, 			  BSG_TYPE_UINT32, &paramSize, 			  BSG_TPM_COMMAND_CODE, &ordinal, 			  BSG_TYPE_UINT32, &hUnwrappingKey);  memcpy(InBuf+InLength, rgbWrappedKeyBlob, cWrappedKeyBlobSize);  InLength += cWrappedKeyBlobSize;  InLength += packAuth(InBuf+InLength, pAuth);  // fill paramSize again as we now have the correct size  BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2);    vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength);    // call the TPM driver  if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) {    // unpack OutBuf to get the tag, paramSize, & returnCode    int i = BSG_UnpackList(OutBuf, 3, 			   BSG_TPM_TAG, &tag, 			   BSG_TYPE_UINT32, &paramSize, 			   BSG_TPM_COMMAND_CODE, &returnCode);        if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_AUTH1_COMMAND) {      // Extract the remaining output parameters      i += BSG_Unpack(BSG_TYPE_UINT32, 		      OutBuf+i, 		      phKeyTCSI);      unpackAuth(pAuth, OutBuf+i);            if (!AddHandleToList(hContext, TPM_RT_KEY, *phKeyTCSI)) {        vtpmlogerror(VTPM_LOG_TCS, "New KeyHandle not recorded\n");      }            vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d\n", paramSize);     } else       vtpmlogerror(VTPM_LOG_TCS, "TCSP_LoadKeyByBlob Failed with return code %s\n", tpm_get_error_name(returnCode));  }    return(returnCode);}TPM_RESULT TCSP_EvictKey(TCS_CONTEXT_HANDLE hContext, // in			 TCS_KEY_HANDLE  hKey)  // in{  // setup input/output parameters block  TPM_TAG tag = TPM_TAG_RQU_COMMAND;  UINT32 paramSize = 0;  TPM_COMMAND_CODE ordinal = TPM_ORD_EvictKey;  TPM_RESULT returnCode = TPM_SUCCESS;    // setup the TPM driver input and output buffers  TDDL_RESULT hRes = TDDL_E_FAIL;  TDDL_UINT32  InLength = TCPA_MAX_BUFFER_LENGTH;  TDDL_UINT32  OutLength = TCPA_MAX_BUFFER_LENGTH;    // Convert Byte Input parameter in the input byte stream InBuf  InLength = BSG_PackList(InBuf, 4, 			  BSG_TPM_TAG, &tag, 			  BSG_TYPE_UINT32, &paramSize, 			  BSG_TPM_COMMAND_CODE, &ordinal, 			  BSG_TYPE_UINT32, &hKey);  // fill paramSize again as we now have the correct size  BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2);    vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength);    // call the TPM driver  if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) {    // unpack OutBuf to get the tag, paramSize, & returnCode    BSG_UnpackList(OutBuf, 3, 			   BSG_TPM_TAG, &tag, 			   BSG_TYPE_UINT32, &paramSize, 			   BSG_TPM_COMMAND_CODE, &returnCode);        if (!DeleteHandleFromList(hContext, hKey)) {      vtpmlogerror(VTPM_LOG_TCS, "KeyHandle not removed from list\n");    }	         if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_COMMAND) {      vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d\n", paramSize);    } else {      vtpmlogerror(VTPM_LOG_TCS, "TCSP_EvictKey Failed with return code %s\n", tpm_get_error_name(returnCode));    }  }    return(returnCode);}TPM_RESULT TCSP_GetRandom(TCS_CONTEXT_HANDLE hContext,  // in			  UINT32*    bytesRequested, // in, out			  BYTE**    randomBytes) // out{  // setup input/output parameters block  TPM_TAG tag = TPM_TAG_RQU_COMMAND;  UINT32 paramSize = 0;  TPM_COMMAND_CODE ordinal = TPM_ORD_GetRandom;  TPM_RESULT returnCode = TPM_SUCCESS;    // setup the TPM driver input and output buffers  TDDL_RESULT hRes = TDDL_E_FAIL;  TDDL_UINT32  InLength = TCPA_MAX_BUFFER_LENGTH;  TDDL_UINT32  OutLength = TCPA_MAX_BUFFER_LENGTH;    // check input params  if (bytesRequested == NULL || *randomBytes == NULL){    return TPM_BAD_PARAMETER;  }    // Convert Byte Input parameter in the input byte stream InBuf  InLength = BSG_PackList(InBuf, 4, 			  BSG_TPM_TAG, &tag, 			  BSG_TYPE_UINT32, &paramSize, 			  BSG_TPM_COMMAND_CODE, &ordinal, 			  BSG_TYPE_UINT32, bytesRequested);  // fill paramSize again as we now have the correct size  BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2);    vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength);    // call the TPM driver  if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) {    // unpack OutBuf to get the tag, paramSize, & returnCode    int i = BSG_UnpackList(OutBuf, 3, 			   BSG_TPM_TAG, &tag, 			   BSG_TYPE_UINT32, &paramSize, 			   BSG_TPM_COMMAND_CODE, &returnCode);        if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_COMMAND) {      // Extract the remaining output parameters      BSG_Unpack(BSG_TYPE_UINT32, OutBuf+i, bytesRequested);      if (TCS_Malloc(hContext, *bytesRequested, randomBytes) == TPM_FAIL) {        return TPM_SIZE;      }      memcpy(*randomBytes, OutBuf+i+sizeof(UINT32), *bytesRequested);            vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d\n", paramSize);    } else {      vtpmlogerror(VTPM_LOG_TCS, "TCSP_GetRandom Failed with return code %s\n", tpm_get_error_name(returnCode));    }  }    return(returnCode);}TPM_RESULT TCSP_ReadPubek(TCS_CONTEXT_HANDLE   hContext,               // in			  TPM_NONCE            antiReplay,             // in			  UINT32*              pubEndorsementKeySize,  // out			  BYTE**               pubEndorsementKey,      // out			  TPM_DIGEST*          checksum)               // out{  // setup input/output parameters block  TPM_TAG tag = TPM_TAG_RQU_COMMAND;  UINT32 paramSize = 0;  TPM_COMMAND_CODE ordinal = TPM_ORD_ReadPubek;  TPM_RESULT returnCode = TPM_SUCCESS;    // setup the TPM driver input and output buffers  TDDL_RESULT hRes = TDDL_E_FAIL;  TDDL_UINT32  InLength = TCPA_MAX_BUFFER_LENGTH;  TDDL_UINT32   OutLength = TCPA_MAX_BUFFER_LENGTH;    // check input params  if (pubEndorsementKeySize == NULL || pubEndorsementKey == NULL || checksum == NULL) {    return TPM_BAD_PARAMETER;  }    // Convert Byte Input parameter in the input byte stream InBuf  InLength = BSG_PackList(InBuf, 4, 			  BSG_TPM_TAG, &tag, 			  BSG_TYPE_UINT32, &paramSize, 			  BSG_TPM_COMMAND_CODE, &ordinal, 			  BSG_TPM_NONCE, &antiReplay);  // fill paramSize again as we now have the correct size  BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2);    vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength);    // call the TPM driver  if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) {    // unpack OutBuf to get the tag, paramSize, & returnCode    int i = BSG_UnpackList(OutBuf, 3, 			   BSG_TPM_TAG, &tag, 			   BSG_TYPE_UINT32, &paramSize, 			   BSG_TPM_COMMAND_CODE, &returnCode);        if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_COMMAND) {      // Extract the remaining output parameters      TPM_PUBKEY pubEK;      i += BSG_UnpackList(OutBuf+i, 2, 			  BSG_TPM_PUBKEY, &pubEK, 			  BSG_TPM_DIGEST, checksum);            // fill EndorsementKey      BYTE tempBuf[1024];      *pubEndorsementKeySize = BSG_Pack(BSG_TPM_PUBKEY, &pubEK, tempBuf);      if (TCS_Malloc(hContext, *pubEndorsementKeySize, pubEndorsementKey) == TPM_FAIL) {        return TPM_SIZE;      }      memcpy(*pubEndorsementKey, tempBuf, *pubEndorsementKeySize);            vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d\n", paramSize);    } else {      vtpmlogerror(VTPM_LOG_TCS, "TCSP_ReadPubek Failed with return code %s\n", tpm_get_error_name(returnCode));    }  }    return(returnCode);}TPM_RESULT TCSP_SaveState(TCS_CONTEXT_HANDLE   hContext)  // in{  // setup input/output parameters block  TPM_TAG tag = TPM_TAG_RQU_COMMAND;  UINT32 paramSize = 0;  TPM_COMMAND_CODE ordinal = TPM_ORD_SaveState;  TPM_RESULT returnCode = TPM_SUCCESS;  // setup the TPM driver input and output buffers  TDDL_RESULT hRes = TDDL_E_FAIL;  TDDL_UINT32  InLength = TCPA_MAX_BUFFER_LENGTH;  TDDL_UINT32  OutLength = TCPA_MAX_BUFFER_LENGTH;  // Convert Byte Input parameter in the input byte stream InBuf  InLength = BSG_PackList(InBuf, 3,                          BSG_TPM_TAG, &tag,                          BSG_TYPE_UINT32, &paramSize,                          BSG_TPM_COMMAND_CODE, &ordinal);  // fill paramSize again as we now have the correct size  BSG_Pack(BSG_TYPE_UINT32, &InLength, InBuf+2);  vtpmloginfo(VTPM_LOG_TCS_DEEP, "Sending paramSize = %d\n", InLength);  // call the TPM driver  if ((hRes = TDDL_TransmitData(InBuf, InLength, OutBuf, &OutLength)) == TDDL_SUCCESS) {    // unpack OutBuf to get the tag, paramSize, & returnCode    BSG_UnpackList(OutBuf, 3,                           BSG_TPM_TAG, &tag,                           BSG_TYPE_UINT32, &paramSize,                           BSG_TPM_COMMAND_CODE, &returnCode);    if (returnCode == TPM_SUCCESS && tag == TPM_TAG_RSP_COMMAND) {      vtpmloginfo(VTPM_LOG_TCS_DEEP, "Received paramSize : %d\n", paramSize);    } else {      vtpmlogerror(VTPM_LOG_TCS, "TCSP_SaveState Failed with return code %s\n", tpm_get_error_name(returnCode));    }  }  return(returnCode);}TPM_RESULT TCSP_RawTransmitData(   UINT32 inDataSize,  // in				   BYTE *inData,       // in				   UINT32 *outDataSize,// in/out				   BYTE *outData) {    // out         TDDL_RESULT hRes;    vtpmloginfo(VTPM_LOG_TCS, "Calling TransmitData directly.\n");  //FIXME: Add Context Management  hRes = TDDL_TransmitData( inData, 			    inDataSize, 			    outData, 			    outDataSize);    if (hRes == TDDL_SUCCESS) {    return TPM_SUCCESS;  } else {    vtpmlogerror(VTPM_LOG_TCS, "TCSP_RawTransmitData Failed with return code %s\n", tpm_get_error_name(TPM_IOERROR));    return TPM_IOERROR;  }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -