b9bc4bb496 | ||
---|---|---|
inc | ||
lib | ||
src | ||
.gitignore | ||
LICENSE | ||
README.md |
README.md
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.
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.