123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #include "sgx_utils.h"
- #include "util.h"
- #include <stdlib.h>
- #include <string.h>
- #include "se_memcpy.h"
- #include "sgx_trts.h"
- #include "sgx_tcrypto.h"
- #include "se_cdefs.h"
- SGX_ACCESS_VERSION(tservice, 3)
- sgx_status_t sgx_verify_report(const sgx_report_t *report)
- {
- sgx_mac_t mac;
- sgx_key_request_t key_request;
- sgx_key_128bit_t key;
- sgx_status_t err = SGX_ERROR_UNEXPECTED;
-
- if(!report||!sgx_is_within_enclave(report, sizeof(*report)))
- {
- return SGX_ERROR_INVALID_PARAMETER;
- }
- memset(&mac, 0, sizeof(sgx_mac_t));
- memset(&key_request, 0, sizeof(sgx_key_request_t));
- memset(&key, 0, sizeof(sgx_key_128bit_t));
-
- key_request.key_name = SGX_KEYSELECT_REPORT;
- memcpy_s(&key_request.key_id, sizeof(key_request.key_id), &report->key_id, sizeof(report->key_id));
-
-
-
-
-
-
-
-
- err = sgx_get_key(&key_request, &key);
- if(err != SGX_SUCCESS)
- {
- return err;
- }
-
- err = sgx_rijndael128_cmac_msg((sgx_cmac_128bit_key_t*)&key, (const uint8_t *)(&report->body), sizeof(sgx_report_body_t), &mac);
- memset_s (&key, sizeof(sgx_key_128bit_t), 0, sizeof(sgx_key_128bit_t));
- if (SGX_SUCCESS != err)
- {
- if(err != SGX_ERROR_OUT_OF_MEMORY)
- err = SGX_ERROR_UNEXPECTED;
- return err;
- }
- if(consttime_memequal(mac, report->mac, sizeof(sgx_mac_t)) == 0)
- {
- return SGX_ERROR_MAC_MISMATCH;
- }
- else
- {
- return SGX_SUCCESS;
- }
- }
|