Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <tss2/tss2_esys.h>
- #include <tss2/tss2_tctildr.h>
- #include <iomanip>
- #include <vector>
- #include <iostream>
- int main() {
- // INITIALIZE
- TSS2_TCTI_CONTEXT *tcti = NULL;
- const char *tcti_conf_option = NULL;
- tcti_conf_option = getenv("TPM2TOOLS_TCTI");
- Tss2_TctiLdr_Initialize(tcti_conf_option, &tcti);
- ESYS_CONTEXT* esysContext;
- Esys_Initialize(&esysContext, tcti, nullptr);
- //Get Capability
- TPMS_CAPABILITY_DATA* tpmsCapabilityData;
- Esys_GetCapability(esysContext,
- ESYS_TR_NONE,
- ESYS_TR_NONE,
- ESYS_TR_NONE,
- TPM2_CAP_HANDLES,
- TPM2_HR_NV_INDEX,
- TPM2_PT_NV_INDEX_MAX,
- nullptr,
- &tpmsCapabilityData);
- std::vector<uint32_t> capabilityData;
- for (uint32_t i = 0; i < tpmsCapabilityData->data.handles.count; i++)
- {
- capabilityData.push_back((uint32_t)tpmsCapabilityData->data.handles.handle[i]);
- }
- for (const auto& data : capabilityData) {
- std::cout <<std::hex << data << std::endl;
- }
- auto address = capabilityData[0];
- // Read from TPM
- TPM2_HANDLE nv_index = address;
- ESYS_TR nvHandle = ESYS_TR_NONE;
- Esys_TR_FromTPMPublic(esysContext, nv_index, ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE, &nvHandle);
- std::cout << "NvHandle: "<< std::hex << nvHandle << std::endl;
- TPM2B_NV_PUBLIC *nvPublic = NULL;
- Esys_NV_ReadPublic(esysContext, nvHandle, ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE, &nvPublic, NULL);
- std::cout << "Data size: " << nvPublic->nvPublic.dataSize << std::endl;
- // Create Session
- TPMT_SYM_DEF symmetric{};
- symmetric.algorithm = TPM2_ALG_NULL;
- ESYS_TR session = ESYS_TR_NONE;
- Esys_StartAuthSession(esysContext,
- ESYS_TR_NONE,
- ESYS_TR_NONE,
- ESYS_TR_NONE,
- ESYS_TR_NONE,
- ESYS_TR_NONE,
- NULL,
- TPM2_SE_HMAC,
- &symmetric,
- TPM2_ALG_SHA256,
- &session);
- TPM2B_AUTH *auth = nullptr;
- Esys_TR_SetAuth(esysContext, ESYS_TR_RH_OWNER, auth);
- TPM2B_MAX_NV_BUFFER* dataCertificateBuffer = NULL;
- Esys_NV_Read(esysContext,
- nvHandle,
- nvHandle,
- session, ESYS_TR_NONE, ESYS_TR_NONE,
- nvPublic->nvPublic.dataSize,
- 0,
- &dataCertificateBuffer);
- // Clean
- Esys_Free(auth);
- Esys_Free(tpmsCapabilityData);
- Esys_Free(nvPublic);
- Esys_Free(dataCertificateBuffer);
- Esys_Finalize(&esysContext);
- Esys_Free(esysContext);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement