pub struct ScalarCore<C: Curve> { /* private fields */ }
Expand description

Generic scalar type with core functionality.

This type provides a baseline level of scalar arithmetic functionality which is always available for all curves, regardless of if they implement any arithmetic traits.

serde support

When the optional serde feature of this create is enabled, [Serialize] and [Deserialize] impls are provided for this type.

The serialization is a fixed-width big endian encoding. When used with textual formats, the binary data is encoded as hexadecimal.

Implementations§

source§

impl<C> ScalarCore<C>where C: Curve,

source

pub const ZERO: Self = _

Zero scalar.

source

pub const ONE: Self = _

Multiplicative identity.

source

pub const MODULUS: C::UInt = C::ORDER

Scalar modulus.

source

pub fn random(rng: impl CryptoRng + RngCore) -> Self

Generate a random ScalarCore.

source

pub fn new(uint: C::UInt) -> CtOption<Self>

Create a new scalar from Curve::UInt.

source

pub fn from_be_bytes(bytes: FieldBytes<C>) -> CtOption<Self>

Decode ScalarCore from big endian bytes.

source

pub fn from_be_slice(slice: &[u8]) -> Result<Self>

Decode ScalarCore from a big endian byte slice.

source

pub fn from_le_bytes(bytes: FieldBytes<C>) -> CtOption<Self>

Decode ScalarCore from little endian bytes.

source

pub fn from_le_slice(slice: &[u8]) -> Result<Self>

Decode ScalarCore from a little endian byte slice.

source

pub fn as_uint(&self) -> &C::UInt

Borrow the inner C::UInt.

source

pub fn as_limbs(&self) -> &[Limb]

Borrow the inner limbs as a slice.

source

pub fn is_zero(&self) -> Choice

Is this ScalarCore value equal to zero?

source

pub fn is_even(&self) -> Choice

Is this ScalarCore value even?

source

pub fn is_odd(&self) -> Choice

Is this ScalarCore value odd?

source

pub fn to_be_bytes(self) -> FieldBytes<C>

Encode ScalarCore as big endian bytes.

source

pub fn to_le_bytes(self) -> FieldBytes<C>

Encode ScalarCore as little endian bytes.

Trait Implementations§

source§

impl<C> Add<&ScalarCore<C>> for ScalarCore<C>where C: Curve,

§

type Output = ScalarCore<C>

The resulting type after applying the + operator.
source§

fn add(self, other: &Self) -> Self

Performs the + operation. Read more
source§

impl<C> Add<ScalarCore<C>> for ScalarCore<C>where C: Curve,

§

type Output = ScalarCore<C>

The resulting type after applying the + operator.
source§

fn add(self, other: Self) -> Self

Performs the + operation. Read more
source§

impl<C> AddAssign<&ScalarCore<C>> for ScalarCore<C>where C: Curve,

source§

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

Performs the += operation. Read more
source§

impl<C> AddAssign<ScalarCore<C>> for ScalarCore<C>where C: Curve,

source§

fn add_assign(&mut self, other: Self)

Performs the += operation. Read more
source§

impl<C> AsRef<[Limb]> for ScalarCore<C>where C: Curve,

source§

fn as_ref(&self) -> &[Limb]

Converts this type into a shared reference of the (usually inferred) input type.
source§

impl<C: Clone + Curve> Clone for ScalarCore<C>where C::UInt: Clone,

source§

fn clone(&self) -> ScalarCore<C>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<C> ConditionallySelectable for ScalarCore<C>where C: Curve,

source§

fn conditional_select(a: &Self, b: &Self, choice: Choice) -> Self

Select a or b according to choice. Read more
source§

fn conditional_assign(&mut self, other: &Self, choice: Choice)

Conditionally assign other to self, according to choice. Read more
source§

fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)

Conditionally swap self and other if choice == 1; otherwise, reassign both unto themselves. Read more
source§

impl<C> ConstantTimeEq for ScalarCore<C>where C: Curve,

source§

fn ct_eq(&self, other: &Self) -> Choice

Determine if two items are equal. Read more
source§

impl<C> ConstantTimeGreater for ScalarCore<C>where C: Curve,

source§

fn ct_gt(&self, other: &Self) -> Choice

Determine whether self > other. Read more
source§

impl<C> ConstantTimeLess for ScalarCore<C>where C: Curve,

source§

fn ct_lt(&self, other: &Self) -> Choice

Determine whether self < other. Read more
source§

impl<C: Debug + Curve> Debug for ScalarCore<C>where C::UInt: Debug,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<C: Default + Curve> Default for ScalarCore<C>where C::UInt: Default,

source§

fn default() -> ScalarCore<C>

Returns the “default value” for a type. Read more
source§

impl<C> Display for ScalarCore<C>where C: Curve,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<C> From<&NonZeroScalar<C>> for ScalarCore<C>where C: Curve + ScalarArithmetic,

source§

fn from(scalar: &NonZeroScalar<C>) -> ScalarCore<C>

Converts to this type from the input type.
source§

impl<C> From<NonZeroScalar<C>> for ScalarCore<C>where C: Curve + ScalarArithmetic,

source§

fn from(scalar: NonZeroScalar<C>) -> ScalarCore<C>

Converts to this type from the input type.
source§

impl<C> From<u64> for ScalarCore<C>where C: Curve,

source§

fn from(n: u64) -> Self

Converts to this type from the input type.
source§

impl<C> FromStr for ScalarCore<C>where C: Curve,

§

type Err = Error

The associated error which can be returned from parsing.
source§

fn from_str(hex: &str) -> Result<Self>

Parses a string s to return a value of this type. Read more
source§

impl<C> IsHigh for ScalarCore<C>where C: Curve,

source§

fn is_high(&self) -> Choice

Is this scalar greater than or equal to n / 2?
source§

impl<C> LowerHex for ScalarCore<C>where C: Curve,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter.
source§

impl<C> Neg for &ScalarCore<C>where C: Curve,

§

type Output = ScalarCore<C>

The resulting type after applying the - operator.
source§

fn neg(self) -> ScalarCore<C>

Performs the unary - operation. Read more
source§

impl<C> Neg for ScalarCore<C>where C: Curve,

§

type Output = ScalarCore<C>

The resulting type after applying the - operator.
source§

fn neg(self) -> Self

Performs the unary - operation. Read more
source§

impl<C> Ord for ScalarCore<C>where C: Curve,

source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Selfwhere Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Selfwhere Self: Sized + PartialOrd<Self>,

Restrict a value to a certain interval. Read more
source§

impl<C> PartialEq<ScalarCore<C>> for ScalarCore<C>where C: Curve,

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<C> PartialOrd<ScalarCore<C>> for ScalarCore<C>where C: Curve,

source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl<C> Sub<&ScalarCore<C>> for ScalarCore<C>where C: Curve,

§

type Output = ScalarCore<C>

The resulting type after applying the - operator.
source§

fn sub(self, other: &Self) -> Self

Performs the - operation. Read more
source§

impl<C> Sub<ScalarCore<C>> for ScalarCore<C>where C: Curve,

§

type Output = ScalarCore<C>

The resulting type after applying the - operator.
source§

fn sub(self, other: Self) -> Self

Performs the - operation. Read more
source§

impl<C> SubAssign<&ScalarCore<C>> for ScalarCore<C>where C: Curve,

source§

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

Performs the -= operation. Read more
source§

impl<C> SubAssign<ScalarCore<C>> for ScalarCore<C>where C: Curve,

source§

fn sub_assign(&mut self, other: Self)

Performs the -= operation. Read more
source§

impl<C> UpperHex for ScalarCore<C>where C: Curve,

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter.
source§

impl<C: Copy + Curve> Copy for ScalarCore<C>where C::UInt: Copy,

source§

impl<C: Curve> DefaultIsZeroes for ScalarCore<C>

source§

impl<C: Curve> Eq for ScalarCore<C>

Auto Trait Implementations§

§

impl<C> RefUnwindSafe for ScalarCore<C>where <C as Curve>::UInt: RefUnwindSafe,

§

impl<C> Send for ScalarCore<C>

§

impl<C> Sync for ScalarCore<C>

§

impl<C> Unpin for ScalarCore<C>where <C as Curve>::UInt: Unpin,

§

impl<C> UnwindSafe for ScalarCore<C>where <C as Curve>::UInt: UnwindSafe,

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> ConditionallyNegatable for Twhere T: ConditionallySelectable, &'a T: for<'a> Neg<Output = T>,

source§

fn conditional_negate(&mut self, choice: Choice)

Negate self if choice == Choice(1); otherwise, leave it unchanged. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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> Same<T> for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

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

§

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 Twhere U: TryFrom<T>,

§

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<Z> Zeroize for Zwhere Z: DefaultIsZeroes,

source§

fn zeroize(&mut self)

Zero out this object from memory using Rust intrinsics which ensure the zeroization operation is not “optimized away” by the compiler.
source§

impl<T, Rhs, Output> GroupOps<Rhs, Output> for Twhere T: Add<Rhs, Output = Output> + Sub<Rhs, Output = Output> + AddAssign<Rhs> + SubAssign<Rhs>,

source§

impl<T, Rhs, Output> GroupOpsOwned<Rhs, Output> for Twhere T: for<'r> GroupOps<&'r Rhs, Output>,