Skip to main content

DifferentialPrivacyEngine

Struct DifferentialPrivacyEngine 

Source
pub struct DifferentialPrivacyEngine {
    pub budget: BudgetTracker,
    /* private fields */
}
Expand description

Production-grade differential-privacy engine.

Manages a privacy budget, generates calibrated noise, and records an auditable history of answered queries.

Fields§

§budget: BudgetTracker

Live budget tracker.

Implementations§

Source§

impl DifferentialPrivacyEngine

Source

pub fn new(epsilon_budget: f64, delta_budget: f64, max_history: usize) -> Self

Construct a new engine with the given budget parameters.

The PRNG is seeded with 0xDEADBEEF42.

Source

pub fn compute_noise_scale(mechanism: &PrivacyMechanism) -> NoiseScale

Compute the noise scale for a given mechanism.

  • Laplace: scale = sensitivity / epsilon
  • Gaussian: scale = sensitivity * sqrt(2 * ln(1.25 / delta)) / epsilon
  • Randomized: scale = 1 / (exp(epsilon) + 1) (flip probability)
Source

pub fn sample_laplace(&mut self, scale: f64) -> f64

Sample from Laplace(0, scale) using the inverse-CDF method.

Formula: -scale * sign(u - 0.5) * ln(1 - 2 * |u - 0.5|). If the argument to ln is ≤ 0, uses 1e-10 as a floor.

Source

pub fn sample_gaussian(&mut self, scale: f64) -> f64

Sample from Gaussian(0, scale) using the Box-Muller transform.

Draws two uniform samples u1, u2 ∈ (0,1), then: z = sqrt(-2 * ln(u1)) * cos(2π * u2). If u1 ≤ 0, uses 1e-10 as a floor.

Source

pub fn apply_mechanism( &mut self, query: &DpQuery, true_value: f64, ) -> Result<DpResult, DpError>

Answer a single differentially-private query.

  1. Validates mechanism parameters.
  2. Checks that the budget is not exhausted.
  3. Generates calibrated noise.
  4. Charges epsilon (and delta for Gaussian) to the budget.
  5. Records the result in history and returns it.
Source

pub fn apply_batch( &mut self, queries: &[(DpQuery, f64)], ) -> Vec<Result<DpResult, DpError>>

Answer a batch of queries, applying each in sequence.

Each result is Ok if the query succeeded, or Err if the budget was exhausted or parameters were invalid. Later queries in the batch see the already-reduced budget from earlier queries.

Source

pub fn compose_sequential(results: &[DpResult]) -> f64

Sequential composition: total epsilon = sum of per-query privacy costs.

Source

pub fn compose_advanced(results: &[DpResult], delta: f64) -> f64

Advanced composition theorem (Dwork et al. 2010).

For k independent (ε, 0)-DP mechanisms:

ε_total = sqrt(2k ln(1/δ)) * ε + k * ε * (exp(ε) - 1)

where ε is the maximum per-query cost and k is the number of queries. Returns the sequential bound when results is empty.

Source

pub fn sensitivity_clip(values: &[f64], sensitivity: f64) -> Vec<f64>

Clip each value to the range [-sensitivity, sensitivity].

This enforces global sensitivity bounds before computing statistics.

Source

pub fn budget_stats(&self) -> BudgetTracker

Return a clone of the current budget tracker.

Source

pub fn history(&self) -> &VecDeque<DpResult>

Return a reference to the bounded query-result history.

Source

pub fn budget_mut(&mut self) -> &mut BudgetTracker

Return a mutable reference to the budget tracker (for testing / integration).

Source

pub fn reseed(&mut self, seed: u64)

Reset the PRNG to a known seed for reproducible testing.

Source

pub fn clear_history(&mut self)

Clear the query history.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more