---------------------------------------------------------------- -- Polynomial modular squaring (classic_squaring.adb) -- -- Based on classic multiplier -- ---------------------------------------------------------------- with Gnat.Io; use Gnat.Io; with GF2m; use GF2m; with finite_fields_GF2m; use finite_fields_GF2m; procedure classic_squaring is A,F,C: poly_vector; D: poly2_vector; R: poly_matrix_m1m2; x: Bit; begin for i in 0 .. m-1 loop Put("A(");Put(i);Put(") = "); Get(x); A(i) := x; end loop; New_Line; for i in 0 .. m-1 loop Put("F(");Put(i);Put(") = "); Get(x); F(i) := x; end loop; New_Line; D := poly_multiplication(A,A); R := reduction_matrix_R(F); for j in 0 .. m-1 loop for i in 0 .. m-2 loop Put(R(j,i)); end loop; New_Line; end loop; for j in 0 .. m-1 loop C(j) := D(j); end loop; for j in 0 .. m-1 loop for i in 0 .. m-2 loop C(j) := m2xor(C(j),m2and(R(j,i),D(m+i))); end loop; end loop; ----------------------------------------------------- Put("C = "); for i in 0 .. m-1 loop Put(C(i)); end loop; New_Line; end classic_squaring;