pub struct ScalarPrimitive<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§

source§

impl<C> ScalarPrimitive<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: &mut impl CryptoRngCore) -> Self

Generate a random ScalarPrimitive.

source

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

Create a new scalar from Curve::Uint.

source

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

Decode ScalarPrimitive from a serialized field element

source

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

Decode ScalarPrimitive from a big 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 ScalarPrimitive value equal to zero?

source

pub fn is_even(&self) -> Choice

Is this ScalarPrimitive value even?

source

pub fn is_odd(&self) -> Choice

Is this ScalarPrimitive value odd?

source

pub fn to_bytes(&self) -> FieldBytes<C>

Encode ScalarPrimitive as a serialized field element.

source

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

Convert to a C::Uint.

Trait Implementations§

source§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the + operator.
source§

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

Performs the + operation. Read more
source§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the + operator.
source§

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

Performs the + operation. Read more
source§

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

source§

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

Performs the += operation. Read more
source§

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

source§

fn add_assign(&mut self, other: Self)

Performs the += operation. Read more
source§

impl<C> AsRef<[Limb]> for ScalarPrimitive<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 ScalarPrimitive<C>where C::Uint: Clone,

source§

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
source§

impl<C> ConditionallySelectable for ScalarPrimitive<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 ScalarPrimitive<C>where C: Curve,

source§

fn ct_eq(&self, other: &Self) -> 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
source§

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

source§

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

Determine whether self > other. Read more
source§

impl<C> ConstantTimeLess for ScalarPrimitive<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 ScalarPrimitive<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 ScalarPrimitive<C>where C::Uint: Default,

source§

fn default() -> ScalarPrimitive<C>

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

impl<'de, C> Deserialize<'de> for ScalarPrimitive<C>where C: Curve,

Available on crate feature serde only.
source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<C> Display for ScalarPrimitive<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 ScalarPrimitive<C>where C: CurveArithmetic,

Available on crate feature arithmetic only.
source§

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

Converts to this type from the input type.
source§

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

Available on crate feature arithmetic only.
source§

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

Converts to this type from the input type.
source§

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

source§

fn from(n: u64) -> Self

Converts to this type from the input type.
source§

impl<C> FromStr for ScalarPrimitive<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> FromUintUnchecked for ScalarPrimitive<C>where C: Curve,

§

type Uint = <C as Curve>::Uint

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

fn from_uint_unchecked(uint: C::Uint) -> Self

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

impl<C> IsHigh for ScalarPrimitive<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 ScalarPrimitive<C>where C: Curve,

source§

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

Formats the value using the given formatter.
source§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the - operator.
source§

fn neg(self) -> ScalarPrimitive<C>

Performs the unary - operation. Read more
source§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the - operator.
source§

fn neg(self) -> Self

Performs the unary - operation. Read more
source§

impl<C> Ord for ScalarPrimitive<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,

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

impl<C> PartialEq for ScalarPrimitive<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 for ScalarPrimitive<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> Serialize for ScalarPrimitive<C>where C: Curve,

Available on crate feature serde only.
source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>where S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

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

source§

fn shr_assign(&mut self, rhs: usize)

Performs the >>= operation. Read more
source§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the - operator.
source§

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

Performs the - operation. Read more
source§

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

§

type Output = ScalarPrimitive<C>

The resulting type after applying the - operator.
source§

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

Performs the - operation. Read more
source§

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

source§

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

Performs the -= operation. Read more
source§

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

source§

fn sub_assign(&mut self, other: Self)

Performs the -= operation. Read more
source§

impl<C> UpperHex for ScalarPrimitive<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 ScalarPrimitive<C>where C::Uint: Copy,

source§

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

source§

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

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
source§

impl<T> Conv for T

source§

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.

source§

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

source§

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
source§

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
source§

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
source§

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
source§

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
source§

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.
source§

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.
source§

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.
source§

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 for T

§

type Output = T

Should always be Self
source§

impl<T> Tap for T

source§

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

Immutable access to a value. Read more
source§

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

Mutable access to a value. Read more
source§

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
source§

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
source§

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
source§

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
source§

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
source§

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
source§

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

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

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

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

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.
source§

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.
source§

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.
source§

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.
source§

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.
source§

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
source§

impl<T> TryConv for T

source§

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.
source§

impl<T> DeserializeOwned for Twhere T: for<'de> Deserialize<'de>,

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>,