Module Field_ops_lib.Barrett_reduction

Calculates a mod p using barret reduction, where p is a compile-time known prime.

The full barrett reduction algorithm is described in section 3 of the Efficient FPGA Modular Multiplication Implementation paper.

Barrett reduction comprises of the following steps

stage 1: q <- approx_msb_mult(a, m)

stage 2: qp <- half_width_mult(q, p)

stage 3: t <- a - qp

stage 4: keep subtracting p from t until 0 <= t < p

Config.t can be used to control the exact parameters used in every stage.

module Config : sig ... end
module With_interface (M : sig ... end) : sig ... end

Instantiates barrett reduction module.