---------------------------------------------------------------- -- Normal Bases Inversion (NB_inversion.adb) -- -- -- ---------------------------------------------------------------- with Gnat.Io; use Gnat.Io; with Gf2m; use Gf2m; with Finite_Fields_Gf2m; use Finite_Fields_Gf2m; procedure Nb_Inversion is A,B,C,D,Inv: Poly_Vector; H: H_Array; W: W_Array; V,K: Integer; begin for I in 1 .. M/2 loop H(I) := 0; end loop; for I in 1 .. M/2 loop for J in 1 .. M-1 loop W(I,J) := 0; end loop; end loop; V := M/2; for I in 1 .. V loop Put("h(");Put(I);Put(") = "); Get(H(I)); end loop; for I in 1 .. V loop for J in 1 .. H(I) loop Put("W(");Put(I);Put(",");Put(J);Put(") = "); Get(W(I,J)); end loop; end loop; New_Line; loop for I in 0 .. M-1 loop Put("A(");Put(I);Put(") = "); Get(A(I)); end loop; New_Line; B := Nb_Sq(A); for I in 0 .. M-1 loop C(I) := 1; end loop; K := 0; while K < M-1 loop D := Nb_Multiplier(B,C,H,W); K := K + 1; if K = M-1 then Inv := D; end if; if K < M-1 then B := Nb_Sq(B); C := D; end if; end loop; ----------------------------------------------------- Put("Inv = "); for I in 0 .. M-1 loop Put(Inv(I)); end loop; New_Line; New_Line; end loop; end Nb_Inversion;