| 315 | } |
| 316 | |
| 317 | fn parse_spec_id_event_log<I: scale::Input>( |
| 318 | input: &mut I, |
| 319 | ) -> Result<(TcgEvent, TcgEfiSpecIdEvent)> { |
| 320 | #[derive(Decode)] |
| 321 | struct Header { |
| 322 | imr_index: u32, |
| 323 | header_event_type: u32, |
| 324 | digest_hash: [u8; 20], |
| 325 | header_event: VecOf<u32, u8>, |
| 326 | } |
| 327 | |
| 328 | let decoded_header = Header::decode(input).context("failed to decode log_item")?; |
| 329 | // Parse EFI Spec Id Event structure |
| 330 | let input = &mut decoded_header.header_event.as_slice(); |
| 331 | let spec_id_event = |
| 332 | TcgEfiSpecIdEvent::decode(input).context("failed to decode TcgEfiSpecIdEvent")?; |
| 333 | |
| 334 | let digests = vec![TcgDigest { |
| 335 | algo_id: TPM_ALG_ERROR, |
| 336 | hash: decoded_header.digest_hash.to_vec(), |
| 337 | }]; |
| 338 | let spec_id_header = TcgEvent { |
| 339 | imr_index: decoded_header.imr_index, |
| 340 | event_type: decoded_header.header_event_type, |
| 341 | digests: (digests.len() as u32, digests).into(), |
| 342 | event: decoded_header.header_event, |
| 343 | }; |
| 344 | Ok((spec_id_header, spec_id_event)) |
| 345 | } |
| 346 | |
| 347 | impl TryFrom<TcgEvent> for TdxEvent { |
| 348 | type Error = anyhow::Error; |