pub trait CyclotomicMultSubgroup: Field {
const INVERSE_IS_FAST: bool = false;
// Provided methods
fn cyclotomic_square(&self) -> Self { ... }
fn cyclotomic_square_in_place(&mut self) -> &mut Self { ... }
fn cyclotomic_inverse(&self) -> Option<Self> { ... }
fn cyclotomic_inverse_in_place(&mut self) -> Option<&mut Self> { ... }
fn cyclotomic_exp(&self, e: impl AsRef<[u64]>) -> Self { ... }
fn cyclotomic_exp_in_place(&mut self, e: impl AsRef<[u64]>) { ... }
}Expand description
Fields that have a cyclotomic multiplicative subgroup, and which can leverage efficient inversion and squaring algorithms for elements in this subgroup. If a field has multiplicative order p^d - 1, the cyclotomic subgroups refer to subgroups of order φ_n(p), for any n < d, where φ_n is the n-th cyclotomic polynomial.
§Note
Note that this trait is unrelated to the Group trait from the ark_ec crate. That trait
denotes an additive group, while this trait denotes a multiplicative group.
Provided Associated Constants§
Sourceconst INVERSE_IS_FAST: bool = false
const INVERSE_IS_FAST: bool = false
Is the inverse fast to compute? For example, in quadratic extensions, the inverse
can be computed at the cost of negating one coordinate, which is much faster than
standard inversion.
By default this is false, but should be set to true for quadratic extensions.
Provided Methods§
Sourcefn cyclotomic_square(&self) -> Self
fn cyclotomic_square(&self) -> Self
Compute a square in the cyclotomic subgroup. By default this is computed using Field::square, but for
degree 12 extensions, this can be computed faster than normal squaring.
§Warning
This method should be invoked only when self is in the cyclotomic subgroup.
Sourcefn cyclotomic_square_in_place(&mut self) -> &mut Self
fn cyclotomic_square_in_place(&mut self) -> &mut Self
Square self in place. By default this is computed using
Field::square_in_place, but for degree 12 extensions,
this can be computed faster than normal squaring.
§Warning
This method should be invoked only when self is in the cyclotomic subgroup.
Sourcefn cyclotomic_inverse(&self) -> Option<Self>
fn cyclotomic_inverse(&self) -> Option<Self>
Compute the inverse of self. See Self::INVERSE_IS_FAST for details.
Returns None if self.is_zero(), and Some otherwise.
§Warning
This method should be invoked only when self is in the cyclotomic subgroup.
Sourcefn cyclotomic_inverse_in_place(&mut self) -> Option<&mut Self>
fn cyclotomic_inverse_in_place(&mut self) -> Option<&mut Self>
Compute the inverse of self. See Self::INVERSE_IS_FAST for details.
Returns None if self.is_zero(), and Some otherwise.
§Warning
This method should be invoked only when self is in the cyclotomic subgroup.
Sourcefn cyclotomic_exp(&self, e: impl AsRef<[u64]>) -> Self
fn cyclotomic_exp(&self, e: impl AsRef<[u64]>) -> Self
Compute a cyclotomic exponentiation of self with respect to e.
§Warning
This method should be invoked only when self is in the cyclotomic subgroup.
Sourcefn cyclotomic_exp_in_place(&mut self, e: impl AsRef<[u64]>)
fn cyclotomic_exp_in_place(&mut self, e: impl AsRef<[u64]>)
Set self to be the result of exponentiating self by e,
using efficient cyclotomic algorithms.
§Warning
This method should be invoked only when self is in the cyclotomic subgroup.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.