Skip to main content

Garbler

Struct Garbler 

Source
pub struct Garbler<RNG, Wire> { /* private fields */ }
Expand description

Streams garbled circuit ciphertexts through a callback.

Implementations§

Source§

impl<RNG: CryptoRng + RngCore, Wire: WireLabel + DeserializeOwned> Garbler<RNG, Wire>

Source

pub fn load_deltas(&mut self, filename: &str) -> Result<(), Box<dyn Error>>

Load pre-chosen deltas from a file

Source§

impl<RNG: CryptoRng + RngCore, Wire: WireLabel> Garbler<RNG, Wire>

Source

pub fn new(rng: RNG, channel: &mut Channel<'_>) -> Result<Self>

Create a new Garbler.

Source

pub fn delta(&mut self, q: u16) -> Wire

Create a delta if it has not been created yet for this modulus, otherwise just return the existing one.

Source

pub fn get_deltas(self) -> HashMap<u16, Wire>

Get the deltas, consuming the Garbler.

This is useful for reusing wires in multiple garbled circuit instances.

Source

pub fn encode_zero(&mut self, modulus: u16) -> Wire

Output a fresh zero wirelabel associated with the provided modulus.

Source

pub fn bin_encode_zero(&mut self, nbits: usize) -> BinaryBundle<Wire>

Output fresh zero wirelabels associated with a BinaryBundle.

Trait Implementations§

Source§

impl<RNG: RngCore + CryptoRng, Wire: WireLabel> Fancy for Garbler<RNG, Wire>

Source§

type Item = Wire

The underlying wire representation of this Fancy object.
Source§

fn constant( &mut self, x: u16, q: u16, channel: &mut Channel<'_>, ) -> Result<Wire>

Encode a constant x with modulus q.
Source§

impl<RNG: RngCore + CryptoRng, Wire: WireLabel + ArithmeticWire> FancyArithmetic for Garbler<RNG, Wire>

Source§

fn add(&mut self, x: &Wire, y: &Wire) -> Wire

Add x and y. Read more
Source§

fn sub(&mut self, x: &Wire, y: &Wire) -> Wire

Subtract x and y. Read more
Source§

fn cmul(&mut self, x: &Wire, c: u16) -> Wire

Multiply x with the constant c.
Source§

fn mul(&mut self, A: &Wire, B: &Wire, channel: &mut Channel<'_>) -> Result<Wire>

Multiply x and y.
Source§

impl<RNG: RngCore + CryptoRng> FancyBinary for Garbler<RNG, AllWire>

Source§

fn negate(&mut self, x: &Self::Item) -> Self::Item

We can negate by having garbler xor wire with Delta

Since we treat all garbler wires as zero, xoring with delta conceptually negates the value of the wire

Source§

fn xor(&mut self, x: &Self::Item, y: &Self::Item) -> Self::Item

Xor is just addition

Source§

fn and( &mut self, x: &Self::Item, y: &Self::Item, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Use binary and_gate

Source§

fn or( &mut self, x: &Self::Item, y: &Self::Item, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Binary OR.
Source§

impl<RNG: RngCore + CryptoRng, W: BinaryWireLabel> FancyBinary for Garbler<RNG, W>

Source§

fn negate(&mut self, x: &Self::Item) -> Self::Item

We can negate by having garbler xor wire with Delta

Since we treat all garbler wires as zero, xoring with delta conceptually negates the value of the wire

Source§

fn and( &mut self, A: &Self::Item, B: &Self::Item, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Binary AND.
Source§

fn xor(&mut self, x: &Self::Item, y: &Self::Item) -> Self::Item

Binary XOR.
Source§

fn or( &mut self, x: &Self::Item, y: &Self::Item, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Binary OR.
Source§

impl<RNG: RngCore + CryptoRng, Wire: WireLabel> FancyEncode for Garbler<RNG, Wire>

Source§

fn encode_many( &mut self, values: &[u16], moduli: &[u16], channel: &mut Channel<'_>, ) -> Result<Vec<Self::Item>>

Encode many wires for known values.
Source§

fn receive_many( &mut self, _moduli: &[u16], _: &mut Channel<'_>, ) -> Result<Vec<Self::Item>>

Receive many wires for unknown values.
Source§

fn encode( &mut self, value: u16, modulus: u16, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Encode a wire for a known value.
Source§

fn receive( &mut self, modulus: u16, channel: &mut Channel<'_>, ) -> Result<Self::Item>

Receive a wire for an unknown value.
Source§

impl<RNG: RngCore + CryptoRng, Wire: WireLabel> FancyOutput for Garbler<RNG, Wire>

Source§

fn output(&mut self, X: &Wire, channel: &mut Channel<'_>) -> Result<Option<u16>>

Output the value associated with wire x. Read more
Source§

fn outputs( &mut self, xs: &[Self::Item], channel: &mut Channel<'_>, ) -> Result<Option<Vec<u16>>>

Output the values associated with a slice of wires. Read more
Source§

impl<RNG: RngCore + CryptoRng, Wire: WireLabel + ArithmeticWire> FancyProj for Garbler<RNG, Wire>

Source§

fn proj( &mut self, A: &Wire, q_out: u16, tt: Option<Vec<u16>>, channel: &mut Channel<'_>, ) -> Result<Wire>

Project x according to the truth table tt. Resulting wire has modulus q. Read more

Auto Trait Implementations§

§

impl<RNG, Wire> Freeze for Garbler<RNG, Wire>
where Wire: Freeze, RNG: Freeze,

§

impl<RNG, Wire> RefUnwindSafe for Garbler<RNG, Wire>
where Wire: RefUnwindSafe, RNG: RefUnwindSafe,

§

impl<RNG, Wire> Send for Garbler<RNG, Wire>
where Wire: Send, RNG: Send,

§

impl<RNG, Wire> Sync for Garbler<RNG, Wire>
where Wire: Sync, RNG: Sync,

§

impl<RNG, Wire> Unpin for Garbler<RNG, Wire>
where Wire: Unpin, RNG: Unpin,

§

impl<RNG, Wire> UnsafeUnpin for Garbler<RNG, Wire>
where Wire: UnsafeUnpin, RNG: UnsafeUnpin,

§

impl<RNG, Wire> UnwindSafe for Garbler<RNG, Wire>
where Wire: UnwindSafe, RNG: UnwindSafe,

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<F> BinaryGadgets for F

Source§

fn bin_encode( &mut self, value: u128, nbits: usize, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Encode a binary input bundle.
Source§

fn bin_receive( &mut self, nbits: usize, channel: &mut Channel<'_>, ) -> Result<BinaryBundle<Self::Item>>

Receive an binary input bundle.
Source§

fn bin_encode_many( &mut self, values: &[u128], nbits: usize, channel: &mut Channel<'_>, ) -> Result<Vec<BinaryBundle<Self::Item>>>

Encode many binary input bundles.
Source§

fn bin_receive_many( &mut self, ninputs: usize, nbits: usize, channel: &mut Channel<'_>, ) -> Result<Vec<BinaryBundle<Self::Item>>>

Receive many binary input bundles.
Source§

fn bin_output( &mut self, x: &BinaryBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Option<u128>>

Output a binary bundle and interpret the result as a u128.
Source§

fn bin_outputs( &mut self, xs: &[BinaryBundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<Option<Vec<u128>>>

Output a slice of binary bundles and interpret the results as a u128.
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<F> CrtGadgets for F

Source§

fn crt_encode( &mut self, value: u128, modulus: u128, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Encode a CRT input bundle.
Source§

fn crt_receive( &mut self, modulus: u128, channel: &mut Channel<'_>, ) -> Result<CrtBundle<Self::Item>>

Receive an CRT input bundle.
Source§

fn crt_encode_many( &mut self, values: &[u128], modulus: u128, channel: &mut Channel<'_>, ) -> Result<Vec<CrtBundle<Self::Item>>>

Encode many CRT input bundles.
Source§

fn crt_receive_many( &mut self, n: usize, modulus: u128, channel: &mut Channel<'_>, ) -> Result<Vec<CrtBundle<Self::Item>>>

Receive many CRT input bundles.
Source§

fn crt_output( &mut self, x: &CrtBundle<Self::Item>, channel: &mut Channel<'_>, ) -> Result<Option<u128>>

Output a CRT bundle and interpret it mod Q.
Source§

fn crt_outputs( &mut self, xs: &[CrtBundle<Self::Item>], channel: &mut Channel<'_>, ) -> Result<Option<Vec<u128>>>

Output a slice of CRT bundles and interpret the outputs mod Q.
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> 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
§

impl<T> IsSameType<T> for T

§

const WITNESS: Witness<<T as IsSameType<T>>::EqualityProposition> = Witness::EQUAL_TYPES

A [Witness] that Self == T Read more
§

type EqualityProposition = TrueEqualityProposition

The [EqualityProposition] that Self == T
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

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

§

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

§

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