diff options
Diffstat (limited to 'src/noise/timestamp.rs')
-rw-r--r-- | src/noise/timestamp.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/noise/timestamp.rs b/src/noise/timestamp.rs new file mode 100644 index 0000000..0996f8b --- /dev/null +++ b/src/noise/timestamp.rs @@ -0,0 +1,34 @@ +use std::time::{SystemTime, UNIX_EPOCH}; + +const TAI64_EPOCH: u64 = 0x4000000000000000; + +pub type TAI64N = [u8; 12]; + +pub fn zero() -> TAI64N { + [0u8; 12] +} + +pub fn now() -> TAI64N { + // get system time as duration + let sysnow = SystemTime::now(); + let delta = sysnow.duration_since(UNIX_EPOCH).unwrap(); + + // convert to tai64n + let tai64_secs = delta.as_secs() + TAI64_EPOCH; + let tai64_nano = delta.subsec_nanos(); + + // serialize + let mut res = [0u8; 12]; + res[..8].copy_from_slice(&tai64_secs.to_be_bytes()[..]); + res[8..].copy_from_slice(&tai64_nano.to_be_bytes()[..]); + res +} + +pub fn compare(old: &TAI64N, new: &TAI64N) -> bool { + for i in 0..12 { + if new[i] > old[i] { + return true; + } + } + return false; +} |