【发布时间】:2019-08-29 15:11:56
【问题描述】:
构建一个类来封装 TPM 功能。此类的目的是使用 SRK 密钥来密封和解封数组。我到了要密封的代码部分,我需要给它一个密钥,但我不知道如何告诉它使用 SRK 密钥: 那么我使用什么作为这个调用的第二个参数(hSRKey): 结果=Tspi_Data_Seal(hEncData,hSRKey,inv.size(),inv.data(),hPcrs);
std::vector<u8> CTpm::sealVector(std::vector<u8> inv)
{
std::vector<u8> retVec;
TSS_HOBJECT hPcrs;
TSS_HOBJECT hEncData;
TSS_HKEY hSRKey;
//TSS_HOBJECT hPcrs;
//memset(hPcrs,0,sizeof(TSS_HOBJECT));
UINT32 ulPcrLen;
BYTE rbgPcrValueX;
BYTE* rbgPcrValue = &rbgPcrValueX;
// create context
result=Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_PCRS,0,&hPcrs);
if (result)
myLog->error("Unable to create context while getting FileKey. %s", Trspi_Error_String(result));
// get current value for PCR 8
result=Tspi_TPM_PcrRead(hTPM,8,&ulPcrLen,&rbgPcrValue);
if (result)
myLog->error("Unable to get Current value for PCR 8. %s", Trspi_Error_String(result));
// set value of sealed PCR 8 to current value
result=Tspi_PcrComposite_SetPcrValue(hPcrs,8,20,rbgPcrValue);
if (result)
myLog->error("Unable to set value for PCR 8. %s", Trspi_Error_String(result));
// get current value for PCR 9
result=Tspi_TPM_PcrRead(hTPM,9,&ulPcrLen,&rbgPcrValue);
if (result)
myLog->error("Unable to get Current value for PCR 9. %s", Trspi_Error_String(result));
// set value of sealed PCR 9 to current value
result=Tspi_PcrComposite_SetPcrValue(hPcrs,9,20,rbgPcrValue);
if (result)
myLog->error("Unable to set value for PCR 9. %s", Trspi_Error_String(result));
// Create an data object for sealing
result=Tspi_Context_CreateObject(hContext,TSS_OBJECT_TYPE_ENCDATA,TSS_ENCDATA_SEAL,&hEncData);
if (result)
myLog->error("Unable to create object for sealing. %s", Trspi_Error_String(result));
// sealing the key
result=Tspi_Data_Seal(hEncData,hSRKey,inv.size(),inv.data(),hPcrs);
if (result)
myLog->error("Unable to seal. %s", Trspi_Error_String(result));
return retVec;
}
我得到“无效句柄”的结果错误代码
【问题讨论】:
-
SRK 具有持久句柄 0x40000000