Skip to content

Commit f4a5d4e

Browse files
committed
Implement Esys_GetTime wrapper
Signed-off-by: Nils Bourcarde <[email protected]>
1 parent 66a901b commit f4a5d4e

File tree

1 file changed

+42
-3
lines changed

1 file changed

+42
-3
lines changed

tss-esapi/src/context/tpm_commands/attestation_commands.rs

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ use crate::{
66
Attest, AttestBuffer, CreationTicket, Data, Digest, PcrSelectionList, Signature,
77
SignatureScheme,
88
},
9-
tss2_esys::{Esys_Certify, Esys_Quote},
9+
tss2_esys::{Esys_Certify, Esys_GetTime, Esys_Quote},
1010
Context, Result, ReturnCode,
1111
};
1212
use log::error;
1313
use std::convert::TryFrom;
1414
use std::ptr::null_mut;
15-
use tss_esapi_sys::Esys_CertifyCreation;
15+
use tss_esapi_sys::{Esys_CertifyCreation, ESYS_TR_RH_ENDORSEMENT};
1616

1717
impl Context {
1818
/// Prove that an object is loaded in the TPM
@@ -322,8 +322,47 @@ impl Context {
322322
))
323323
}
324324

325+
/// Get the current time and clock from the TPM
326+
///
327+
/// # Errors
328+
/// * if the qualifying data provided is too long, a `WrongParamSize` wrapper error will be returned
329+
pub fn get_time(
330+
&mut self,
331+
signing_key_handle: KeyHandle,
332+
qualifying_data: Data,
333+
signing_scheme: SignatureScheme,
334+
) -> Result<(Attest, Signature)> {
335+
let mut timeinfo_ptr = null_mut();
336+
let mut signature_ptr = null_mut();
337+
ReturnCode::ensure_success(
338+
unsafe {
339+
Esys_GetTime(
340+
self.mut_context(),
341+
ESYS_TR_RH_ENDORSEMENT,
342+
signing_key_handle.into(),
343+
self.optional_session_1(),
344+
self.optional_session_2(),
345+
self.optional_session_3(),
346+
&qualifying_data.into(),
347+
&signing_scheme.into(),
348+
&mut timeinfo_ptr,
349+
&mut signature_ptr,
350+
)
351+
},
352+
|ret| {
353+
error!("Error in GetTime: {:#010X}", ret);
354+
},
355+
)?;
356+
357+
let timeinfo = Context::ffi_data_to_owned(timeinfo_ptr);
358+
let signature = Context::ffi_data_to_owned(signature_ptr);
359+
Ok((
360+
Attest::try_from(AttestBuffer::try_from(timeinfo)?)?,
361+
Signature::try_from(signature)?,
362+
))
363+
}
364+
325365
// Missing function: GetSessionAuditDigest
326366
// Missing function: GestCommandAuditDigest
327-
// Missing function: GetTime
328367
// Missing function: CertifyX509
329368
}

0 commit comments

Comments
 (0)