3 releases

0.1.2 Aug 11, 2021
0.1.1 Dec 3, 2020
0.1.0 Dec 3, 2020

#790 in Math

Custom license

175KB
3.5K SLoC

Finite Fields In no_std Rust

Build Status Latest Version Coverage Status

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");

No runtime deps