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
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
- Never rely on
- 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.
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");
pub use fields::*;