//================================================================================================= cstring VersionToString(uint version) { uint major = GET_MAJOR(version), minor = GET_MINOR(version), patch = GET_PATCH(version); if(patch == 0) return Format("%u.%u", major, minor); else return Format("%u.%u.%u", major, minor, patch); }
enum psa_attest_err_t attest_get_boot_data(uint8_t major_type, void *ptr, uint32_t len) { if (shared_data_init_done == SHARED_DATA_INITIALZED) { return PSA_ATTEST_ERR_SUCCESS; } struct shared_data_tlv_header *tlv_header; struct shared_data_tlv_header *ptr_tlv_header; struct shared_data_tlv_entry *tlv_entry; uintptr_t tlv_end, offset; /* Get the boundaries of TLV section */ tlv_header = (struct shared_data_tlv_header *)BOOT_TFM_SHARED_DATA_BASE; if (tlv_header->tlv_magic != SHARED_DATA_TLV_INFO_MAGIC) { return PSA_ATTEST_ERR_INIT_FAILED; } tlv_end = (uintptr_t)BOOT_TFM_SHARED_DATA_BASE + (uintptr_t)tlv_header->tlv_tot_len; offset = (uintptr_t)BOOT_TFM_SHARED_DATA_BASE + (uintptr_t)SHARED_DATA_HEADER_SIZE; /* Add header to output buffer as well */ if (len < SHARED_DATA_HEADER_SIZE) { return PSA_ATTEST_ERR_INIT_FAILED; } ptr_tlv_header = (struct shared_data_tlv_header *)ptr; ptr_tlv_header->tlv_magic = SHARED_DATA_TLV_INFO_MAGIC; ptr_tlv_header->tlv_tot_len = SHARED_DATA_HEADER_SIZE; ptr = (uint8_t *)ptr + SHARED_DATA_HEADER_SIZE; /* Iterates over the TLV section and copy TLVs with requested major * type to the provided buffer. */ for (; offset < tlv_end; offset += tlv_entry->tlv_len) { tlv_entry = (struct shared_data_tlv_entry *)offset; if (GET_MAJOR(tlv_entry->tlv_type) == major_type) { if (len < ptr_tlv_header->tlv_tot_len + tlv_entry->tlv_len) { return PSA_ATTEST_ERR_INIT_FAILED; } memcpy(ptr, (const void *)tlv_entry, tlv_entry->tlv_len); ptr = (uint8_t *)ptr + tlv_entry->tlv_len; ptr_tlv_header->tlv_tot_len += tlv_entry->tlv_len; } if (tlv_entry->tlv_len == 0) { break; } } shared_data_init_done = SHARED_DATA_INITIALZED; return PSA_ATTEST_ERR_SUCCESS; }