Minimal 4844 version of c-kzg
Go to file
Ben Edgington f5650d8e23 Implement polynomial division 2021-02-04 14:15:33 +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 Implement polynomial division 2021-02-04 14:15:33 +00:00
.gitignore Initial commit 2021-02-01 20:15:45 +00:00
LICENSE Initial commit 2021-02-01 20:15:45 +00:00
README.md Add more build and test info 2021-02-03 17:00:23 +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

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.