Minimal 4844 version of c-kzg
Go to file
Ben Edgington 0558dbaba8 Use uint64 for some loop counters 2021-02-05 13:46:05 +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 Use uint64 for some loop counters 2021-02-05 13:46:05 +00:00
.gitignore Exclude VSCode stuff 2021-02-05 08:47:47 +00:00
LICENSE Initial commit 2021-02-01 20:15:45 +00:00
README.md Implement single polynomial commitment 2021-02-04 21:23:34 +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
  • Single polynomial 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.

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.