Crates.io | winter-math |
lib.rs | winter-math |
version | 0.11.0 |
source | src |
created_at | 2021-08-04 06:06:22.07407 |
updated_at | 2024-11-24 22:40:28.680332 |
description | Math library for the Winterfell STARK prover/verifier |
homepage | |
repository | https://github.com/novifinancial/winterfell |
max_upload_size | |
id | 431385 |
size | 255,945 |
This crate contains modules with mathematical operations needed in STARK proof generation and verification.
Finite field module implements arithmetic operations in STARK-friendly finite fields. The operation include:
Currently, there are three implementations of finite fields:
Currently, the library provides a generic way to create quadratic and cubic extensions of supported STARK fields. This can be done by implementing 'ExtensibleField' trait for degrees 2 and 3.
Quadratic extension fields are defined using the following irreducible polynomials:
f62
field, the polynomial is x2 - x - 1.f64
field, the polynomial is x2 - x + 2.f128
field, the polynomial is x2 - x - 1.Cubic extension fields are defined using the following irreducible polynomials:
f62
field, the polynomial is x3 + 2x + 2.f64
field, the polynomial is x3 - x - 1.f128
field, cubic extensions are not supported.Polynomials module implements basic polynomial operations such as:
FFT module contains operations for computing Fast Fourier transform in a prime field (also called Number-theoretic transform). This can be used to interpolate and evaluate polynomials in O(n log n) time as long as the domain of the polynomial is a multiplicative subgroup with size which is a power of 2.
This crate can be compiled with the following features:
std
- enabled by default and relies on the Rust standard library.concurrent
- implies std
and also enables multi-threaded execution for some of the crate functions.no_std
- does not rely on Rust's standard library and enables compilation to WebAssembly.To compile with no_std
, disable default features via --no-default-features
flag.
When compiled with concurrent
feature enabled, the following operations will be executed in multiple threads:
evaluate_poly()
evaluate_poly_with_offset()
interpolate_poly()
interpolate_poly_with_offset()
get_twiddles()
get_inv_twiddles()
get_power_series()
get_power_series_with_offset()
add_in_place()
mul_acc()
batch_inversion()
The number of threads can be configured via RAYON_NUM_THREADS
environment variable, and usually defaults to the number of logical cores on the machine.
This project is MIT licensed.