---------------------------------------------------------------- -- finite_fields package (finite_fields.ads) -- -- Defines several usefull funtions for finite fields operations -- of Chapter 3 examples ---------------------------------------------------------------- package finite_fields is subtype Bit is Natural range 0 .. 1; type bit_vector is array (natural range <>) of bit; n: constant natural := 20; m: constant natural := 239; --m: constant natural := 41; k: constant natural := 8; --k: constant := 12; s: constant natural := 3; --s = rounded(n/k) logn: constant := 5; R: constant := 2**k; Minus_Inv_M: constant := 241; --Minus_Inv_M: constant := 999; exp_k: constant := R mod m; exp_2k: constant := (R*R) mod m; --exp_k: constant := 37; --exp_2k: constant := 16; subtype Digit is Natural range 0 .. 2**K - 1; type Digit_Vector is array (0 .. S-1) of Digit; function b_table(m: digit) return digit_vector; function mod_m_addition(x, y, m, k: natural) return natural; procedure csa_mod_addition(xc, xs, y: in natural; rc, rs: out natural); procedure csa_mod_doubling(xc, xs: in natural; rc, rs: out natural); function mp(x, y: natural) return natural; end finite_fields;