← Back

Module lib

<p>Joule Standard Library - Multi-Party Computation Secure computation among multiple parties No party learns anything beyond the output</p>

struct PartyId

A party in the MPC protocol

Source: lib.joule:15

fn new(id: u32) -> Self

Source: lib.joule:20

fn id(&self) -> u32

Source: lib.joule:24

struct Share

A share of a secret value

Source: lib.joule:34

fn value(&self) -> &FieldElement

Source: lib.joule:41

fn party(&self) -> &PartyId

Source: lib.joule:45

fn index(&self) -> usize

Source: lib.joule:49

struct FieldElement

Field element for MPC computations

Source: lib.joule:55

const MODULUS: u128

Prime modulus (Mersenne prime 2^127 - 1)

Source: lib.joule:61

fn from_u64(value: u64) -> Self

Source: lib.joule:63

fn from_u128(value: u128) -> Self

Source: lib.joule:67

fn value(&self) -> u128

Source: lib.joule:71

fn add(&self, other: &FieldElement) -> FieldElement

Source: lib.joule:75

fn sub(&self, other: &FieldElement) -> FieldElement

Source: lib.joule:80

fn mul(&self, other: &FieldElement) -> FieldElement

Source: lib.joule:89

fn inverse(&self) -> Option<FieldElement>

Source: lib.joule:93

fn random() -> FieldElement

Source: lib.joule:97

struct ShamirScheme

Shamir (t, n) threshold secret sharing Any t parties can reconstruct, t-1 learn nothing

Source: lib.joule:108

fn new(threshold: usize, num_parties: usize) -> Result<Self, MpcError>

Create a new Shamir scheme - `threshold`: minimum shares needed to reconstruct - `num_parties`: total number of shares to create

Source: lib.joule:119

fn threshold(&self) -> usize

Get the threshold

Source: lib.joule:129

fn num_parties(&self) -> usize

Get the number of parties

Source: lib.joule:134

fn share(&self, secret: u64) -> Vec<Share>

Source: lib.joule:140

fn reconstruct(&self, shares: &[Share]) -> Result<u64, MpcError>

Source: lib.joule:147

fn add_shares(a: &Share, b: &Share) -> Result<Share, MpcError>

Add two shared values (locally, no communication)

Source: lib.joule:158

fn mul_scalar(share: &Share, scalar: u64) -> Share

Multiply a share by a public constant

Source: lib.joule:163

struct AdditiveScheme

Additive (n-out-of-n) secret sharing All parties must participate

Source: lib.joule:174

fn new(num_parties: usize) -> Self

Source: lib.joule:179

fn share(&self, secret: u64) -> Vec<Share>

Source: lib.joule:185

fn reconstruct(&self, shares: &[Share]) -> Result<u64, MpcError>

Source: lib.joule:191

fn add_shares(a: &Share, b: &Share) -> Result<Share, MpcError>

Add two additive shares

Source: lib.joule:202

fn sub_shares(a: &Share, b: &Share) -> Result<Share, MpcError>

Subtract two additive shares

Source: lib.joule:207

enum GateType

Gate types for circuits

Source: lib.joule:217

struct Gate

A gate in a boolean circuit

Source: lib.joule:227

fn and(a: usize, b: usize, out: usize) -> Self

Source: lib.joule:234

fn or(a: usize, b: usize, out: usize) -> Self

Source: lib.joule:238

fn xor(a: usize, b: usize, out: usize) -> Self

Source: lib.joule:242

fn not(a: usize, out: usize) -> Self

Source: lib.joule:246

struct BooleanCircuit

Boolean circuit for garbling

Source: lib.joule:252

fn new(num_inputs: usize, output_wires: Vec<usize>) -> Self

Source: lib.joule:259

fn add_gate(&mut self, gate: Gate)

Source: lib.joule:267

fn evaluate(&self, inputs: &[bool]) -> Vec<bool>

Evaluate on plaintext inputs

Source: lib.joule:272

struct GarbledCircuit

Garbled circuit (encrypted boolean circuit)

Source: lib.joule:278

struct WireLabel

Wire label (128-bit secret)

Source: lib.joule:283

struct Garbler;

Garbler: creates the garbled circuit

Source: lib.joule:288

fn garble(circuit: &BooleanCircuit) -> (GarbledCircuit, Vec<WireLabelPair>)

Source: lib.joule:293

fn encode_inputs(inputs: &[bool], labels: &[WireLabelPair]) -> Vec<WireLabel>

Get input labels for garbler's inputs

Source: lib.joule:298

struct WireLabelPair

Pair of wire labels (for 0 and 1)

Source: lib.joule:304

fn get(&self, bit: bool) -> &WireLabel

Source: lib.joule:310

struct Evaluator;

Evaluator: evaluates the garbled circuit

Source: lib.joule:316

fn evaluate(

Source: lib.joule:321

struct OTSender

1-out-of-2 Oblivious Transfer sender

Source: lib.joule:335

fn new() -> Self

Source: lib.joule:340

fn setup(&mut self, n: usize) -> Vec<[u8; 32]>

Source: lib.joule:346

fn encrypt(

Source: lib.joule:352

struct OTReceiver

1-out-of-2 Oblivious Transfer receiver

Source: lib.joule:362

fn new() -> Self

Source: lib.joule:367

fn choose(&mut self, sender_keys: &[[u8; 32]], choices: &[bool]) -> Vec<[u8; 32]>

Source: lib.joule:373

fn decrypt(

Source: lib.joule:379

struct MpcContext

MPC context for a party

Source: lib.joule:393

fn new(my_id: PartyId, num_parties: usize, threshold: usize) -> Result<Self, MpcError>

Create an MPC context

Source: lib.joule:401

fn my_id(&self) -> &PartyId

Source: lib.joule:410

fn num_parties(&self) -> usize

Source: lib.joule:414

fn threshold(&self) -> usize

Source: lib.joule:418

struct SecretValue

Secret-shared value in an MPC protocol

Source: lib.joule:424

fn from_share(share: Share, context: MpcContext) -> Self

Create from a local share

Source: lib.joule:431

fn add(&self, other: &SecretValue) -> Result<SecretValue, MpcError>

Add two secret values (local operation)

Source: lib.joule:436

fn mul_public(&self, scalar: u64) -> SecretValue

Multiply by a public constant (local operation)

Source: lib.joule:442

struct Network

Network connection for MPC protocol

Source: lib.joule:465

enum MpcError

Errors from MPC operations

Source: lib.joule:503