pub struct TimeLockTime { /* private fields */ }Expand description
An explicit time value supplied by the caller for encryption-time key derivation.
hour is always expressed in 24-hour notation (0–23) regardless of
the TimeFormat chosen for the KDF string — the format flag only
controls how the string is rendered, not how you supply the input.
§Example
use toolkit_zero::encryption::timelock::TimeLockTime;
let t = TimeLockTime::new(14, 37).unwrap(); // 14:37 local (2:37 PM)Implementations§
Source§impl TimeLockTime
impl TimeLockTime
Sourcepub fn new(hour: u32, minute: u32) -> Option<Self>
pub fn new(hour: u32, minute: u32) -> Option<Self>
Construct a TimeLockTime from a 24-hour hour (0–23) and minute
(0–59).
Returns None if either value is out of range.
Examples found in repository?
examples/timelock_round_trip.rs (line 36)
24fn main() {
25 // ── Encryption side ───────────────────────────────────────────────────────
26 // Generate fresh salts. Salts are NOT secret — store them in plaintext
27 // alongside the ciphertext so the decryption side can reproduce the key.
28 let salts = TimeLockSalts::generate();
29
30 // Use a deliberately fast preset so the example finishes quickly.
31 // In production use KdfPreset::Balanced or stronger.
32 let kdf = KdfPreset::Balanced.params();
33
34 // Lock to any Tuesday at 18:00 (hour-precision window = the full 18:00–18:59 block).
35 let cadence = TimeLockCadence::DayOfWeek(Weekday::Tuesday);
36 let lock_time = TimeLockTime::new(18, 0).unwrap();
37
38 println!("Deriving encryption key (this may take a few seconds)…");
39 let enc_key = TimelockBuilder::encrypt()
40 .cadence(cadence.clone())
41 .time(lock_time)
42 .precision(TimePrecision::Hour)
43 .format(TimeFormat::Hour24)
44 .salts(salts.clone())
45 .kdf(kdf)
46 .derive()
47 .expect("encryption-side key derivation failed");
48
49 println!("enc_key[:8] = {:02x?}", &enc_key.as_bytes()[..8]);
50
51 // Pack every setting — including salts and KDF params — into a compact header.
52 // This header goes into the ciphertext in plaintext; nothing here is secret.
53 let header = pack(
54 TimePrecision::Hour,
55 TimeFormat::Hour24,
56 &cadence,
57 salts,
58 kdf,
59 );
60
61 // ── Decryption side ───────────────────────────────────────────────────────
62 // Load `header` from the ciphertext and call TimelockBuilder::decrypt at the
63 // matching time slot. All settings are read from the header automatically.
64 println!("Deriving decryption key from system clock…");
65 let dec_key = TimelockBuilder::decrypt(header)
66 .derive()
67 .expect("decryption-side key derivation failed");
68
69 println!("dec_key[:8] = {:02x?}", &dec_key.as_bytes()[..8]);
70
71 // ── Verdict ───────────────────────────────────────────────────────────────
72 if enc_key.as_bytes() == dec_key.as_bytes() {
73 println!("\nKeys match ✓ — running on a Tuesday at 18:xx");
74 } else {
75 println!("\nKeys differ — not running on a Tuesday at 18:xx (expected outside that window)");
76 }
77}Trait Implementations§
Source§impl Clone for TimeLockTime
impl Clone for TimeLockTime
Source§fn clone(&self) -> TimeLockTime
fn clone(&self) -> TimeLockTime
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for TimeLockTime
impl Debug for TimeLockTime
Source§impl PartialEq for TimeLockTime
impl PartialEq for TimeLockTime
impl Copy for TimeLockTime
impl Eq for TimeLockTime
impl StructuralPartialEq for TimeLockTime
Auto Trait Implementations§
impl Freeze for TimeLockTime
impl RefUnwindSafe for TimeLockTime
impl Send for TimeLockTime
impl Sync for TimeLockTime
impl Unpin for TimeLockTime
impl UnsafeUnpin for TimeLockTime
impl UnwindSafe for TimeLockTime
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key and return true if they are equal.