Skip to content

Commit 427620c

Browse files
author
Muxi Yan
committed
Add tr_sess_get_nonce_tpm interface
1 parent 41bd9e9 commit 427620c

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

tss-esapi/src/context/session_administration.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
// SPDX-License-Identifier: Apache-2.0
33
use crate::{
44
attributes::{SessionAttributes, SessionAttributesMask},
5+
ffi::take_from_esys,
56
handles::SessionHandle,
67
interface_types::session_handles::AuthSession,
7-
tss2_esys::{Esys_TRSess_GetAttributes, Esys_TRSess_SetAttributes},
8+
structures::Nonce,
9+
tss2_esys::{Esys_TRSess_GetAttributes, Esys_TRSess_GetNonceTPM, Esys_TRSess_SetAttributes},
810
Context, Result, ReturnCode,
911
};
1012
use log::error;
@@ -51,5 +53,23 @@ impl Context {
5153
Ok(SessionAttributes(flags))
5254
}
5355

54-
// Missing function: Esys_TRSess_GetNonceTPM
56+
/// Get the TPM nonce from a session.
57+
pub fn tr_sess_get_nonce_tpm(&mut self, session: AuthSession) -> Result<Nonce> {
58+
let mut nonce_ptr = std::ptr::null_mut();
59+
ReturnCode::ensure_success(
60+
unsafe {
61+
Esys_TRSess_GetNonceTPM(
62+
self.mut_context(),
63+
SessionHandle::from(session).into(),
64+
&mut nonce_ptr,
65+
)
66+
},
67+
|ret| {
68+
error!("Error when getting session nonceTPM: {:#010X}", ret);
69+
},
70+
)?;
71+
72+
let nonce_tpm = unsafe { take_from_esys(nonce_ptr)? };
73+
nonce_tpm.try_into()
74+
}
5575
}

tss-esapi/tests/integration_tests/context_tests/tpm_commands/session_commands_tests.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,30 @@ mod test_start_auth_session {
138138
.unwrap_err();
139139
});
140140
}
141+
142+
#[test]
143+
fn test_get_nonce_tpm() {
144+
let mut context = create_ctx_without_session();
145+
let session = context
146+
.start_auth_session(
147+
None,
148+
None,
149+
None,
150+
SessionType::Policy,
151+
SymmetricDefinition::AES_256_CFB,
152+
HashingAlgorithm::Sha256,
153+
)
154+
.unwrap()
155+
.expect("Received invalid handle");
156+
157+
// Get the TPM nonce from the session
158+
let nonce_tpm = context
159+
.tr_sess_get_nonce_tpm(session)
160+
.expect("Failed to get nonceTPM");
161+
162+
// Verify the nonce is not empty
163+
assert!(!nonce_tpm.as_bytes().is_empty());
164+
}
141165
}
142166

143167
mod test_policy_restart {

0 commit comments

Comments
 (0)