 Overview of the GF (Galois Field) Package - Maple Programming Help

Overview of the GF (Galois Field) Package

 Calling Sequence GF(p, k, a)

Parameters

 p - prime integer k - positive integer a - (optional) irreducible polynomial of degree k over the integers mod p

Description

 • The GF command returns a module G of procedures and constants for doing arithmetic in the finite field GF(p^k), a Galois Field with ${p}^{k}$ elements. The field GF(p^k) is defined by the field extension GF(p)[x]/(a) where a is an irreducible polynomial of degree k over the integers mod p.
 • If a is not specified, an irreducible polynomial of degree k over the integers mod p is chosen at random.  It can be accessed as the constant G:-extension.  The elements of GF(p^k) are represented using the $\mathrm{modp1}$ representation.
 • First, you need to define an instance of a Galois field using, for example, G := GF(2, 3). This defines all operations for G, the field of characteristic 2 with 8 elements.
 • The G:-input and G:-output commands convert from an integer in the range $0..{p}^{k}-1$ to the corresponding polynomial and back. Alternatively, G:-ConvertIn and G:-ConvertOut convert an element from GF(p^k) to a Maple sum of products, a univariate polynomial where the variable used is that given in the argument a. Otherwise the name ? is used.
 • Arithmetic in the field is defined by the following functions. G:-+, G:--, G:-*, G:-^, G:-inverse, G:-/

$G:-+,G:--,G:-,G:-^,G:-\mathrm{inverse},G:-/$

 • Field arithmetic can be written very naturally by using a use statement; see the examples below.
 • The additive and multiplicative identities are given by G:-zero and G:-one.
 • The G:-trace, G:-norm, and G:-order commands compute the trace, norm and multiplicative order of an element from GF(p^k) respectively.
 • The G:-random command returns a random element from GF(p^k).
 • The G:-PrimitiveElement command generates a primitive element at random.
 • The G:-isPrimitiveElement command tests whether an element from GF(p^k) is a primitive element, being a generator for the multiplicative group GF(p^k) - {0}.
 • For backwards compatibility, exports of the module returned by the GF command can also be accessed by indexed notation, such as G[':-ConvertIn']. However, using the more modern form G:-ConvertIn, you do not need to quote the name to avoid evaluation.

Examples

 > $\mathrm{G16}≔\mathrm{GF}\left(2,4,{\mathrm{\alpha }}^{4}+\mathrm{\alpha }+1\right):$
 > $a≔\mathrm{G16}:-\mathrm{ConvertIn}\left(\mathrm{\alpha }\right)$
 ${a}{≔}{\mathrm{\alpha }}{\mathbf{mod}}{2}$ (1)
 > $\mathrm{G16}:-\mathrm{*}\left(a,a\right)$
 ${{\mathrm{\alpha }}}^{{2}}{\mathbf{mod}}{2}$ (2)
 > $\mathrm{G16}:-\mathrm{^}\left(a,4\right)$
 $\left({\mathrm{\alpha }}{+}{1}\right){\mathbf{mod}}{2}$ (3)
 > $x≔\mathrm{G16}:-\mathrm{^}\left(a,8\right)$
 ${x}{≔}\left({{\mathrm{\alpha }}}^{{2}}{+}{1}\right){\mathbf{mod}}{2}$ (4)
 > $\mathrm{G16}:-\mathrm{output}\left(x\right)$
 ${5}$ (5)
 > $\mathrm{G16}:-\mathrm{ConvertOut}\left(x\right)$
 ${{\mathrm{\alpha }}}^{{2}}{+}{1}$ (6)
 > $\mathrm{G16}:-\mathrm{isPrimitiveElement}\left(a\right)$
 ${\mathrm{true}}$ (7)
 > $x≔\mathrm{G16}:-\mathrm{^}\left(a,-1\right)$
 ${x}{≔}\left({{\mathrm{\alpha }}}^{{3}}{+}{1}\right){\mathbf{mod}}{2}$ (8)
 > $\mathrm{G16}:-\mathrm{*}\left(a,x\right)$
 ${1}{\mathbf{mod}}{2}$ (9)

The use statement, if used carefully, can make arithmetic operations in the field much more natural.

 > $\mathbf{use}\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}\mathrm{G16}\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}\mathbf{in}\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}y≔a\left(a+x\right);\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}z≔a-y;\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}{z}^{3}+{y}^{2}\phantom{\rule[-0.0ex]{0.5em}{0.0ex}}\mathbf{end use}$
 ${y}{≔}\left({{\mathrm{\alpha }}}^{{2}}{+}{1}\right){\mathbf{mod}}{2}$
 ${z}{≔}\left({{\mathrm{\alpha }}}^{{2}}{+}{\mathrm{\alpha }}{+}{1}\right){\mathbf{mod}}{2}$
 $\left({\mathrm{\alpha }}{+}{1}\right){\mathbf{mod}}{2}$ (10)
 >