2023-11-21 18:59:21 -07:00
2023-11-21 18:59:21 -07:00
2023-11-21 18:56:33 -07:00
2023-11-13 14:37:57 -06:00
2023-11-11 17:14:23 +01:00
2023-11-09 15:21:21 +01:00
2023-11-09 15:21:21 +01:00

Groth16 prover written in Nim

This is Groth16 prover implementation in Nim, using the constantine library as an arithmetic / curve backend.

The implementation is compatible with the circom + snarkjs ecosystem.

At the moment only the BN254 (aka. alt-bn128) curve is supported.

License

Licensed and distributed under either of the MIT license or Apache License, v2.0, at your choice.

TODO

  • make it a nimble package
  • refactor bn128.nim into smaller files
  • proper MSM implementation (I couldn't make constantine's one to work)
  • compare .r1cs to the "coeffs" section of .zkey
  • generate fake circuit-specific setup ourselves
  • multithreaded support (MSM, and possibly also FFT)
  • add Groth16 notes
  • document the snarkjs circuit-specific setup H points convention
  • make it work for different curves
Description
circom-compatible Groth16 prover in Nim
Readme
Languages
Nim 97.9%
Shell 1.5%
Circom 0.6%