Skip to main content

KqueueEventsSource

Struct KqueueEventsSource 

Source
pub struct KqueueEventsSource {
    pub config: KqueueEventsConfig,
}
Expand description

Harvests timing jitter from kqueue event notification multiplexing.

§What it measures

Nanosecond timing of kevent() calls with multiple registered event types (timers, file watchers, socket monitors) firing concurrently.

§Why it’s entropic

kqueue is the macOS/BSD kernel event notification system. Registering diverse event types simultaneously creates rich interference:

  • Timer eventsEVFILT_TIMER with different intervals fire at kernel-determined times affected by timer coalescing, interrupt handling, and power management state
  • File watchersEVFILT_VNODE on temp files monitors inode changes; traverses VFS, APFS/HFS event queues, and the kqueue knote hash table
  • Socket eventsEVFILT_READ/EVFILT_WRITE on socket pairs monitors buffer state; interacts with the network stack’s mbuf allocator
  • Knote lock contention — many registered watchers all compete for the kqueue’s internal knote lock and dispatch queue

§What makes it unique

No prior work has combined multiple kqueue event types as an entropy source. The cross-event-type interference (timer delivery affecting socket notification timing) produces entropy that is independent from any single event source.

§Configuration

See KqueueEventsConfig for tunable parameters. Key options:

  • num_timers: controls timer coalescing interference
  • num_sockets: controls mbuf allocator contention
  • num_file_watchers: controls VFS notification path diversity
  • timeout_ms: controls kevent() wait duration

Fields§

§config: KqueueEventsConfig

Source configuration. Use Default::default() for recommended settings.

Trait Implementations§

Source§

impl Default for KqueueEventsSource

Source§

fn default() -> KqueueEventsSource

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

impl EntropySource for KqueueEventsSource

Source§

fn info(&self) -> &SourceInfo

Source metadata.
Source§

fn is_available(&self) -> bool

Check if this source can operate on the current machine.
Source§

fn collect(&self, _n_samples: usize) -> Vec<u8>

Collect raw entropy samples. Returns a Vec<u8> of up to n_samples bytes.
Source§

fn name(&self) -> &'static str

Convenience: name from info.

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> 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, 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V