GaloisField`Private`ad = AdditionGF64 GaloisField`Private`mlt = MultipleGF64 GaloisField`Private`pow = PowerGF64 GaloisField`Private`vQ = VGF64Q GaloisField`Private`cQ = ConGF64Q GaloisField`Private`alvQ = AlVGF64Q BaseField[GF64] ^= GF2 Characteristic[GF64] ^= 2 ExtensionDegree[GF64] ^= 6 GFElements[GF64] ^= {0, 1, 2, 4, 8, 16, 32, 3, 6, 12, 24, 48, 35, 5, 10, 20, 40, 19, 38, 15, 30, 60, 59, 53, 41, 17, 34, 7, 14, 28, 56, 51, 37, 9, 18, 36, 11, 22, 44, 27, 54, 47, 29, 58, 55, 45, 25, 50, 39, 13, 26, 52, 43, 21, 42, 23, 46, 31, 62, 63, 61, 57, 49, 33} GFExponents[GF64] ^= {DirectedInfinity[1], 0, 1, 6, 2, 12, 7, 26, 3, 32, 13, 35, 8, 48, 27, 18, 4, 24, 33, 16, 14, 52, 36, 54, 9, 45, 49, 38, 28, 41, 19, 56, 5, 62, 25, 11, 34, 31, 17, 47, 15, 23, 53, 51, 37, 44, 55, 40, 10, 61, 46, 30, 50, 22, 39, 43, 29, 60, 42, 21, 20, 59, 57, 58} IrreduciblePolynomial[GF64] ^= {1, 1, 0, 0, 0, 0, 1} Order[GF64] ^= 64 Sqrt[GF64[0]] ^:= GF64[0] Sqrt[GF64[1]] ^:= GF64[1] Sqrt[GF64[GaloisField`Private`y$_Integer]] ^:= Block[{GaloisField`Private`a, GaloisField`Private`b}, GaloisField`Private`a = GFExponents[GF64][[GaloisField`Private`y$ + 1]]; If[OddQ[GaloisField`Private`a], GaloisField`Private`b = (GaloisField`Private`a + Order[GF64] - 1)/2; Return[GF64[GFElements[GF64][[GaloisField`Private`b + 2]]]], Return[GF64[GFElements[GF64][[GaloisField`Private`a/2 + 2]]]]]] /; Characteristic[GF64] == 2 Sqrt[GF64[GaloisField`Private`y$_Integer]] ^:= GF64[GFElements[GF64][[GFExponents[GF64][[GaloisField`Private`y$ + 1]]/2 + 2]]] /; EvenQ[GFExponents[GF64][[GaloisField`Private`y$ + 1]]] Attributes[GaloisField`Private`y$] = {Temporary} GaloisField`Private`addi = AdditionGF64 AdditionGF64[GaloisField`Private`x$_Integer, GaloisField`Private`y$_Integer] := Block[{GaloisField`Private`lstab}, GaloisField`Private`lstab = Mod[IntegerDigits[GaloisField`Private`y$, 2, 6] + IntegerDigits[GaloisField`Private`x$, 2, 6], 2]; Return[ChToDecimal[GaloisField`Private`lstab, 2]]; Null] Attributes[GaloisField`Private`x$] = {Temporary} GaloisField`Private`multi = MultipleGF64 MultipleGF64[GaloisField`Private`y$_Integer, GaloisField`Private`z$_Integer] := GFElements[GF64][[Mod[GFExponents[GF64][[GaloisField`Private`y$ + 1]] + GFExponents[GF64][[GaloisField`Private`z$ + 1]], Order[GF64] - 1] + 2]] Attributes[GaloisField`Private`z$] = {Temporary} GaloisField`Private`pwe = PowerGF64 PowerGF64[GaloisField`Private`x$_Integer, GaloisField`Private`y$_Integer] := GFElements[GF64][[Mod[GFExponents[GF64][[GaloisField`Private`x$ + 1]]* GaloisField`Private`y$, Order[GF64] - 1] + 2]]