macro_rules! fp62 {
($modname: ident, $classname: ident, $bits: tt, $limbs: tt, $prime: expr, $reduction_const: expr, $montgomery_one: expr, $montgomery_r_squared: expr, $montgomery_m0_inv: expr) => { ... };
}Expand description
Create an Fp type given the following parameters:
- modname - the name of the module you want the Fp type in.
- classname - the name of the Fp struct
- bits - How many bits the prime is.
- limbs - Number of limbs (ceil(bits/62))
- prime - prime number in limbs, least significant digit first. (Note you can get this from
sageusingnum.digits(2 ^ 62)). - reduction_const - This is a constant which is used to do reduction of an arbitrary size value using Monty. This value is precomputed and is defined as: 2 ^ (62 * (limbs - 1)) * R % prime. This reduces to 2^(62 (2limbs -1)) % prime).
- montgomery_one - Montgomery One is R mod p where R is 2^(62*limbs).
- montgomery_r_squared - The above R should be used in this as well. R^2 mod prime
- m0_inv - The first element of the prime negated, inverted and modded by our limb size (2^62). m0 = prime[0]; (-m0).inverse_mod(2^62)