Crate guff[−][src]
Expand description
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:
-
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 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:
- 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)
See the top-level Readme
for more information about the above.
Basic Use: doing maths in a particular field
As a user, the steps to take to use this library are:
-
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)
Traits
A typing trait meant to map to a primitive unsigned integer type such as u8, u16 or u32.