#finite-fields #polynomial #gf #galois #cryptography #error #galois-field

no-std g2poly

Primitive implementation of polynomials over the field GF(2)

8 releases (4 stable)

new 1.2.0 Mar 10, 2025
1.1.0 Aug 12, 2024
1.0.1 Jan 17, 2023
0.4.0 May 25, 2019
0.1.0 Dec 25, 2018

#665 in Algorithms

Download history 28134/week @ 2024-11-19 15653/week @ 2024-11-26 27961/week @ 2024-12-03 25733/week @ 2024-12-10 24036/week @ 2024-12-17 5787/week @ 2024-12-24 12496/week @ 2024-12-31 28369/week @ 2025-01-07 33086/week @ 2025-01-14 28735/week @ 2025-01-21 30796/week @ 2025-01-28 36542/week @ 2025-02-04 30799/week @ 2025-02-11 35116/week @ 2025-02-18 39382/week @ 2025-02-25 28365/week @ 2025-03-04

139,666 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