GaloisField`Private`ad = AdditionGF32 GaloisField`Private`mlt = MultipleGF32 GaloisField`Private`pow = PowerGF32 GaloisField`Private`vQ = VGF32Q GaloisField`Private`cQ = ConGF32Q GaloisField`Private`alvQ = AlVGF32Q BaseField[GF32] ^= GF2 Characteristic[GF32] ^= 2 ExtensionDegree[GF32] ^= 5 GFElements[GF32] ^= {0, 1, 2, 4, 8, 16, 5, 10, 20, 13, 26, 17, 7, 14, 28, 29, 31, 27, 19, 3, 6, 12, 24, 21, 15, 30, 25, 23, 11, 22, 9, 18} GFExponents[GF32] ^= {DirectedInfinity[1], 0, 1, 18, 2, 5, 19, 11, 3, 29, 6, 27, 20, 8, 12, 23, 4, 10, 30, 17, 7, 22, 28, 26, 21, 25, 9, 16, 13, 14, 24, 15} IrreduciblePolynomial[GF32] ^= {1, 0, 1, 0, 0, 1} Order[GF32] ^= 32 Sqrt[GF32[0]] ^:= GF32[0] Sqrt[GF32[1]] ^:= GF32[1] Sqrt[GF32[GaloisField`Private`y$_Integer]] ^:= Block[{GaloisField`Private`a, GaloisField`Private`b}, GaloisField`Private`a = GFExponents[GF32][[GaloisField`Private`y$ + 1]]; If[OddQ[GaloisField`Private`a], GaloisField`Private`b = (GaloisField`Private`a + Order[GF32] - 1)/2; Return[GF32[GFElements[GF32][[GaloisField`Private`b + 2]]]], Return[GF32[GFElements[GF32][[GaloisField`Private`a/2 + 2]]]]]] /; Characteristic[GF32] == 2 Sqrt[GF32[GaloisField`Private`y$_Integer]] ^:= GF32[GFElements[GF32][[GFExponents[GF32][[GaloisField`Private`y$ + 1]]/2 + 2]]] /; EvenQ[GFExponents[GF32][[GaloisField`Private`y$ + 1]]] Attributes[GaloisField`Private`y$] = {Temporary} GaloisField`Private`addi = AdditionGF32 AdditionGF32[GaloisField`Private`x$_Integer, GaloisField`Private`y$_Integer] := Block[{GaloisField`Private`lstab}, GaloisField`Private`lstab = Mod[IntegerDigits[GaloisField`Private`y$, 2, 5] + IntegerDigits[GaloisField`Private`x$, 2, 5], 2]; Return[ChToDecimal[GaloisField`Private`lstab, 2]]; Null] Attributes[GaloisField`Private`x$] = {Temporary} GaloisField`Private`multi = MultipleGF32 MultipleGF32[GaloisField`Private`y$_Integer, GaloisField`Private`z$_Integer] := GFElements[GF32][[Mod[GFExponents[GF32][[GaloisField`Private`y$ + 1]] + GFExponents[GF32][[GaloisField`Private`z$ + 1]], Order[GF32] - 1] + 2]] Attributes[GaloisField`Private`z$] = {Temporary} GaloisField`Private`pwe = PowerGF32 PowerGF32[GaloisField`Private`x$_Integer, GaloisField`Private`y$_Integer] := GFElements[GF32][[Mod[GFExponents[GF32][[GaloisField`Private`x$ + 1]]* GaloisField`Private`y$, Order[GF32] - 1] + 2]]