pub struct ScalarPrimitive<C>where
    C: Curve,{ /* private fields */ }
Expand description

Generic scalar type with primitive 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§

§

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

pub const ZERO: ScalarPrimitive<C> = Self{ inner: <C::Uint>::ZERO,}

Zero scalar.

pub const ONE: ScalarPrimitive<C> = Self{ inner: <C::Uint>::ONE,}

Multiplicative identity.

pub const MODULUS: <C as Curve>::Uint = C::ORDER

Scalar modulus.

pub fn random(rng: &mut impl CryptoRngCore) -> ScalarPrimitive<C>

Generate a random ScalarPrimitive.

pub fn new(uint: <C as Curve>::Uint) -> CtOption<ScalarPrimitive<C>>

Create a new scalar from Curve::Uint.

pub fn from_bytes( bytes: &GenericArray<u8, <C as Curve>::FieldBytesSize> ) -> CtOption<ScalarPrimitive<C>>

Decode ScalarPrimitive from a serialized field element

pub fn from_slice(slice: &[u8]) -> Result<ScalarPrimitive<C>, Error>

Decode ScalarPrimitive from a big endian byte slice.

pub fn as_uint(&self) -> &<C as Curve>::Uint

Borrow the inner C::Uint.

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

Borrow the inner limbs as a slice.

pub fn is_zero(&self) -> Choice

Is this ScalarPrimitive value equal to zero?

pub fn is_even(&self) -> Choice

Is this ScalarPrimitive value even?

pub fn is_odd(&self) -> Choice

Is this ScalarPrimitive value odd?

pub fn to_bytes(&self) -> GenericArray<u8, <C as Curve>::FieldBytesSize>

Encode ScalarPrimitive as a serialized field element.

pub fn to_uint(&self) -> <C as Curve>::Uint

Convert to a C::Uint.

Trait Implementations§

§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the + operator.
§

fn add(self, other: &ScalarPrimitive<C>) -> ScalarPrimitive<C>

Performs the + operation. Read more
§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the + operator.
§

fn add(self, other: ScalarPrimitive<C>) -> ScalarPrimitive<C>

Performs the + operation. Read more
§

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

§

fn add_assign(&mut self, other: &ScalarPrimitive<C>)

Performs the += operation. Read more
§

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

§

fn add_assign(&mut self, other: ScalarPrimitive<C>)

Performs the += operation. Read more
§

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

§

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

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

impl<C> Clone for ScalarPrimitive<C>where C: Clone + Curve, <C as Curve>::Uint: Clone,

§

fn clone(&self) -> ScalarPrimitive<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
§

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

§

fn conditional_select( a: &ScalarPrimitive<C>, b: &ScalarPrimitive<C>, choice: Choice ) -> ScalarPrimitive<C>

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
§

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

§

fn ct_eq(&self, other: &ScalarPrimitive<C>) -> Choice

Determine if two items are equal. Read more
source§

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

Determine if two items are NOT equal. Read more
§

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

§

fn ct_gt(&self, other: &ScalarPrimitive<C>) -> Choice

Determine whether self > other. Read more
§

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

§

fn ct_lt(&self, other: &ScalarPrimitive<C>) -> Choice

Determine whether self < other. Read more
§

impl<C> Debug for ScalarPrimitive<C>where C: Debug + Curve, <C as Curve>::Uint: Debug,

§

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

Formats the value using the given formatter. Read more
§

impl<C> Default for ScalarPrimitive<C>where C: Default + Curve, <C as Curve>::Uint: Default,

§

fn default() -> ScalarPrimitive<C>

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

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

§

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

Formats the value using the given formatter. Read more
§

impl<C> From<&NonZeroScalar<C>> for ScalarPrimitive<C>where C: CurveArithmetic,

§

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

Converts to this type from the input type.
§

impl<C> From<NonZeroScalar<C>> for ScalarPrimitive<C>where C: CurveArithmetic,

§

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

Converts to this type from the input type.
§

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

§

fn from(n: u64) -> ScalarPrimitive<C>

Converts to this type from the input type.
§

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

§

type Err = Error

The associated error which can be returned from parsing.
§

fn from_str(hex: &str) -> Result<ScalarPrimitive<C>, Error>

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

impl<C> FromUintUnchecked for ScalarPrimitive<C>where C: Curve,

§

type Uint = <C as Curve>::Uint

Unsigned integer type (i.e. Curve::Uint)
§

fn from_uint_unchecked(uint: <C as Curve>::Uint) -> ScalarPrimitive<C>

Instantiate scalar from an unsigned integer without checking whether the value overflows the field modulus. Read more
§

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

§

fn is_high(&self) -> Choice

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

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

§

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

Formats the value using the given formatter.
§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the - operator.
§

fn neg(self) -> ScalarPrimitive<C>

Performs the unary - operation. Read more
§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the - operator.
§

fn neg(self) -> ScalarPrimitive<C>

Performs the unary - operation. Read more
§

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

§

fn cmp(&self, other: &ScalarPrimitive<C>) -> 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
§

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

§

fn eq(&self, other: &ScalarPrimitive<C>) -> 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.
§

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

§

fn partial_cmp(&self, other: &ScalarPrimitive<C>) -> 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
§

impl<C> ShrAssign<usize> for ScalarPrimitive<C>where C: Curve,

§

fn shr_assign(&mut self, rhs: usize)

Performs the >>= operation. Read more
§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the - operator.
§

fn sub(self, other: &ScalarPrimitive<C>) -> ScalarPrimitive<C>

Performs the - operation. Read more
§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the - operator.
§

fn sub(self, other: ScalarPrimitive<C>) -> ScalarPrimitive<C>

Performs the - operation. Read more
§

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

§

fn sub_assign(&mut self, other: &ScalarPrimitive<C>)

Performs the -= operation. Read more
§

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

§

fn sub_assign(&mut self, other: ScalarPrimitive<C>)

Performs the -= operation. Read more
§

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

§

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

Formats the value using the given formatter.
§

impl<C> Copy for ScalarPrimitive<C>where C: Copy + Curve, <C as Curve>::Uint: Copy,

§

impl<C> DefaultIsZeroes for ScalarPrimitive<C>where C: Curve,

§

impl<C> Eq for ScalarPrimitive<C>where C: Curve,

Auto Trait Implementations§

§

impl<C> RefUnwindSafe for ScalarPrimitive<C>where <C as Curve>::Uint: RefUnwindSafe,

§

impl<C> Send for ScalarPrimitive<C>

§

impl<C> Sync for ScalarPrimitive<C>

§

impl<C> Unpin for ScalarPrimitive<C>where <C as Curve>::Uint: Unpin,

§

impl<C> UnwindSafe for ScalarPrimitive<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
§

impl<A, T> AsBits<T> for Awhere A: AsRef<[T]>, T: BitStore,

§

fn as_bits<O>(&self) -> &BitSlice<T, O>where O: BitOrder,

Views self as an immutable bit-slice region with the O ordering.
§

fn try_as_bits<O>(&self) -> Result<&BitSlice<T, O>, BitSpanError<T>>where O: BitOrder,

Attempts to view self as an immutable bit-slice region with the O ordering. 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
§

impl<T> Conv for T

§

fn conv<T>(self) -> Twhere Self: Into<T>,

Converts self into T using Into<T>. Read more
§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. 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.

§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> Rwhere Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> Rwhere Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R ) -> Rwhere Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
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
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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.
§

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

§

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