# InnerNormalBasisFieldFunctions GF¶

InnerNormalBasisFieldFunctions(`GF`) (unexposed): This package has functions used by every normal basis finite field extension domain.

*: (Vector GF, Vector GF) -> Vector GF

`x*y` is undocumented. See *

/: (Vector GF, Vector GF) -> Vector GF

`x/y` is undocumented. See /

^: (Vector GF, Integer) -> Vector GF

`x^n` is undocumented. See ^

basis: PositiveInteger -> Vector Vector GF

`basis(n)` is undocumented. See basis

dAndcExp: (Vector GF, NonNegativeInteger, SingleInteger) -> Vector GF

`dAndcExp(v, n, k)` computes `v^e` interpreting `v` as an element of normal basis field. A divide and conquer algorithm similar to the one from `D`.`R`.Stinson, “Some observations on parallel Algorithms for fast exponentiation in `GF`(2^n)”, Siam `J`. Computation, Vol.19, No.4, `pp`.711-717, August 1990 is used. Argument `k` is a parameter of this algorithm.

expPot: (Vector GF, SingleInteger, SingleInteger) -> Vector GF

`expPot(v, e, d)` returns the sum from `i = 0` to `e - 1` of `v^(q^i*d)`, interpreting `v` as an element of a normal basis field and where `q` is the size of the ground field. Note: for a description of the algorithm, see `T`.Itoh and `S`.Tsujii, “A fast algorithm for computing multiplicative inverses in `GF`(2^m) using normal bases”, Information and Computation 78, `pp`.171-177, 1988.

index: (PositiveInteger, PositiveInteger) -> Vector GF

`index(n, m)` is a index function for vectors of length `n` over the ground field.

inv: Vector GF -> Vector GF

`inv x` is undocumented. See inv

lookup: Vector GF -> PositiveInteger

`lookup(x)` is undocumented. See lookup

minimalPolynomial: Vector GF -> SparseUnivariatePolynomial GF

`minimalPolynomial(x)` is undocumented. See minimalPolynomial

norm: (Vector GF, PositiveInteger) -> Vector GF

`norm(x, n)` is undocumented. See norm

normal?: Vector GF -> Boolean

`normal?(x)` is undocumented. See normal?

normalElement: PositiveInteger -> Vector GF

`normalElement(n)` is undocumented. See normalElement

pol: Vector GF -> SparseUnivariatePolynomial GF

`pol(v)` turns the vector `[v0, ..., vn]` into the polynomial `v0+v1*x+ ... + vn*x^n`.

qPot: (Vector GF, Integer) -> Vector GF

`qPot(v, e)` computes `v^(q^e)`, interpreting `v` as an element of normal basis field, `q` the size of the ground field. This is done by a cyclic `e`-shift of the vector `v`.

random: PositiveInteger -> Vector GF

`random(n)` creates a vector over the ground field with random entries.

repSq: (Vector GF, NonNegativeInteger) -> Vector GF

`repSq(v, e)` computes `v^e` by repeated squaring, interpreting `v` as an element of a normal basis field.

setFieldInfo: (Vector List Record(value: GF, index: SingleInteger), GF) -> Void

`setFieldInfo(m, p)` initializes the field arithmetic, where `m` is the multiplication table and `p` is the respective normal element of the ground field `GF`.

trace: (Vector GF, PositiveInteger) -> Vector GF

`trace(x, n)` is undocumented. See trace

xn: NonNegativeInteger -> SparseUnivariatePolynomial GF

`xn(n)` returns the polynomial `x^n-1`.