arcium-primitives 0.4.2

Arcium primitives
Documentation
pub mod m107;
mod m107_ops;
mod m107_wide;

pub use m107::Mersenne107;

#[cfg(test)]
mod test {
    use num_bigint::{BigInt, Sign};

    use crate::algebra::field::mersenne::Mersenne107;

    pub(super) fn bigint_to_m107(val: BigInt) -> Mersenne107 {
        let tmp = val.clone() % BigInt::from(Mersenne107::MODULUS);
        let tmp = (tmp + BigInt::from(Mersenne107::MODULUS)) % BigInt::from(Mersenne107::MODULUS);
        let (sign, mut tmp) = tmp.to_u64_digits();
        assert_ne!(sign, Sign::Minus, "val: {val:?}");
        assert!(tmp.len() <= 2, "val: {val:?}");
        tmp.resize(2, 0);
        Mersenne107(tmp[0] as u128 + ((tmp[1] as u128) << 64))
    }
}