use super::Fp;
pub trait Fp2: Fp {
const ZETA: Self;
const MINUS_ZETA: Self;
fn set_x0_small(&mut self, x: i32);
fn set_x1_small(&mut self, x: i32);
fn from_i32_pair(x0: i32, x1: i32) -> Self;
fn from_u32_pair(x0: u32, x1: u32) -> Self;
fn from_i64_pair(x0: i64, x1: i64) -> Self;
fn from_u64_pair(x0: u64, x1: u64) -> Self;
fn set_conjugate(&mut self);
fn conjugate(self) -> Self;
fn is_square_base_field(self) -> u32;
fn precompute_dlp_tables(self, n: usize) -> (Vec<usize>, Vec<Self>, u32);
fn solve_dlp_2e(
self,
x: &Self,
e: usize,
precomputed_tables: Option<(&Vec<usize>, &Vec<Self>)>,
) -> (Vec<u8>, u32);
}