Skip to main content

ScalarPrimitive

Struct ScalarPrimitive 

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>

Zero scalar.

pub const ONE: ScalarPrimitive<C>

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 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 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 duplicate 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 From<&Scalar> for ScalarPrimitive<NistP256>

§

fn from(scalar: &Scalar) -> ScalarPrimitive<NistP256>

Converts to this type from the input type.
§

impl From<&Scalar> for ScalarPrimitive<Secp256k1>

§

fn from(scalar: &Scalar) -> ScalarPrimitive<Secp256k1>

Converts to this type from the input type.
§

impl From<&ScalarPrimitive<NistP256>> for Scalar

§

fn from(scalar: &ScalarPrimitive<NistP256>) -> Scalar

Converts to this type from the input type.
§

impl From<&ScalarPrimitive<Secp256k1>> for Scalar

§

fn from(scalar: &ScalarPrimitive<Secp256k1>) -> Scalar

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 From<Scalar> for ScalarPrimitive<NistP256>

§

fn from(scalar: Scalar) -> ScalarPrimitive<NistP256>

Converts to this type from the input type.
§

impl From<Scalar> for ScalarPrimitive<Secp256k1>

§

fn from(scalar: Scalar) -> ScalarPrimitive<Secp256k1>

Converts to this type from the input type.
§

impl From<ScalarPrimitive<NistP256>> for Scalar

§

fn from(scalar: ScalarPrimitive<NistP256>) -> Scalar

Converts to this type from the input type.
§

impl From<ScalarPrimitive<Secp256k1>> for Scalar

§

fn from(scalar: ScalarPrimitive<Secp256k1>) -> Scalar

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. 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> 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) -> Self
where Self: Sized,

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

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

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

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
§

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

§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

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

impl<C> PartialOrd 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

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

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

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

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 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 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. Read more
§

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> Freeze for ScalarPrimitive<C>
where <C as Curve>::Uint: Freeze,

§

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 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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> ConditionallyNegatable for T
where 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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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 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<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

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 T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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.
§

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

§

fn vzip(self) -> V

§

impl<Z> Zeroize for Z
where Z: DefaultIsZeroes,

§

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 T
where T: Add<Rhs, Output = Output> + Sub<Rhs, Output = Output> + AddAssign<Rhs> + SubAssign<Rhs>,

§

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