use super::*;
use crate::*;
pub trait RingElement:
Sized
+ Copy
+ Clone
+ Default
+ Display
+ Add<Output = Self>
+ AddAssign
+ Sub<Output = Self>
+ SubAssign
+ Mul<Output = Self>
+ MulAssign
+ PartialEq
+ From<u128>
+ Sum
+ Product
+ Sync
+ Send
{
const CARDINALITY: u128;
const Q: u128 = Self::CARDINALITY;
fn is_zero(&self) -> bool {
*self == Self::default()
}
fn one() -> Self {
Self::from(1u128)
}
fn negone() -> Self {
Self::from(Self::Q - 1)
}
fn zero() -> Self {
Self::default()
}
fn sample_uniform<R: Rng>(rng: &mut R) -> Self {
Self::from(rng.random::<u128>())
}
fn as_le_bytes(&self) -> Vec<u8>;
}