//! Bls12-377 scalar field. /// Roots of unity computed from modulus and R using this sage code: /// /// ```ignore /// q = 8444461749428370424248824938781546531375899335154063827935233455917409239041 /// R = 6014086494747379908336260804527802945383293308637734276299549080986809532403 # Montgomery R /// s = 47 /// o = q - 1 /// F = GF(q) /// g = F.multiplicative_generator() /// g = F.multiplicative_generator() /// assert g.multiplicative_order() == o /// g2 = g ** (o/2**s) /// assert g2.multiplicative_order() == 2**s /// def into_chunks(val, width, n): /// return [int(int(val) // (2 ** (width * i)) % 2 ** width) for i in range(n)] /// print("Gen: ", g * R % q) /// print("Gen: ", into_chunks(g * R % q, 64, 4)) /// print("2-adic gen: ", into_chunks(g2 * R % q, 64, 4)) /// ``` use ark_ff::fields::{Fp256, MontBackend, MontConfig}; #[derive(MontConfig)] #[modulus = "8444461749428370424248824938781546531375899335154063827935233455917409239041"] #[generator = "22"] pub struct FrConfig; pub type Fr = Fp256>;