tss_esapi/structures/attestation/
session_audit_info.rs

1// Copyright 2021 Contributors to the Parsec project.
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::{
5    interface_types::YesNo, structures::Digest, tss2_esys::TPMS_SESSION_AUDIT_INFO, Error, Result,
6};
7use std::convert::{TryFrom, TryInto};
8
9/// This type holds the attested data for
10/// TPM2_GetSessionAuditDigest()
11///
12/// # Details
13/// This corresponds to the TPMS_SESSION_AUDIT_INFO.
14#[derive(Debug, Clone)]
15pub struct SessionAuditInfo {
16    exclusive_session: YesNo,
17    session_digest: Digest,
18}
19
20impl SessionAuditInfo {
21    /// Returns true if if all of the commands recorded in the sessionDigest were
22    /// executed without any intervening TPM command that did not use
23    /// this audit session
24    pub fn exlusive_session(&self) -> bool {
25        self.exclusive_session.into()
26    }
27
28    /// Returns the current value of the session audit diges
29    pub const fn session_digest(&self) -> &Digest {
30        &self.session_digest
31    }
32}
33
34impl From<SessionAuditInfo> for TPMS_SESSION_AUDIT_INFO {
35    fn from(session_audit_info: SessionAuditInfo) -> Self {
36        TPMS_SESSION_AUDIT_INFO {
37            exclusiveSession: session_audit_info.exclusive_session.into(),
38            sessionDigest: session_audit_info.session_digest.into(),
39        }
40    }
41}
42
43impl TryFrom<TPMS_SESSION_AUDIT_INFO> for SessionAuditInfo {
44    type Error = Error;
45
46    fn try_from(tpms_session_audit_info: TPMS_SESSION_AUDIT_INFO) -> Result<Self> {
47        Ok(SessionAuditInfo {
48            exclusive_session: tpms_session_audit_info.exclusiveSession.try_into()?,
49            session_digest: tpms_session_audit_info.sessionDigest.try_into()?,
50        })
51    }
52}