# [−][src]Module zkp::toolbox

Contains lower-level tools that allow programmable specification of proof statements.

The higher-level define_proof macro allows declarative specification of static proof statements, and expands into code that uses this lower-level API. This lower-level API can also be used directly to perform imperative specification of proof statements, allowing proof statements with runtime parameters (e.g., an anonymous credential with a variable number of attributes).

The SchnorrCS trait defines the common constraint system API used for specifying proof statements; it is implemented by the Prover, Verifier, and BatchVerifier structs.

Roughly speaking, the tools fit together in the following way:

• Statements are defined as generic functions which take a SchnorrCS implementation and some variables, and add the proof statements to the constraint system;

• To create a proof, construct a Prover, allocate and assign variables, pass the prover and the variables to the generic statement function, then consume the prover to obtain a proof.

• To verify a proof, construct a Verifier, allocate and assign variables, pass the verifier and the variables to the generic statement function, then consume the verifier to obtain a verification result.

Note that the expansion of the define_proof macro contains a public internal module with the generated proof statement function, making it possible to combine generated and hand-crafted proof statements into the same constraint system.

## Modules

 batch_verifier Implements batch verification of batchable proofs. prover Implements proof creation. verifier Implements proof verification of compact and batchable proofs.

## Traits

 SchnorrCS An interface for specifying proof statements, common between provers and verifiers. TranscriptProtocol This trait defines the wire format for how the constraint system interacts with the proof transcript.