@@ -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} ;
1212use log:: error;
1313use std:: convert:: TryFrom ;
1414use std:: ptr:: null_mut;
15- use tss_esapi_sys:: Esys_CertifyCreation ;
15+ use tss_esapi_sys:: { Esys_CertifyCreation , ESYS_TR_RH_ENDORSEMENT } ;
1616
1717impl 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