8 releases
0.1.7  Jul 1, 2021 

0.1.6  Jun 29, 2021 
#954 in Math
86 downloads per month
Used in 4 crates
85KB
1.5K
SLoC
Grand Unified Finite Field library*
Implements GF(2^{x}) for various "natural" sizes such as 2^{8}, 2^{16} and 2^{32}.
My goals for this crate are to:

help me learn to write good modules in Rust;

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

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

explore various optimisations/adaptations (including tablebased lookups and architecturespecific SIMD code) that can selectively override some/all of the default implementations while remaining compatible with other implementations.
Also to:

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); 
eat my own dog food, so to speak, by implementing various applications that use the library;

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(2^{8}), GF(2^{16}), 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.
Dependencies
~465KB