Skip to content

OpenZKP - pure Rust implementations of Zero-Knowledge Proof systems.

License

Notifications You must be signed in to change notification settings

mrnobody700/OpenZKP

Repository files navigation

Crypto support library for StarkDEX

CircleCI Codecov

Warning. Side-channel resistance is currently not implemented. This library is optimized for performance and does not use slower side-channel resistant algorithms. Please evaluate the risks before using with sensitive data.

Note. Code coverage in Rust is still very early days. The above number is likely inaccurate. Please view the coverage report for details.

Testing

See CircleCI documentation on how to run tests locally.

Benchmark

Checkout master branch:

cargo bench --bench benchmark -- --save-baseline master
cargo bench --bench benchmark -- --baseline master
open target/criterion/report/index.html

Benchmarking using Mac OS' instrumentation. For this we need the cargo-instruments plugin for Cargo.

cargo install cargo-instruments

You can then run tests under profiling. It is recommended to filter for a specific test.

cargo instruments --release --bench benchmark --open [test name]

Goals

  • Perfomance optimized for Native and WebAssembly
  • Generality
  • Later: Constant-time operations.
  • Prefer const fn over procedural macros.

For optimization, there are a few different scenarios:

Note: The modulus is always assumed to be 256bit or less.

  • Programmer time known fields. The programmer can supply hand tuned optimized implementations of various algorithms. Ideally well performing defaults are provided.
  • Compiler time known fields. The compiler can compute constants, for example for Montgomery representation. The field parameters should be inlined.
  • Statically runtime known fields. Modulus is not known during compilation (but it's size is). Element membership of a particular field is known at compile time. The field parameters should statically allocated and the pointers inlined.
  • Dynamically runtime known fields. Modulus is not known during compilation (but its size is). Element membership of a particular field is not known at compile time. The field element should carry a pointer to the field parameters.

References and benchmarks

References

About

OpenZKP - pure Rust implementations of Zero-Knowledge Proof systems.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Rust 63.0%
  • Jupyter Notebook 31.2%
  • Solidity 3.6%
  • RenderScript 0.9%
  • TypeScript 0.8%
  • Python 0.4%
  • Other 0.1%