Algebra & Fields
The bottom layer of Longfellow. Every higher layer picks a concrete field, a concrete polynomial routine, or a concrete code from here. Two questions drive most decisions in this layer: which field do I encode my statement over? and which polynomial machinery does my proof system instantiation need?
Picking a field
If you do not yet know which field to pick, start with fp_p256: it matches the curve most attestation and identity systems use.
Pages in this group
- Prime Fields —
fp_generic, the concrete instantiations, and the extension fieldsFp2/Fp24_6. - Big Integers (Nat) — the fixed-width big-integer layer underneath the prime fields.
- FFT & Convolution — forward/reverse FFT, twiddle factors, Nussbaumer, CRT convolution.
- Reed-Solomon — the RS encoder Ligero commits over. Level-3 treatment.
- Interpolation — univariate evaluation and interpolation, used across sumcheck.
- Elliptic Curves — P-256 and P-256k1 points and operations.
- Binary Fields (GF(2^k)) — GF(2^128), GF(2) polynomials, and LCH14 codes.
Small helpers
A handful of headers in algebra/ are internal utilities that rarely appear in user code and do not get their own pages: hash.h, compare.h, blas.h, static_string.h, bogorng.h, utility.h, sysdep.h, limb.h, permutations.h. Read them on demand from the upstream source.
Last updated on