---------------------------------------------------------------- -- Binary Algorithm (binary_Polynomials.adb) -- -- -- ---------------------------------------------------------------- with Gnat.Io; use Gnat.Io; with Polynomials; use Polynomials; procedure Binary_Polynomials is A, B, C, D, F, G, H, Old_B, Old_D, Z, Y, Zero: Polynomial; Coef: Natural_Mod_P; begin for I in 0 .. M loop G(I) := 0; H(I) := 0; F(I) := 0; end loop; --F(0) := 237; F(17) := 1; F(0) := 237; F(7) := 29; F(14) := 42; 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; --for i in 0 .. m-1 loop h(i) := 117; end loop; h(m) := 0; for I in 0 .. M loop Zero(I) := 0; end loop; ---------------------------------------------------------------------------- A := F; B := H; C := Zero; D := G; while Degree(B) > 0 loop if B(0) = 0 then B := Shift_One(B); D := Divide_By_X(D, F); else Coef := (A(0)*Invert(B(0))) mod P; Old_B := B; Old_D := D; B := Shift_One(Subtract(A, Product(B, Coef))); D := Divide_By_X(Subtract(C, Product(D, Coef)),F); if Degree(A) > Degree(Old_B) then A := Old_B; C := Old_D; end if; end if; end loop; Z := Product(D, Invert(B(0))); ----------------------------------------------------------------------------- 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 Binary_Polynomials;