tinyfield

Crates.iotinyfield
lib.rstinyfield
version0.1.2
sourcesrc
created_at2020-12-03 11:25:02.423123
updated_at2021-08-11 09:54:34.668013
descriptionSmall, finite fields.
homepagehttps://github.com/rspencer01/tinyfield
repositoryhttps://github.com/rspencer01/tinyfield
max_upload_size
id319260
size174,031
Robert Spencer (rspencer01)

documentation

https://docs.rs/crate/tinyfield/

README

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");
Commit count: 39

cargo fmt