3 releases
0.1.2 | Aug 11, 2021 |
---|---|
0.1.1 | Dec 3, 2020 |
0.1.0 | Dec 3, 2020 |
#790 in Math
175KB
3.5K
SLoC
Finite Fields In no_std
Rust
This crate exposes a number of small finite field types. It does not depend on the standard library.
At time of writing, the top few results for "rust finite fields" in a google search shows:
- A crate that no longer compiles, and doesn't implement finite fields correctly at all
- A crate that only implements fields of characteristic two
- A crate that does general finite fields, but doesn't expose arithmetic past addition for higher degree finite fields.
This crate attempts to supply:
- A small library with low footprint when linked
- Support for as many fields as I have energy to write irreducible polynomials for
- Small finite field elements (up to 32 bits only)
- Small characteristic fields only (fitting in one
u8
)
This crate does not attempt to:
- Be particularly fast
- Handle large primes suitable for, say, cryptography
This crate should, in the future:
- Handle all finite fields that fit within a
u32
- Never rely on
std
- Be a pleasure to use and have intuitive interfaces
- Have easy to understand code without unnecessary optimisation
Pull requests to make that happen would be most welcome.
Issues on the github tracker are also welcome.
Example usage
# use tinyfield::prime_power_field::*;
type F = tinyfield::fields::GF9;
let delta = F::elts()
.filter(|x| x * x - 2.into() == F::zero)
.next()
.expect("GF9 should contain a square root of two");