pub struct TimeLockKey(/* private fields */);Expand description
A derived 32-byte time-locked key.
The inner bytes are automatically overwritten (ZeroizeOnDrop) the
moment this value is dropped. Access the key via as_bytes.
Implementations§
Source§impl TimeLockKey
impl TimeLockKey
Sourcepub fn as_bytes(&self) -> &[u8; 32]
pub fn as_bytes(&self) -> &[u8; 32]
Borrow the raw 32-byte key.
The reference is valid only while this TimeLockKey is alive. If you
must copy the bytes into another buffer, protect it with Zeroize too.
Examples found in repository?
examples/timelock_round_trip.rs (line 50)
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 = timelock(
40 Some(cadence.clone()),
41 Some(lock_time),
42 Some(TimePrecision::Hour),
43 Some(TimeFormat::Hour24),
44 Some(salts.clone()),
45 Some(kdf),
46 None, // params = None → _at (encryption) path
47 )
48 .expect("encryption-side key derivation failed");
49
50 println!("enc_key[:8] = {:02x?}", &enc_key.as_bytes()[..8]);
51
52 // Pack every setting — including salts and KDF params — into a compact header.
53 // This header goes into the ciphertext in plaintext; nothing here is secret.
54 let header = pack(
55 TimePrecision::Hour,
56 TimeFormat::Hour24,
57 &cadence,
58 salts,
59 kdf,
60 );
61
62 // ── Decryption side ───────────────────────────────────────────────────────
63 // Load `header` from the ciphertext and call timelock() at the matching
64 // time slot with params = Some(header).
65 println!("Deriving decryption key from system clock…");
66 let dec_key = timelock(
67 None, None, None, None, None, None,
68 Some(header), // params = Some → _now (decryption) path
69 )
70 .expect("decryption-side key derivation failed");
71
72 println!("dec_key[:8] = {:02x?}", &dec_key.as_bytes()[..8]);
73
74 // ── Verdict ───────────────────────────────────────────────────────────────
75 if enc_key.as_bytes() == dec_key.as_bytes() {
76 println!("\nKeys match ✓ — running on a Tuesday at 18:xx");
77 } else {
78 println!("\nKeys differ — not running on a Tuesday at 18:xx (expected outside that window)");
79 }
80}Trait Implementations§
Source§impl Drop for TimeLockKey
Available on crate features enc-timelock-keygen-now or enc-timelock-keygen-input or enc-timelock-async-keygen-now or enc-timelock-async-keygen-input only.
impl Drop for TimeLockKey
Available on crate features
enc-timelock-keygen-now or enc-timelock-keygen-input or enc-timelock-async-keygen-now or enc-timelock-async-keygen-input only.Source§impl Zeroize for TimeLockKey
Available on crate features enc-timelock-keygen-now or enc-timelock-keygen-input or enc-timelock-async-keygen-now or enc-timelock-async-keygen-input only.
impl Zeroize for TimeLockKey
Available on crate features
enc-timelock-keygen-now or enc-timelock-keygen-input or enc-timelock-async-keygen-now or enc-timelock-async-keygen-input only.impl ZeroizeOnDrop for TimeLockKey
Available on crate features
enc-timelock-keygen-now or enc-timelock-keygen-input or enc-timelock-async-keygen-now or enc-timelock-async-keygen-input only.Auto Trait Implementations§
impl Freeze for TimeLockKey
impl RefUnwindSafe for TimeLockKey
impl Send for TimeLockKey
impl Sync for TimeLockKey
impl Unpin for TimeLockKey
impl UnsafeUnpin for TimeLockKey
impl UnwindSafe for TimeLockKey
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