Expand description
This module implements Ligero according to section 4.7 of https://dl.acm.org/doi/pdf/10.1145/3133956.3134104
Running Ligero using a witness shared with another proof system ZKP2:
- Create a circuit with a non-empty shared-witness range using the
new_with_shared
constructor. - In the prover:
a. Create a prover with the
noninteractive::Prover
constructor. b. Call theshared_mask
method to retrieve the shared maskm
and commit to the shared witnessu
and the mask using the ZKP2 commitment (sending it to the verifier). c. Runmake_proof_and_shared_check
using the ZKP2 commitment to(u,m)
to get the proof, matrixA
, and vectorb
. Send the proof to the verifier. d. Prove thatA*u + m = b
in ZKP2. - In the verifier:
a. Create a verifier with the
noninteractive::Verifier
constructor. b. Get the proof from the prover. c. Callverify_with_shared
on the ZKP2 commitment to(u,m)
, checking whether the verifier accepts and retrieving the matrixA
and the vectorb
. d. Verify thatA*u + m = b
in ZKP2.
Modules
Interactive Ligero implementation.
Non-interactive Ligero implementation, created by applying Fiat-Shamir to
the interactive implementation.
Structs
Round 0: Prover -> Verifier
Round 1: Verifier -> Prover
Round 2: Prover -> Verifier
Round 3: Verifier -> Prover
Round 4: Prover -> Verifier
Traits
This is a marker trait consolidating the traits needed for a Ligero field.
In addition, it supplies a field-size, to be used in parameter selection.
Functions
The theoretical proof size according to Section 5.3 of
https://dl.acm.org/doi/pdf/10.1145/3133956.3134104