Skip to main content

TimingProtection

Struct TimingProtection 

Source
pub struct TimingProtection {
    pub enabled: bool,
    pub target_duration_ns: u64,
}
Expand description

Constant-time wrapper configuration.

Fields§

§enabled: bool

Enable constant-time wrapping.

§target_duration_ns: u64

Target minimum duration for the protected call, in nanoseconds when a wall-clock source is available (native std, or wasm32 with the wasm feature and global.performance).

On platforms that use the tick counter fallback (see module docs), this value is measured in counter ticks, not literal nanoseconds.

Implementations§

Source§

impl TimingProtection

Source

pub fn new() -> Self

Create a new timing protection configuration with default settings.

Source

pub fn strict() -> Self

5 µs fixed duration — suitable for latency-tolerant paths.

Source

pub fn permissive() -> Self

Disabled — zero overhead, no constant-time guarantee.

Source

pub fn balanced() -> Self

1 µs fixed duration — same as the default.

Source

pub fn protect<F, R>(&self, func: F) -> R
where F: FnOnce() -> R,

Run func and busy-wait until target_duration_ns has elapsed from the start of the call.

Source

pub async fn protect_async<F, Fut, R>(&self, func: F) -> R
where F: FnOnce() -> Fut, Fut: Future<Output = R>,

Async variant of protect.

Source

pub fn protect_with_timing<F, R>(&self, func: F) -> (R, u64)
where F: FnOnce() -> R,

Run func with constant-time protection and return (result, elapsed).

When a wall clock is available (native std, or wasm32 + wasm), the second value is elapsed time in nanoseconds including the busy-wait. On tick-counter-only targets (see module docs), the delta is in counter ticks, not literal nanoseconds. When the wrapper is disabled, the delta reflects only the operation’s natural duration in the same units.

Source

pub async fn protect_with_timing_async<F, Fut, R>(&self, func: F) -> (R, u64)
where F: FnOnce() -> Fut, Fut: Future<Output = R>,

Async variant of protect_with_timing.

See protect_with_timing for semantics of the elapsed value.

Trait Implementations§

Source§

impl Clone for TimingProtection

Source§

fn clone(&self) -> TimingProtection

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TimingProtection

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for TimingProtection

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl PartialEq for TimingProtection

Source§

fn eq(&self, other: &TimingProtection) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for TimingProtection

Source§

impl Eq for TimingProtection

Source§

impl StructuralPartialEq for TimingProtection

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more