> > restart; >
[email protected] - 30/8/2014 >
Overview of the GF (Galois Field) Package Calling Sequence GF(p, k, a)
Parameters prime integer k - positive integer a - (optional) irreducible polynomial of degree k over the integers mod p 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 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:-`/`
• 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. > > G4 := GF(2,2,alpha^2+alpha+1): a := G4:-ConvertIn(alpha); a := α > G4:-`*`(a,a); 1+α > G4:-`^`(a,2); 1+α > x := G4:-`^`(a,2); x := 1 + α > G4:-output(x); 3 > G4:-ConvertOut(x); α+1 > G4:-isPrimitiveElement(a); true > x := G4:-`^`(a,-1); x := 1 + α > G4:-`*`(a,x); 1 > use G4 in y := a * ( a + x ); z := a - y; z^3 + y^2 end use; y := α z := 0 1+α > use G4 in x^3*y^2 end use; 1+α > use G4 in x^3*y^2+x^3*y end use; 1 General definition: > G4:=GF(2,2); G4 := Z2 [ T ] / 〈 T2 + T + 1 〉 > > >