sp1_lib::utils

Trait AffinePoint

Source
pub trait AffinePoint<const N: usize>: Clone + Sized {
    const GENERATOR: [u32; N];

    // Required methods
    fn new(limbs: [u32; N]) -> Self;
    fn limbs_ref(&self) -> &[u32; N];
    fn limbs_mut(&mut self) -> &mut [u32; N];
    fn add_assign(&mut self, other: &Self);
    fn double(&mut self);

    // Provided methods
    fn from(x: &[u8], y: &[u8]) -> Self { ... }
    fn from_le_bytes(bytes: &[u8]) -> Self { ... }
    fn to_le_bytes(&self) -> Vec<u8> { ... }
    fn complete_add_assign(&mut self, other: &Self) { ... }
    fn mul_assign(&mut self, scalar: &[u32]) -> Result<(), MulAssignError> { ... }
    fn multi_scalar_multiplication(
        a_bits_le: &[bool],
        a: Self,
        b_bits_le: &[bool],
        b: Self,
    ) -> Option<Self> { ... }
}

Required Associated Constants§

Source

const GENERATOR: [u32; N]

The generator.

Required Methods§

Source

fn new(limbs: [u32; N]) -> Self

Creates a new AffinePoint from the given limbs.

Source

fn limbs_ref(&self) -> &[u32; N]

Returns a reference to the limbs.

Source

fn limbs_mut(&mut self) -> &mut [u32; N]

Returns a mutable reference to the limbs. If the point is the infinity point, this will panic.

Source

fn add_assign(&mut self, other: &Self)

Adds the given AffinePoint to self.

Source

fn double(&mut self)

Doubles self.

Provided Methods§

Source

fn from(x: &[u8], y: &[u8]) -> Self

Creates a new AffinePoint from the given x and y coordinates.

The bytes are the concatenated little endian representations of the coordinates.

Source

fn from_le_bytes(bytes: &[u8]) -> Self

Creates a new AffinePoint from the given bytes in little endian.

Source

fn to_le_bytes(&self) -> Vec<u8>

Creates a new AffinePoint from the given bytes in big endian.

Source

fn complete_add_assign(&mut self, other: &Self)

Adds the given AffinePoint to self. Can be optionally overridden to use a different implementation of addition in multi-scalar multiplication, which is used in secp256k1 recovery.

Source

fn mul_assign(&mut self, scalar: &[u32]) -> Result<(), MulAssignError>

Multiplies self by the given scalar.

Source

fn multi_scalar_multiplication( a_bits_le: &[bool], a: Self, b_bits_le: &[bool], b: Self, ) -> Option<Self>

Performs multi-scalar multiplication (MSM) on slices of bit vectors and points. Note: a_bits_le and b_bits_le should be in little endian order.

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§