group::cofactor

Trait CofactorGroup

Source
pub trait CofactorGroup:
    Group
    + GroupEncoding
    + GroupOps<Self::Subgroup>
    + GroupOpsOwned<Self::Subgroup> {
    type Subgroup: PrimeGroup<Scalar = Self::Scalar> + Into<Self>;

    // Required methods
    fn clear_cofactor(&self) -> Self::Subgroup;
    fn into_subgroup(self) -> CtOption<Self::Subgroup>;
    fn is_torsion_free(&self) -> Choice;

    // Provided method
    fn is_small_order(&self) -> Choice { ... }
}
Expand description

This trait represents an element of a cryptographic group with a large prime-order subgroup and a comparatively-small cofactor.

Required Associated Types§

Source

type Subgroup: PrimeGroup<Scalar = Self::Scalar> + Into<Self>

The large prime-order subgroup in which cryptographic operations are performed. If Self implements PrimeGroup, then Self::Subgroup may be Self.

Required Methods§

Source

fn clear_cofactor(&self) -> Self::Subgroup

Maps self to the prime-order subgroup by multiplying this element by some k-multiple of the cofactor.

The value k does not vary between inputs for a given implementation, but may vary between different implementations of CofactorGroup because some groups have more efficient methods of clearing the cofactor when k is allowed to be different than 1.

If Self implements PrimeGroup, this returns self.

Source

fn into_subgroup(self) -> CtOption<Self::Subgroup>

Returns self if it is contained in the prime-order subgroup.

If Self implements PrimeGroup, this returns Some(self).

Source

fn is_torsion_free(&self) -> Choice

Determines if this element is “torsion free”, i.e., is contained in the prime-order subgroup.

Returns:

  • true if self has trivial torsion and is in the prime-order subgroup.
  • false if self has non-zero torsion component and is not in the prime-order subgroup.

Provided Methods§

Source

fn is_small_order(&self) -> Choice

Determines if this element is of small order.

Returns:

  • true if self is in the torsion subgroup.
  • false if self is not in the torsion 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.

Implementors§