dtf 0.1.0

Obsecure the running time of a function call to diminish timing attacks
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use std::thread::sleep;
use std::time::{Duration, Instant};

use rand::Rng;

pub fn dtf<O>(min_duration: Duration, jitter: Duration, f: impl Fn() -> O) -> O {
    let start = Instant::now();
    let mut rng = rand::rng();
    let jitter_value = rng.random_range(0..jitter.as_millis() as u64);
    let jitter = Duration::from_millis(jitter_value);
    let result = f();
    let elapsed = start.elapsed();
    let wait_time = (min_duration - elapsed).max(Duration::ZERO) + jitter;
    sleep(wait_time);
    result
}