Skip to main content

tss_esapi/context/
session_administration.rs

1// Copyright 2021 Contributors to the Parsec project.
2// SPDX-License-Identifier: Apache-2.0
3use crate::{
4    attributes::{SessionAttributes, SessionAttributesMask},
5    handles::SessionHandle,
6    interface_types::session_handles::AuthSession,
7    tss2_esys::{Esys_TRSess_GetAttributes, Esys_TRSess_SetAttributes},
8    Context, Error, Result,
9};
10use log::error;
11
12impl Context {
13    /// Set the given attributes on a given session.
14    pub fn tr_sess_set_attributes(
15        &mut self,
16        session: AuthSession,
17        attributes: SessionAttributes,
18        mask: SessionAttributesMask,
19    ) -> Result<()> {
20        let ret = unsafe {
21            Esys_TRSess_SetAttributes(
22                self.mut_context(),
23                SessionHandle::from(session).into(),
24                attributes.into(),
25                mask.into(),
26            )
27        };
28        let ret = Error::from_tss_rc(ret);
29        if ret.is_success() {
30            Ok(())
31        } else {
32            error!("Error when setting session attributes: {}", ret);
33            Err(ret)
34        }
35    }
36
37    /// Get session attribute flags.
38    pub fn tr_sess_get_attributes(&mut self, session: AuthSession) -> Result<SessionAttributes> {
39        let mut flags = 0;
40        let ret = unsafe {
41            Esys_TRSess_GetAttributes(
42                self.mut_context(),
43                SessionHandle::from(session).into(),
44                &mut flags,
45            )
46        };
47        let ret = Error::from_tss_rc(ret);
48        if ret.is_success() {
49            Ok(SessionAttributes(flags))
50        } else {
51            error!("Error when getting session attributes: {}", ret);
52            Err(ret)
53        }
54    }
55
56    // Missing function: Esys_TRSess_GetNonceTPM
57}