0.1.0 Initial placeholder version. 0.1.2 Add structs implementing GaloisField and constructors. Add README.md and unit tests. 0.1.3 Add vector operations (no unit testing yet). Refine documentation. 0.1.4 Add new guff::good module, to contain "reasonable" set of optimised maths implementations. Add optimised GF(2**4) implementation for field poly 0x13 there, backed by two generic lookup table types (for inv and mul). Fix bug in default implementation when calculating inverses in GF(2**4). Clean bill of clippy health. 0.1.5 Start using Criterion for benchmarking. Benchmark guff::good GF(16) fields versus reference. Add good GF(2**8) implementation (+test/benchmark) Warning about exp not being used is OK (access via exp_entry). Surprisingly, log/exp implementation is not faster than reference. 0.1.6 Document last run of benchmarks. Add inv() method for good GF(2**8) (fixing a couple of bugs) Add pow() method for good GF(2**8) (finding bug in reference pow) Minor documentation fixes. More benchmarking for new inv/pow methods. 0.1.7 Change field.mull() to Field::mull() since it doesn't depend on poly For u16, u32 fields, need a new approach, since tables are too big: * long multiplication on polynomial fragments * bytewise modular reduction / modular shift (linear shift feedback register) Implement static (8k) MULL (long multiplication) table Implement generic bytewise modular reduction table wrt poly Implement u16 0x1002b field: * inv via full table lookup * mul via MULL plus field-specific modular reduction table Benchmark new field, document same.