📄 rpc_cmk.c
字号:
if (getData(TCSD_PACKET_TYPE_UINT32, 3, &migKeyAuthSize, 0, &data->comm)) return TCSERR(TSS_E_INTERNAL_ERROR); migKeyAuth = malloc(migKeyAuthSize); if (migKeyAuth == NULL) { LogError("malloc of %u bytes failed.", migKeyAuthSize); return TCSERR(TSS_E_OUTOFMEMORY); } if (getData(TCSD_PACKET_TYPE_PBYTE, 4, migKeyAuth, migKeyAuthSize, &data->comm)) { free(migKeyAuth); return TCSERR(TSS_E_INTERNAL_ERROR); } if (getData(TCSD_PACKET_TYPE_DIGEST, 5, &pubSourceKeyDigest, 0, &data->comm)) { free(migKeyAuth); return TCSERR(TSS_E_INTERNAL_ERROR); } if (getData(TCSD_PACKET_TYPE_UINT32, 6, &msaListSize, 0, &data->comm)) { free(migKeyAuth); return TCSERR(TSS_E_INTERNAL_ERROR); } msaList = malloc(msaListSize); if (msaList == NULL) { LogError("malloc of %u bytes failed.", msaListSize); free(migKeyAuth); return TCSERR(TSS_E_OUTOFMEMORY); } if (getData(TCSD_PACKET_TYPE_PBYTE, 7, msaList, msaListSize, &data->comm)) { free(migKeyAuth); free(msaList); return TCSERR(TSS_E_INTERNAL_ERROR); } if (getData(TCSD_PACKET_TYPE_UINT32, 8, &restrictTicketSize, 0, &data->comm)) { free(migKeyAuth); free(msaList); return TCSERR(TSS_E_INTERNAL_ERROR); } restrictTicket = malloc(restrictTicketSize); if (restrictTicket == NULL) { LogError("malloc of %u bytes failed.", restrictTicketSize); free(migKeyAuth); free(msaList); return TCSERR(TSS_E_OUTOFMEMORY); } if (getData(TCSD_PACKET_TYPE_PBYTE, 9, restrictTicket, restrictTicketSize, &data->comm)) { free(migKeyAuth); free(msaList); free(restrictTicket); return TCSERR(TSS_E_INTERNAL_ERROR); } if (getData(TCSD_PACKET_TYPE_UINT32, 10, &sigTicketSize, 0, &data->comm)) { free(migKeyAuth); free(msaList); free(restrictTicket); return TCSERR(TSS_E_INTERNAL_ERROR); } sigTicket = malloc(sigTicketSize); if (sigTicket == NULL) { LogError("malloc of %u bytes failed.", sigTicketSize); free(migKeyAuth); free(msaList); free(restrictTicket); return TCSERR(TSS_E_OUTOFMEMORY); } if (getData(TCSD_PACKET_TYPE_PBYTE, 11, sigTicket, sigTicketSize, &data->comm)) { free(migKeyAuth); free(msaList); free(restrictTicket); free(sigTicket); return TCSERR(TSS_E_INTERNAL_ERROR); } if (getData(TCSD_PACKET_TYPE_UINT32, 12, &encDataSize, 0, &data->comm)) { free(migKeyAuth); free(msaList); free(restrictTicket); free(sigTicket); return TCSERR(TSS_E_INTERNAL_ERROR); } encData = malloc(encDataSize); if (encData == NULL) { LogError("malloc of %u bytes failed.", encDataSize); free(migKeyAuth); free(msaList); free(restrictTicket); free(sigTicket); return TCSERR(TSS_E_OUTOFMEMORY); } if (getData(TCSD_PACKET_TYPE_PBYTE, 13, encData, encDataSize, &data->comm)) { free(migKeyAuth); free(msaList); free(restrictTicket); free(sigTicket); free(encData); return TCSERR(TSS_E_INTERNAL_ERROR); } if (getData(TCSD_PACKET_TYPE_AUTH, 14, &parentAuth, 0, &data->comm)) { free(migKeyAuth); free(msaList); free(restrictTicket); free(sigTicket); free(encData); return TCSERR(TSS_E_INTERNAL_ERROR); } if (memcmp(&nullAuth, &parentAuth, sizeof(TPM_AUTH))) pAuth = &parentAuth; else pAuth = NULL; MUTEX_LOCK(tcsp_lock); result = TCSP_CMK_CreateBlob_Internal(hContext, hKey, migrationType, migKeyAuthSize, migKeyAuth, pubSourceKeyDigest, msaListSize, msaList, restrictTicketSize, restrictTicket, sigTicketSize, sigTicket, encDataSize, encData, pAuth, &randomSize, &random, &outDataSize, &outData); MUTEX_UNLOCK(tcsp_lock); free(migKeyAuth); free(msaList); free(restrictTicket); free(sigTicket); free(encData); if (result == TSS_SUCCESS) { i = 0; initData(&data->comm, 5); if (pAuth) { if (setData(TCSD_PACKET_TYPE_AUTH, i++, pAuth, 0, &data->comm)) { free(random); free(outData); return TCSERR(TSS_E_INTERNAL_ERROR); } } if (setData(TCSD_PACKET_TYPE_UINT32, i++, &randomSize, 0, &data->comm)) { free(random); free(outData); return TCSERR(TSS_E_INTERNAL_ERROR); } if (setData(TCSD_PACKET_TYPE_PBYTE, i++, random, randomSize, &data->comm)) { free(random); free(outData); return TCSERR(TSS_E_INTERNAL_ERROR); } free(random); if (setData(TCSD_PACKET_TYPE_UINT32, i++, &outDataSize, 0, &data->comm)) { free(outData); return TCSERR(TSS_E_INTERNAL_ERROR); } if (setData(TCSD_PACKET_TYPE_PBYTE, i++, outData, outDataSize, &data->comm)) { free(outData); return TCSERR(TSS_E_INTERNAL_ERROR); } free(outData); } else initData(&data->comm, 0); data->comm.hdr.u.result = result; return TSS_SUCCESS;}TSS_RESULTtcs_wrap_CMK_ConvertMigration(struct tcsd_thread_data *data){ TCS_CONTEXT_HANDLE hContext; TCS_KEY_HANDLE hKey; TPM_CMK_AUTH restrictTicket; TPM_HMAC sigTicket; UINT32 keyDataSize, msaListSize, randomSize; BYTE *keyData, *msaList, *random; TPM_AUTH parentAuth, nullAuth, *pAuth; UINT32 outDataSize; BYTE *outData; TSS_RESULT result; int i; memset(&parentAuth, 0, sizeof(TPM_AUTH)); memset(&nullAuth, 0, sizeof(TPM_AUTH)); if (getData(TCSD_PACKET_TYPE_UINT32, 0, &hContext, 0, &data->comm)) return TCSERR(TSS_E_INTERNAL_ERROR); LogDebugFn("thread %zd context %x", THREAD_ID, hContext); if (getData(TCSD_PACKET_TYPE_UINT32, 1, &hKey, 0, &data->comm)) return TCSERR(TSS_E_INTERNAL_ERROR); if (getData(TCSD_PACKET_TYPE_PBYTE, 2, &restrictTicket, sizeof(restrictTicket), &data->comm)) return TCSERR(TSS_E_INTERNAL_ERROR); if (getData(TCSD_PACKET_TYPE_DIGEST, 3, &sigTicket, 0, &data->comm)) return TCSERR(TSS_E_INTERNAL_ERROR); if (getData(TCSD_PACKET_TYPE_UINT32, 4, &keyDataSize, 0, &data->comm)) return TCSERR(TSS_E_INTERNAL_ERROR); keyData = malloc(keyDataSize); if (keyData == NULL) { LogError("malloc of %u bytes failed.", keyDataSize); return TCSERR(TSS_E_OUTOFMEMORY); } if (getData(TCSD_PACKET_TYPE_PBYTE, 5, keyData, keyDataSize, &data->comm)) { free(keyData); return TCSERR(TSS_E_INTERNAL_ERROR); } if (getData(TCSD_PACKET_TYPE_UINT32, 6, &msaListSize, 0, &data->comm)) { free(keyData); return TCSERR(TSS_E_INTERNAL_ERROR); } msaList = malloc(msaListSize); if (msaList == NULL) { LogError("malloc of %u bytes failed.", msaListSize); free(keyData); return TCSERR(TSS_E_OUTOFMEMORY); } if (getData(TCSD_PACKET_TYPE_PBYTE, 7, msaList, msaListSize, &data->comm)) { free(keyData); free(msaList); return TCSERR(TSS_E_INTERNAL_ERROR); } if (getData(TCSD_PACKET_TYPE_UINT32, 8, &randomSize, 0, &data->comm)) { free(keyData); free(msaList); return TCSERR(TSS_E_INTERNAL_ERROR); } random = malloc(randomSize); if (random == NULL) { LogError("malloc of %u bytes failed.", randomSize); free(keyData); free(msaList); return TCSERR(TSS_E_OUTOFMEMORY); } if (getData(TCSD_PACKET_TYPE_PBYTE, 9, random, randomSize, &data->comm)) { free(keyData); free(msaList); free(random); return TCSERR(TSS_E_INTERNAL_ERROR); } if (getData(TCSD_PACKET_TYPE_AUTH, 10, &parentAuth, 0, &data->comm)) { free(keyData); free(msaList); free(random); return TCSERR(TSS_E_INTERNAL_ERROR); } if (memcmp(&nullAuth, &parentAuth, sizeof(TPM_AUTH))) pAuth = &parentAuth; else pAuth = NULL; MUTEX_LOCK(tcsp_lock); result = TCSP_CMK_ConvertMigration_Internal(hContext, hKey, restrictTicket, sigTicket, keyDataSize, keyData, msaListSize, msaList, randomSize, random, pAuth, &outDataSize, &outData); MUTEX_UNLOCK(tcsp_lock); free(keyData); free(msaList); free(random); if (result == TSS_SUCCESS) { i = 0; initData(&data->comm, 3); if (pAuth) { if (setData(TCSD_PACKET_TYPE_AUTH, i++, pAuth, 0, &data->comm)) { free(outData); return TCSERR(TSS_E_INTERNAL_ERROR); } } if (setData(TCSD_PACKET_TYPE_UINT32, i++, &outDataSize, 0, &data->comm)) { free(outData); return TCSERR(TSS_E_INTERNAL_ERROR); } if (setData(TCSD_PACKET_TYPE_PBYTE, i++, outData, outDataSize, &data->comm)) { free(outData); return TCSERR(TSS_E_INTERNAL_ERROR); } free(outData); } else initData(&data->comm, 0); data->comm.hdr.u.result = result; return TSS_SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -