---------------------------------------------------------------- -- Optimal extension fields, version 2(oef2.adb) -- -- -- ---------------------------------------------------------------- with Gnat.Io; use Gnat.Io; with Polynomials; use Polynomials; procedure Oef2 is F, G, H, E, A, Z, Y, One: Polynomial; begin for I in 0 .. M loop G(I) := 0; H(I) := 0; F(I) := 0; end loop; F(0) := 237; F(17) := 1; G(1) := 1; G(5) := 47; G(9) := 230; G(15) := 117; H(3) := 211; H(9) := 123; H(11) := 7; H(15) := 189; One(0) := 1; for I in 1 .. M loop One(I) := 0; end loop; ---------------------------------------------------- A := H; for J in 0 .. M-1 loop E(J) := (A(J)*Frobenius(J,1)) mod P; end loop; Put("e = "); for I in 0 .. M-1 loop Put(E(I)); Put(" "); end loop; New_Line; New_Line; A := Product_Mod_F(E, A, F); for J in 0 .. M-1 loop E(J) := (A(J)*Frobenius(J,2)) mod P; end loop; A := Product_Mod_F(E, A, F); for J in 0 .. M-1 loop E(J) := (A(J)*Frobenius(J,4)) mod P; end loop; A := Product_Mod_F(E, A, F); for J in 0 .. M-1 loop E(J) := (A(J)*Frobenius(J,8)) mod P; end loop; A := Product_Mod_F(E, A, F); for J in 0 .. M-1 loop E(J) := (A(J)*Frobenius(J,1)) mod P; end loop; A := Product_Mod_F(E, H, F); E := Product(E, Invert(A(0))); Z := Product_Mod_F(E, G, F); ------------------------------------------------------ Y := Product_Mod_F(Z, H, F); Put("g = "); for I in 0 .. M-1 loop Put(G(I)); Put(" "); end loop; New_Line; Put("h = "); for I in 0 .. M-1 loop Put(H(I)); Put(" "); end loop; New_Line; Put("z = "); for I in 0 .. M-1 loop Put(Z(I)); Put(" "); end loop; New_Line; Put("z.h = "); for I in 0 .. M-1 loop Put(Y(I)); Put(" "); end loop; New_Line; end Oef2;