2.0 KiB
c-kzg - work in progress
The very beginnings of a simple implementation of KZG commitments in C, using the Blst library from Supranational for field and curve operations.
Initially, at least, this largely follows the go-kzg implementation.
Done so far:
- FFT and inverse FFT over the finite field.
- FFTs over the G1 group
- Polynomial single commitment and verification
- Polynomial multi commitment and verification
Installation
Build the Blst library following the instructions there. Then,
- Copy the resulting
libblst.a
file into thelib/
directory here. - From Blst's
bindings/
directory copyblst.h
andblst_aux.h
toinc/
That is,
cp ../blst/libblast.a lib/
cp ../blst/bindings/*.h inc/
Build
Build the libckzg.a
library:
cd src
make lib
Build a debug version that aborts on error conditions and attempts to print some helpful info (file, line number, condition that failed):
cd src
make debuglib
Run tests
cd src
make test
Unit tests for an individual file can be built and run with make fft_fr_test
for example. Once a test runner such as fft_fr_test has been built, individual unit tests can be run with ./fft_fr_test <test-name>
.
Thanks to Acutest for the unit test harness, which is used here under the MIT licence.
Run benchmarks
This will run all available benchmarks, for the default one second per test size:
cd src
make bench
You can run individual benchmarks, and optionally specify how long to run each test size:
make fft_fr_bench
./fft_fr_bench 5
Doing make clean
should resolve any weird build issues.
Prerequisites
- Blst library (see above)
clang
compiler. I'm using Clang 10.0.0. I'll likely addgcc
options in future.- I'm developing on Ubuntu 20.04. Will check portability later.