Minimal 4844 version of c-kzg
Go to file
Ben Edgington 62d7641381 Remove TODO 2021-02-08 08:45:59 +00:00
inc Initial commit 2021-02-01 20:15:45 +00:00
lib Insert lib/ directory and update Readme 2021-02-02 11:36:36 +00:00
src Remove TODO 2021-02-08 08:45:59 +00:00
.gitignore Add benchmarking for FFTs 2021-02-07 20:58:19 +00:00
LICENSE Initial commit 2021-02-01 20:15:45 +00:00
README.md Improve benchmark test framework 2021-02-08 08:39:24 +00:00

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,

  1. Copy the resulting libblst.a file into the lib/ directory here.
  2. From Blst's bindings/ directory copy blst.h and blst_aux.h to inc/

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 add gcc options in future.
  • I'm developing on Ubuntu 20.04. Will check portability later.