logo
pub trait Field: 'static + Eq + Copy + Clone + Default + Send + Sync + Debug + ConditionallySelectable + ConstantTimeEq + Add<Self, Output = Self, Output = Self> + Sub<Self, Output = Self, Output = Self> + Mul<Self, Output = Self, Output = Self> + Neg<Output = Self> + for<'a> Add<&'a Self> + for<'a> Mul<&'a Self> + for<'a> Sub<&'a Self> + MulAssign<Self> + AddAssign<Self> + SubAssign<Self> + for<'a> MulAssign<&'a Self> + for<'a> AddAssign<&'a Self> + for<'a> SubAssign<&'a Self> {
    fn random(rng: impl RngCore) -> Self;
    fn zero() -> Self;
    fn one() -> Self;
    fn square(&self) -> Self;
    fn double(&self) -> Self;
    fn invert(&self) -> CtOption<Self>;
    fn sqrt(&self) -> CtOption<Self>;

    fn is_zero(&self) -> Choice { ... }
    fn is_zero_vartime(&self) -> bool { ... }
    fn cube(&self) -> Self { ... }
    fn pow_vartime<S>(&self, exp: S) -> Self
    where
        S: AsRef<[u64]>
, { ... } }
Expand description

This trait represents an element of a field.

Required Methods

Returns an element chosen uniformly at random using a user-provided RNG.

Returns the zero element of the field, the additive identity.

Returns the one element of the field, the multiplicative identity.

Squares this element.

Doubles this element.

Computes the multiplicative inverse of this element, failing if the element is zero.

Returns the square root of the field element, if it is quadratic residue.

Provided Methods

Returns true iff this element is zero.

Returns true iff this element is zero.

Security

This method provides no constant-time guarantees. Implementors of the Field trait may optimise this method using non-constant-time logic.

Cubes this element.

Exponentiates self by exp, where exp is a little-endian order integer exponent.

This operation is variable time with respect to the exponent. If the exponent is fixed, this operation is effectively constant time.

Implementors