← Back

Module lib

<p>Joule Standard Library - Zero-Knowledge Proofs Prove statements without revealing private information Supports SNARKs (Groth16, PLONK) and STARKs (post-quantum)</p>

enum ProofSystem

Available proof systems

Source: lib.joule:15

enum Curve

Elliptic curve for SNARKs

Source: lib.joule:27

struct Variable

Variable in a circuit

Source: lib.joule:39

fn is_public(&self) -> bool

Source: lib.joule:45

fn id(&self) -> usize

Source: lib.joule:49

struct LinearCombination

Linear combination: sum of (coefficient * variable)

Source: lib.joule:55

fn zero() -> Self

Source: lib.joule:60

fn from_variable(var: Variable) -> Self

Source: lib.joule:64

fn from_constant(value: i64, one: Variable) -> Self

Source: lib.joule:68

fn add_term(&mut self, coeff: i64, var: Variable)

Source: lib.joule:72

fn add(mut self, other: LinearCombination) -> LinearCombination

Source: lib.joule:79

fn sub(mut self, other: LinearCombination) -> LinearCombination

Source: lib.joule:87

struct Constraint

R1CS constraint: A * B = C

Source: lib.joule:96

struct CircuitBuilder

Circuit builder for creating R1CS circuits

Source: lib.joule:103

fn new() -> Self

Create a new circuit builder

Source: lib.joule:112

fn public_input(&mut self, name: &str) -> Variable

Allocate a public input variable

Source: lib.joule:122

fn private_witness(&mut self, name: &str) -> Variable

Allocate a private witness variable

Source: lib.joule:130

fn one(&self) -> Variable

Get the constant 1 variable

Source: lib.joule:138

fn constant(&self, value: i64) -> LinearCombination

Create a constant as linear combination

Source: lib.joule:143

fn enforce(&mut self, a: LinearCombination, b: LinearCombination, c: LinearCombination)

Enforce A * B = C

Source: lib.joule:148

fn enforce_equal(&mut self, a: LinearCombination, b: LinearCombination)

Enforce equality: a = b (as a * 1 = b)

Source: lib.joule:153

fn mul(&mut self, a: Variable, b: Variable) -> Variable

Multiply two variables, return result

Source: lib.joule:158

fn add(&mut self, a: Variable, b: Variable) -> Variable

Add two variables

Source: lib.joule:169

fn enforce_boolean(&mut self, var: Variable)

Enforce variable is boolean (0 or 1)

Source: lib.joule:177

fn power(&mut self, base: Variable, n: u32) -> Variable

Compute x^n using repeated squaring

Source: lib.joule:189

fn build(self) -> Circuit

Build the circuit

Source: lib.joule:218

struct Circuit

Compiled circuit

Source: lib.joule:229

struct ProvingKey

Proving key (for proof generation)

Source: lib.joule:241

fn to_bytes(&self) -> Vec<u8>

Source: lib.joule:247

fn from_bytes(bytes: &[u8], curve: Curve) -> Result<Self, ZkpError>

Source: lib.joule:251

fn size(&self) -> usize

Size in bytes (can be large)

Source: lib.joule:257

struct VerifyingKey

Verifying key (for proof verification, much smaller than proving key)

Source: lib.joule:263

fn to_bytes(&self) -> Vec<u8>

Source: lib.joule:269

fn from_bytes(bytes: &[u8], curve: Curve) -> Result<Self, ZkpError>

Source: lib.joule:273

fn size(&self) -> usize

Source: lib.joule:278

struct Proof

A zero-knowledge proof

Source: lib.joule:288

fn to_bytes(&self) -> &[u8]

Serialize to bytes

Source: lib.joule:295

fn size(&self) -> usize

Get proof size in bytes

Source: lib.joule:300

fn system(&self) -> &ProofSystem

Get the proof system used

Source: lib.joule:305

struct FieldElement

Field element (scalar in the finite field)

Source: lib.joule:311

fn from_u64(value: u64, curve: Curve) -> Self

Create from u64

Source: lib.joule:318

fn from_bytes(b: &[u8], curve: Curve) -> Self

Create from bytes

Source: lib.joule:325

struct Groth16

Groth16 proof system

Source: lib.joule:338

fn new() -> Self

Create Groth16 prover/verifier with BLS12-381

Source: lib.joule:344

fn with_curve(curve: Curve) -> Self

Create with specific curve

Source: lib.joule:349

fn setup(&self, circuit: &Circuit) -> Result<(ProvingKey, VerifyingKey), ZkpError>

Source: lib.joule:356

fn prove(

Source: lib.joule:366

fn verify(

Source: lib.joule:378

struct Stark

STARK proof system (post-quantum secure)

Source: lib.joule:393

enum HashFunction

Hash function for STARK

Source: lib.joule:399

fn new() -> Self

Create with 128-bit security

Source: lib.joule:407

fn with_security(bits: usize) -> Self

Create with custom security level

Source: lib.joule:415

fn with_hash(mut self, hash: HashFunction) -> Self

Set hash function

Source: lib.joule:423

fn prove(

Source: lib.joule:430

fn verify(

Source: lib.joule:448

fn range_check(builder: &mut CircuitBuilder, value: Variable, bits: usize) -> Vec<Variable>

Source: lib.joule:468

fn hash_preimage(

Source: lib.joule:474

fn merkle_proof(

Source: lib.joule:485

fn eddsa_verify(

Source: lib.joule:497

enum HashType

Hash type for gadgets

Source: lib.joule:507

enum ZkpError

Errors from ZKP operations

Source: lib.joule:519