MCPcopy Create free account
hub / github.com/TelegramMessenger/cocoon / parse_event_entry

Function parse_event_entry

tee/cocoon/tdx/eventlog.cpp:245–282  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

243}
244
245static td::Result<size_t> parse_event_entry(td::Slice data, const EventLog& log, EventLogEntry& entry) {
246 auto orig = data;
247
248 TRY_RESULT(reg_index, cut<uint32_t>(data));
249 entry.rtmr_index = reg_index > 0 ? reg_index - 1 : 0;
250
251 TRY_RESULT(event_type, cut<uint32_t>(data));
252 entry.event_type = event_type;
253
254 TRY_RESULT(digest_count, cut<uint32_t>(data));
255
256 for (uint32_t i = 0; i < digest_count; i++) {
257 TRY_RESULT(alg_id, cut<uint16_t>(data));
258
259 auto it = log.digest_sizes.find(alg_id);
260 size_t digest_size = it != log.digest_sizes.end() ? it->second : AlgorithmId::digest_size(alg_id);
261 if (digest_size == 0) {
262 return td::Status::Error("Unknown algorithm");
263 }
264
265 TRY_RESULT(digest, cut_bytes(data, digest_size));
266
267 if (entry.digest_raw.empty()) {
268 entry.algorithm_id = alg_id;
269 entry.digest_raw = digest.str();
270 entry.digest_hex = td::buffer_to_hex(digest);
271 }
272 }
273
274 TRY_RESULT(event_size, cut<uint32_t>(data));
275 TRY_RESULT(event_data, cut_bytes(data, event_size));
276 entry.event_data = event_data.str();
277
278 entry.length = orig.size() - data.size();
279 entry.raw_data = orig.substr(0, entry.length).str();
280
281 return entry.length;
282}
283
284// ============================================================================
285// EventLog Methods

Callers 1

parse_event_logFunction · 0.85

Calls 1

cut_bytesFunction · 0.85

Tested by

no test coverage detected