guff

Crates.ioguff
lib.rsguff
version0.1.7
sourcesrc
created_at2021-06-26 00:40:41.062298
updated_at2021-07-01 15:15:46.524165
descriptionImplements Galois Fields for various natural sizes
homepagehttps://github.com/declanmalone/guff
repository
max_upload_size
id415036
size121,619
(declanmalone)

documentation

README

Grand Unified Finite Field library*

Implements GF(2x) for various "natural" sizes such as 28, 216 and 232.

My goals for this crate are to:

  1. help me learn to write good modules in Rust;

  2. help interested users learn about finite fields (ie, Galois fields);

  3. provide a generic baseline implementation of basic maths (add, multiply, divide, etc.) over finite fields;

  4. explore various optimisations/adaptations (including table-based lookups and architecture-specific SIMD code) that can selectively override some/all of the default implementations while remaining compatible with other implementations.

Also to:

  1. provide some useful utility functions that go beyond just add, mul, div, etc. (eg, determining whether a field polynomial is primitive, or generating lookup tables for different kinds of optimisations);

  2. eat my own dog food, so to speak, by implementing various applications that use the library;

  3. benchmark particular implementations of interest.

Basic Use: doing maths in a particular field

Steps to using this library:

  • decide what "class" of field you want to use (GF(28), GF(216), etc.);

  • decide if you want to use one of the optimised adaptations or are happy with the default generic code;

  • create a new field object (we can call f) of that class with your chosen field polynomial (aka "irreducible polynomial") by calling the appropriate constructor;

  • use that object to do maths in that field: eg, result = f.mul(a,b)

Crate Name

* The crate name is deliberately hyperbolic:

Noun guff - unacceptable behavior (especially ludicrously false statements)

Copyright and Licence

This work is Copyright (c) Declan Malone, 2021.

You may freely copy and modify this work under the terms of:

  • The GNU General Public License version 2 or later

If you wish to embed this work as part of another work, you may do so under the terms of:

  • The GNU Lesser General Public License version 2 or later

Disclaimer: this software comes with no warranty, express or implied.

Commit count: 0

cargo fmt