Документация Intel гласит Вот что если нет предыдущего маркера запуска, следует использовать «недопустимый» токен со всеми нулями. Это прекрасно работает в режиме симуляции, но в аппаратном режиме возвращает SGX_ERROR_INVALID_LAUNCH_TOKEN, даже если это именно то, о чем он просит.
// Initialize an "invalid" first token, as the documentation specifies (all zeros)
sgx_launch_token_t token = {0};
// Create enclave
sgx_enclave_id_t id;
int updated = 0;
const auto status = sgx_create_enclave("enclave.signed.so", SGX_DEBUG_FLAG, &token, &updated, &id, NULL);
if (status != SGX_SUCCESS) {
throw "Failed to initialize enclave. (" + get_error_message(status) + ")";
}
Код возвращает статус = SGX_ERROR_INVALID_LAUNCH_TOKEN
Failed to initialize enclave. (The launch token is not correct.)
Может быть, я что-то упускаю из процесса строительства?
Проблема была вызвана использованием моего приложения libsgx_urts.so
от /usr/lib
а также libsgx_uae_service.so
из пути установки моего SGX SDK (/opt/intel/sgxsdk/lib64
в моем случае.)
Я изменил ссылку на следующее:
Simulation mode:
libsgx_urts.so => /opt/intel/sgxsdk/lib64/libsgx_urts.so
libsgx_uae_service.so => /opt/intel/sgxsdk/lib64/libsgx_uae_service.so
Hardware mode:
libsgx_urts.so => /usr/lib/libsgx_urts.so
libsgx_uae_service.so => /usr/lib/libsgx_uae_service.so
`
Других решений пока нет …