libiop

libiop: a C++ library for IOP-based zkSNARKs. This library provides zkSNARK constructions that are transparent and post-quantum, and moreover rely only on lightweight symmetric cryptography (any cryptographic hash function). The library provides a tool chain for transforming certain types of probabilistic proofs (see below) into zkSNARKs with the above properties. The library includes several zkSNARK constructions that follow this paradigm: The Ligero protocol from [AHIV], whose argument size is O(N0.5). The Aurora protocol from [BCRSVW], whose argument size is O(log2 N). The Fractal protocol from [COS], whose argument size is O(log2 N). All of these zkSNARKs support R1CS (an NP-complete relation that generalizes arithmetic circuit satisfiability) over smooth prime fields and binary extension fields. An important component of Aurora and Fractal, which is of independent interest, is the FRI low-degree test.