soroban_sdk::crypto::bls12_381

Struct Bls12_381

Source
pub struct Bls12_381 { /* private fields */ }
Expand description

Bls12_381 provides access to curve and field arithmetics on the BLS12-381 curve.

Implementations§

Source§

impl Bls12_381

Source

pub fn env(&self) -> &Env

Source

pub fn g1_is_in_subgroup(&self, p: &G1Affine) -> bool

Checks if a point p in G1 is in the correct subgroup.

Source

pub fn g1_add(&self, p0: &G1Affine, p1: &G1Affine) -> G1Affine

Adds two points p0 and p1 in G1.

Source

pub fn g1_checked_add(&self, p0: &G1Affine, p1: &G1Affine) -> Option<G1Affine>

Adds two points p0 and p1 in G1, ensuring that the result is in the correct subgroup. Note the subgroup check is computationally expensive, so if want to perform a series of additions i.e. agg = p0 + p1 + .. + pn, it may make sense to only call g1_checked_add on the final addition, while using g1_add (non-checked version) on the intermediate ones.

Source

pub fn g1_mul(&self, p0: &G1Affine, scalar: &Fr) -> G1Affine

Multiplies a point p0 in G1 by a scalar.

Source

pub fn g1_msm(&self, vp: Vec<G1Affine>, vs: Vec<Fr>) -> G1Affine

Performs a multi-scalar multiplication (MSM) operation in G1.

Source

pub fn map_fp_to_g1(&self, fp: &Fp) -> G1Affine

Maps an element in the base field Fp to a point in G1.

Source

pub fn hash_to_g1(&self, msg: &Bytes, dst: &Bytes) -> G1Affine

Hashes a message msg to a point in G1, using a domain separation tag dst.

Source

pub fn g2_is_in_subgroup(&self, p: &G2Affine) -> bool

Checks if a point p in G2 is in the correct subgroup.

Source

pub fn g2_add(&self, p0: &G2Affine, p1: &G2Affine) -> G2Affine

Adds two points p0 and p1 in G2.

Source

pub fn g2_checked_add(&self, p0: &G2Affine, p1: &G2Affine) -> Option<G2Affine>

Adds two points p0 and p1 in G2, ensuring that the result is in the correct subgroup. Note the subgroup check is computationally expensive, so if want to perform a series of additions i.e. agg = p0 + p1 + .. +pn,
it may make sense to only call g2_checked_add on the final addition, while using g2_add (non-checked version) on the intermediate ones.

Source

pub fn g2_mul(&self, p0: &G2Affine, scalar: &Fr) -> G2Affine

Multiplies a point p0 in G2 by a scalar.

Source

pub fn g2_msm(&self, vp: Vec<G2Affine>, vs: Vec<Fr>) -> G2Affine

Performs a multi-scalar multiplication (MSM) operation in G2.

Source

pub fn map_fp2_to_g2(&self, fp2: &Fp2) -> G2Affine

Maps an element in the base field Fp2 to a point in G2.

Source

pub fn hash_to_g2(&self, msg: &Bytes, dst: &Bytes) -> G2Affine

Hashes a message msg to a point in G2, using a domain separation tag dst.

Source

pub fn pairing_check(&self, vp1: Vec<G1Affine>, vp2: Vec<G2Affine>) -> bool

Performs a pairing check between vectors of points in G1 and G2.

This function computes the pairing for each pair of points in the provided vectors vp1 (G1 points) and vp2 (G2 points) and verifies if the overall pairing result is equal to the identity in the target group.

§Returns:
  • true if the pairing check holds (i.e., the pairing result is valid and equal to the identity element), otherwise false.
§Panics:
  • If the lengths of vp1 and vp2 are not equal or if they are empty.
Source

pub fn fr_add(&self, lhs: &Fr, rhs: &Fr) -> Fr

Adds two scalars in the BLS12-381 scalar field Fr.

Source

pub fn fr_sub(&self, lhs: &Fr, rhs: &Fr) -> Fr

Subtracts one scalar from another in the BLS12-381 scalar field Fr.

Source

pub fn fr_mul(&self, lhs: &Fr, rhs: &Fr) -> Fr

Multiplies two scalars in the BLS12-381 scalar field Fr.

Source

pub fn fr_pow(&self, lhs: &Fr, rhs: u64) -> Fr

Raises a scalar to the power of a given exponent in the BLS12-381 scalar field Fr.

Source

pub fn fr_inv(&self, lhs: &Fr) -> Fr

Computes the multiplicative inverse of a scalar in the BLS12-381 scalar field Fr.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T, C> Compare<&T> for C
where C: Compare<T>,

Source§

type Error = <C as Compare<T>>::Error

Source§

fn compare(&self, a: &&T, b: &&T) -> Result<Ordering, <C as Compare<&T>>::Error>

Source§

impl<T, U, E, C> Compare<(T, U)> for C
where C: Compare<T, Error = E, Error = E> + Compare<U>,

Source§

type Error = E

Source§

fn compare( &self, a: &(T, U), b: &(T, U), ) -> Result<Ordering, <C as Compare<(T, U)>>::Error>

Source§

impl<T, U, V, E, C> Compare<(T, U, V)> for C
where C: Compare<T, Error = E, Error = E, Error = E> + Compare<U> + Compare<V>,

Source§

impl<T, U, V, W, E, C> Compare<(T, U, V, W)> for C
where C: Compare<T, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W>,

Source§

impl<T, U, V, W, X, E, C> Compare<(T, U, V, W, X)> for C
where C: Compare<T, Error = E, Error = E, Error = E, Error = E, Error = E> + Compare<U> + Compare<V> + Compare<W> + Compare<X>,

Source§

impl<T, C> Compare<Box<T>> for C
where C: Compare<T>,

Source§

type Error = <C as Compare<T>>::Error

Source§

fn compare( &self, a: &Box<T>, b: &Box<T>, ) -> Result<Ordering, <C as Compare<Box<T>>>::Error>

Source§

impl<T, C> Compare<Option<T>> for C
where C: Compare<T>,

Source§

type Error = <C as Compare<T>>::Error

Source§

fn compare( &self, a: &Option<T>, b: &Option<T>, ) -> Result<Ordering, <C as Compare<Option<T>>>::Error>

Source§

impl<T, C> Compare<Rc<T>> for C
where C: Compare<T>,

Source§

type Error = <C as Compare<T>>::Error

Source§

fn compare( &self, a: &Rc<T>, b: &Rc<T>, ) -> Result<Ordering, <C as Compare<Rc<T>>>::Error>

Source§

impl<T, C> Compare<Vec<T>> for C
where C: Compare<T>,

Source§

type Error = <C as Compare<T>>::Error

Source§

fn compare( &self, a: &Vec<T>, b: &Vec<T>, ) -> Result<Ordering, <C as Compare<Vec<T>>>::Error>

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<E, T, U> IntoVal<E, T> for U
where E: Env, T: FromVal<E, U>,

Source§

fn into_val(&self, e: &E) -> T

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<E, T, U> TryIntoVal<E, T> for U
where E: Env, T: TryFromVal<E, U>,

Source§

type Error = <T as TryFromVal<E, U>>::Error

Source§

fn try_into_val(&self, env: &E) -> Result<T, <U as TryIntoVal<E, T>>::Error>

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V