#finite-fields #cryptography #galois-field #math #codes #gf

no-std g2poly

Primitive implementation of polynomials over the field GF(2)

10 releases (6 stable)

new 1.2.2 Mar 23, 2025
1.2.1 Mar 22, 2025
1.1.0 Aug 12, 2024
1.0.1 Jan 17, 2023
0.1.0 Dec 25, 2018

#592 in Algorithms

Download history 26225/week @ 2024-12-01 26949/week @ 2024-12-08 26359/week @ 2024-12-15 5636/week @ 2024-12-22 9329/week @ 2024-12-29 26765/week @ 2025-01-05 35867/week @ 2025-01-12 25974/week @ 2025-01-19 31748/week @ 2025-01-26 35898/week @ 2025-02-02 35563/week @ 2025-02-09 29570/week @ 2025-02-16 38094/week @ 2025-02-23 35811/week @ 2025-03-02 41129/week @ 2025-03-09 43076/week @ 2025-03-16

159,399 downloads per month
Used in 37 crates (2 directly)

MIT/Apache

21KB
306 lines

g2poly

A small library to handle polynomials of degree < 64 over the finite field GF(2).

The main motivation for this library is generating finite fields of the form GF(2^p). Elements of GF(2^p) can be expressed as polynomials over GF(2) with degree < p. These finite fields are used in cryptographic algorithms as well as error detecting / correcting codes.

Documentation

Example

use g2poly;

let a = g2poly::G2Poly(0b10011);
assert_eq!(format!("{}", a), "G2Poly { x^4 + x + 1 }");
let b = g2poly::G2Poly(0b1);
assert_eq!(a + b, g2poly::G2Poly(0b10010));

// Since products could overflow in u64, the product is defined as a u128
assert_eq!(a * a, g2poly::G2PolyProd(0b100000101));

// This can be reduced using another polynomial
let s = a * a % g2poly::G2Poly(0b1000000);
assert_eq!(s, g2poly::G2Poly(0b101));

License

// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your // option. This file may not be copied, modified, or distributed // except according to those terms.

No runtime deps