GaloisField`Private`ad = AdditionGF8 GaloisField`Private`mlt = MultipleGF8 GaloisField`Private`pow = PowerGF8 GaloisField`Private`vQ = VGF8Q GaloisField`Private`cQ = ConGF8Q GaloisField`Private`alvQ = AlVGF8Q BaseField[GF8] ^= GF2 Characteristic[GF8] ^= 2 ExtensionDegree[GF8] ^= 3 GFElements[GF8] ^= {0, 1, 2, 4, 3, 6, 7, 5} GFExponents[GF8] ^= {DirectedInfinity[1], 0, 1, 3, 2, 6, 4, 5} IrreduciblePolynomial[GF8] ^= {1, 1, 0, 1} Order[GF8] ^= 8 Sqrt[GF8[0]] ^:= GF8[0] Sqrt[GF8[1]] ^:= GF8[1] Sqrt[GF8[GaloisField`Private`y$_Integer]] ^:= Block[{GaloisField`Private`a, GaloisField`Private`b}, GaloisField`Private`a = GFExponents[GF8][[GaloisField`Private`y$ + 1]]; If[OddQ[GaloisField`Private`a], GaloisField`Private`b = (GaloisField`Private`a + Order[GF8] - 1)/2; Return[GF8[GFElements[GF8][[GaloisField`Private`b + 2]]]], Return[GF8[GFElements[GF8][[GaloisField`Private`a/2 + 2]]]]]] /; Characteristic[GF8] == 2 Sqrt[GF8[GaloisField`Private`y$_Integer]] ^:= GF8[GFElements[GF8][[GFExponents[GF8][[GaloisField`Private`y$ + 1]]/2 + 2]]] /; EvenQ[GFExponents[GF8][[GaloisField`Private`y$ + 1]]] Attributes[GaloisField`Private`y$] = {Temporary} GaloisField`Private`addi = AdditionGF8 AdditionGF8[GaloisField`Private`x$_Integer, GaloisField`Private`y$_Integer] := Block[{GaloisField`Private`lstab}, GaloisField`Private`lstab = Mod[IntegerDigits[GaloisField`Private`y$, 2, 3] + IntegerDigits[GaloisField`Private`x$, 2, 3], 2]; Return[ChToDecimal[GaloisField`Private`lstab, 2]]; Null] Attributes[GaloisField`Private`x$] = {Temporary} GaloisField`Private`multi = MultipleGF8 MultipleGF8[GaloisField`Private`y$_Integer, GaloisField`Private`z$_Integer] := GFElements[GF8][[Mod[GFExponents[GF8][[GaloisField`Private`y$ + 1]] + GFExponents[GF8][[GaloisField`Private`z$ + 1]], Order[GF8] - 1] + 2]] Attributes[GaloisField`Private`z$] = {Temporary} GaloisField`Private`pwe = PowerGF8 PowerGF8[GaloisField`Private`x$_Integer, GaloisField`Private`y$_Integer] := GFElements[GF8][[Mod[GFExponents[GF8][[GaloisField`Private`x$ + 1]]* GaloisField`Private`y$, Order[GF8] - 1] + 2]]