---------------------------------------------------------------- -- Polynomial Multiplication (classic_poly_multiplication.adb) -- -- Multiplies two polynomials using the school book algorithm -- parameter m is defined in GF2m.ads ---------------------------------------------------------------- with Gnat.Io; use Gnat.Io; with GF2m; use GF2m; with finite_fields_GF2m; use finite_fields_GF2m; procedure classic_poly_multiplication is A,B: poly_vector; C: poly2_vector; x: Bit; begin -- Input numbers 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("B(");Put(i);Put(") = "); Get(x); B(i) := x; end loop; New_Line; for i in 0 .. 2*m-2 loop C(i) := 0; end loop; for k in 0 .. m-1 loop for i in 0 .. k loop C(k) := m2xor(C(k),m2and(A(i),B(k-i))); end loop; end loop; for k in m .. 2*m-2 loop for i in k .. 2*m-2 loop C(k) := m2xor(C(k),m2and(A(k-i+(m-1)),B(i-(m-1)))); end loop; end loop; ----------------------------------------------------- -- Result is from C(2m-2) to C(0) Put("C = "); for i in 0 .. 2*m-2 loop Put(C(i)); end loop; New_Line; end classic_poly_multiplication;