pub struct Scalar { /* private fields */ }
Expand description

The Scalar struct holds an element of \(\mathbb Z / \ell\mathbb Z \).

Implementations§

source§

impl Scalar

source

pub fn from_bytes_mod_order(bytes: [u8; 32]) -> Scalar

Construct a Scalar by reducing a 256-bit little-endian integer modulo the group order \( \ell \).

source

pub fn from_bytes_mod_order_wide(input: &[u8; 64]) -> Scalar

Construct a Scalar by reducing a 512-bit little-endian integer modulo the group order \( \ell \).

source

pub fn from_canonical_bytes(bytes: [u8; 32]) -> CtOption<Scalar>

Attempt to construct a Scalar from a canonical byte representation.

§Return
  • Some(s), where s is the Scalar corresponding to bytes, if bytes is a canonical byte representation modulo the group order \( \ell \);
  • None if bytes is not a canonical byte representation.
source

pub const fn from_bits(bytes: [u8; 32]) -> Scalar

👎Deprecated since 4.0.0: This constructor outputs scalars with undefined scalar-scalar arithmetic. See docs.
Available on crate feature legacy_compatibility only.

Construct a Scalar from the low 255 bits of a 256-bit integer. This breaks the invariant that scalars are always reduced. Scalar-scalar arithmetic, i.e., addition, subtraction, multiplication, does not work on scalars produced from this function. You may only use the output of this function for EdwardsPoint::mul, MontgomeryPoint::mul, and EdwardsPoint::vartime_double_scalar_mul_basepoint. Do not use this function unless you absolutely have to.

source§

impl Scalar

source

pub const ZERO: Self = _

The scalar \( 0 \).

source

pub const ONE: Self = _

The scalar \( 1 \).

source

pub fn random<R: CryptoRngCore + ?Sized>(rng: &mut R) -> Self

Available on crate feature rand_core only.

Return a Scalar chosen uniformly at random using a user-provided RNG.

§Inputs
  • rng: any RNG which implements CryptoRngCore (i.e. CryptoRng + RngCore) interface.
§Returns

A random scalar within \(\mathbb{Z} / \ell\mathbb{Z}\).

§Example
use curve25519_dalek::scalar::Scalar;

use rand_core::OsRng;

let mut csprng = OsRng;
let a: Scalar = Scalar::random(&mut csprng);
source

pub fn hash_from_bytes<D>(input: &[u8]) -> Scalar
where D: Digest<OutputSize = U64> + Default,

Available on crate feature digest only.

Hash a slice of bytes into a scalar.

Takes a type parameter D, which is any Digest producing 64 bytes (512 bits) of output.

Convenience wrapper around from_hash.

§Example
use sha2::Sha512;

let msg = "To really appreciate architecture, you may even need to commit a murder";
let s = Scalar::hash_from_bytes::<Sha512>(msg.as_bytes());
source

pub fn from_hash<D>(hash: D) -> Scalar
where D: Digest<OutputSize = U64>,

Available on crate feature digest only.

Construct a scalar from an existing Digest instance.

Use this instead of hash_from_bytes if it is more convenient to stream data into the Digest than to pass a single byte slice.

§Example
use curve25519_dalek::digest::Update;

use sha2::Digest;
use sha2::Sha512;

let mut h = Sha512::new()
    .chain("To really appreciate architecture, you may even need to commit a murder.")
    .chain("While the programs used for The Manhattan Transcripts are of the most extreme")
    .chain("nature, they also parallel the most common formula plot: the archetype of")
    .chain("murder. Other phantasms were occasionally used to underline the fact that")
    .chain("perhaps all architecture, rather than being about functional standards, is")
    .chain("about love and death.");

let s = Scalar::from_hash(h);

println!("{:?}", s.to_bytes());
assert_eq!(
    s.to_bytes(),
    [  21,  88, 208, 252,  63, 122, 210, 152,
      154,  38,  15,  23,  16, 167,  80, 150,
      192, 221,  77, 226,  62,  25, 224, 148,
      239,  48, 176,  10, 185,  69, 168,  11, ],
);
source

pub const fn to_bytes(&self) -> [u8; 32]

Convert this Scalar to its underlying sequence of bytes.

§Example
use curve25519_dalek::scalar::Scalar;

let s: Scalar = Scalar::ZERO;

assert!(s.to_bytes() == [0u8; 32]);
source

pub const fn as_bytes(&self) -> &[u8; 32]

View the little-endian byte encoding of the integer representing this Scalar.

§Example
use curve25519_dalek::scalar::Scalar;

let s: Scalar = Scalar::ZERO;

assert!(s.as_bytes() == &[0u8; 32]);
source

pub fn invert(&self) -> Scalar

Given a nonzero Scalar, compute its multiplicative inverse.

§Warning

self MUST be nonzero. If you cannot prove that this is the case, you SHOULD NOT USE THIS FUNCTION.

§Returns

The multiplicative inverse of the this Scalar.

§Example
use curve25519_dalek::scalar::Scalar;

// x = 2238329342913194256032495932344128051776374960164957527413114840482143558222
let X: Scalar = Scalar::from_bytes_mod_order([
        0x4e, 0x5a, 0xb4, 0x34, 0x5d, 0x47, 0x08, 0x84,
        0x59, 0x13, 0xb4, 0x64, 0x1b, 0xc2, 0x7d, 0x52,
        0x52, 0xa5, 0x85, 0x10, 0x1b, 0xcc, 0x42, 0x44,
        0xd4, 0x49, 0xf4, 0xa8, 0x79, 0xd9, 0xf2, 0x04,
    ]);
// 1/x = 6859937278830797291664592131120606308688036382723378951768035303146619657244
let XINV: Scalar = Scalar::from_bytes_mod_order([
        0x1c, 0xdc, 0x17, 0xfc, 0xe0, 0xe9, 0xa5, 0xbb,
        0xd9, 0x24, 0x7e, 0x56, 0xbb, 0x01, 0x63, 0x47,
        0xbb, 0xba, 0x31, 0xed, 0xd5, 0xa9, 0xbb, 0x96,
        0xd5, 0x0b, 0xcd, 0x7a, 0x3f, 0x96, 0x2a, 0x0f,
    ]);

let inv_X: Scalar = X.invert();
assert!(XINV == inv_X);
let should_be_one: Scalar = &inv_X * &X;
assert!(should_be_one == Scalar::ONE);
source

pub fn batch_invert(inputs: &mut [Scalar]) -> Scalar

Available on crate feature alloc only.

Given a slice of nonzero (possibly secret) Scalars, compute their inverses in a batch.

§Return

Each element of inputs is replaced by its inverse.

The product of all inverses is returned.

§Warning

All input Scalars MUST be nonzero. If you cannot prove that this is the case, you SHOULD NOT USE THIS FUNCTION.

§Example
let mut scalars = [
    Scalar::from(3u64),
    Scalar::from(5u64),
    Scalar::from(7u64),
    Scalar::from(11u64),
];

let allinv = Scalar::batch_invert(&mut scalars);

assert_eq!(allinv, Scalar::from(3*5*7*11u64).invert());
assert_eq!(scalars[0], Scalar::from(3u64).invert());
assert_eq!(scalars[1], Scalar::from(5u64).invert());
assert_eq!(scalars[2], Scalar::from(7u64).invert());
assert_eq!(scalars[3], Scalar::from(11u64).invert());

Trait Implementations§

source§

impl<'a, 'b> Add<&'b Scalar> for &'a Scalar

§

type Output = Scalar

The resulting type after applying the + operator.
source§

fn add(self, _rhs: &'b Scalar) -> Scalar

Performs the + operation. Read more
source§

impl<'b> Add<&'b Scalar> for Scalar

§

type Output = Scalar

The resulting type after applying the + operator.
source§

fn add(self, rhs: &'b Scalar) -> Scalar

Performs the + operation. Read more
source§

impl<'a> Add<Scalar> for &'a Scalar

§

type Output = Scalar

The resulting type after applying the + operator.
source§

fn add(self, rhs: Scalar) -> Scalar

Performs the + operation. Read more
source§

impl Add for Scalar

§

type Output = Scalar

The resulting type after applying the + operator.
source§

fn add(self, rhs: Scalar) -> Scalar

Performs the + operation. Read more
source§

impl<'b> AddAssign<&'b Scalar> for Scalar

source§

fn add_assign(&mut self, _rhs: &'b Scalar)

Performs the += operation. Read more
source§

impl AddAssign for Scalar

source§

fn add_assign(&mut self, rhs: Scalar)

Performs the += operation. Read more
source§

impl Clone for Scalar

source§

fn clone(&self) -> Scalar

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 ConditionallySelectable for Scalar

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 ConstantTimeEq for Scalar

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 Debug for Scalar

source§

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

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

impl Default for Scalar

source§

fn default() -> Scalar

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

impl<'de> Deserialize<'de> for Scalar

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 Field for Scalar

Available on crate feature group only.
source§

const ZERO: Self = Self::ZERO

The zero element of the field, the additive identity.
source§

const ONE: Self = Self::ONE

The one element of the field, the multiplicative identity.
source§

fn random(rng: impl RngCore) -> Self

Returns an element chosen uniformly at random using a user-provided RNG.
source§

fn square(&self) -> Self

Squares this element.
source§

fn double(&self) -> Self

Doubles this element.
source§

fn invert(&self) -> CtOption<Self>

Computes the multiplicative inverse of this element, failing if the element is zero.
source§

fn sqrt_ratio(num: &Self, div: &Self) -> (Choice, Self)

Computes: Read more
source§

fn sqrt(&self) -> CtOption<Self>

Returns the square root of the field element, if it is quadratic residue. Read more
source§

fn is_zero(&self) -> Choice

Returns true iff this element is zero.
source§

fn is_zero_vartime(&self) -> bool

Returns true iff this element is zero. Read more
source§

fn cube(&self) -> Self

Cubes this element.
source§

fn sqrt_alt(&self) -> (Choice, Self)

Equivalent to Self::sqrt_ratio(self, one()). Read more
source§

fn pow<S>(&self, exp: S) -> Self
where S: AsRef<[u64]>,

Exponentiates self by exp, where exp is a little-endian order integer exponent. Read more
source§

fn pow_vartime<S>(&self, exp: S) -> Self
where S: AsRef<[u64]>,

Exponentiates self by exp, where exp is a little-endian order integer exponent. Read more
source§

impl From<u128> for Scalar

source§

fn from(x: u128) -> Scalar

Converts to this type from the input type.
source§

impl From<u16> for Scalar

source§

fn from(x: u16) -> Scalar

Converts to this type from the input type.
source§

impl From<u32> for Scalar

source§

fn from(x: u32) -> Scalar

Converts to this type from the input type.
source§

impl From<u64> for Scalar

source§

fn from(x: u64) -> Scalar

Construct a scalar from the given u64.

§Inputs

An u64 to convert to a Scalar.

§Returns

A Scalar corresponding to the input u64.

§Example
use curve25519_dalek::scalar::Scalar;

let fourtytwo = Scalar::from(42u64);
let six = Scalar::from(6u64);
let seven = Scalar::from(7u64);

assert!(fourtytwo == six * seven);
source§

impl From<u8> for Scalar

source§

fn from(x: u8) -> Scalar

Converts to this type from the input type.
source§

impl FromUniformBytes<64> for Scalar

Available on crate feature group only.
source§

fn from_uniform_bytes(bytes: &[u8; 64]) -> Self

Returns a field element that is congruent to the provided little endian unsigned byte representation of an integer.
source§

impl Hash for Scalar

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Index<usize> for Scalar

source§

fn index(&self, _index: usize) -> &u8

Index the bytes of the representative for this Scalar. Mutation is not permitted.

§

type Output = u8

The returned type after indexing.
source§

impl<'a, 'b> Mul<&'a EdwardsBasepointTable> for &'b Scalar

source§

fn mul(self, basepoint_table: &'a EdwardsBasepointTable) -> EdwardsPoint

Construct an EdwardsPoint from a Scalar \(a\) by computing the multiple \(aB\) of this basepoint \(B\).

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix128> for &'b Scalar

source§

fn mul(self, basepoint_table: &'a EdwardsBasepointTableRadix128) -> EdwardsPoint

Construct an EdwardsPoint from a Scalar \(a\) by computing the multiple \(aB\) of this basepoint \(B\).

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix256> for &'b Scalar

source§

fn mul(self, basepoint_table: &'a EdwardsBasepointTableRadix256) -> EdwardsPoint

Construct an EdwardsPoint from a Scalar \(a\) by computing the multiple \(aB\) of this basepoint \(B\).

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix32> for &'b Scalar

source§

fn mul(self, basepoint_table: &'a EdwardsBasepointTableRadix32) -> EdwardsPoint

Construct an EdwardsPoint from a Scalar \(a\) by computing the multiple \(aB\) of this basepoint \(B\).

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix64> for &'b Scalar

source§

fn mul(self, basepoint_table: &'a EdwardsBasepointTableRadix64) -> EdwardsPoint

Construct an EdwardsPoint from a Scalar \(a\) by computing the multiple \(aB\) of this basepoint \(B\).

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'b EdwardsPoint> for &'a Scalar

source§

fn mul(self, point: &'b EdwardsPoint) -> EdwardsPoint

Scalar multiplication: compute scalar * self.

For scalar multiplication of a basepoint, EdwardsBasepointTable is approximately 4x faster.

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'b> Mul<&'b EdwardsPoint> for Scalar

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b EdwardsPoint) -> EdwardsPoint

Performs the * operation. Read more
source§

impl Mul<&MontgomeryPoint> for &Scalar

§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, point: &MontgomeryPoint) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl<'b> Mul<&'b MontgomeryPoint> for Scalar

§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b MontgomeryPoint) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl<'a, 'b> Mul<&'a RistrettoBasepointTable> for &'b Scalar

Available on crate feature precomputed-tables only.
§

type Output = RistrettoPoint

The resulting type after applying the * operator.
source§

fn mul(self, basepoint_table: &'a RistrettoBasepointTable) -> RistrettoPoint

Performs the * operation. Read more
source§

impl<'a, 'b> Mul<&'b RistrettoPoint> for &'a Scalar

source§

fn mul(self, point: &'b RistrettoPoint) -> RistrettoPoint

Scalar multiplication: compute self * scalar.

§

type Output = RistrettoPoint

The resulting type after applying the * operator.
source§

impl<'b> Mul<&'b RistrettoPoint> for Scalar

§

type Output = RistrettoPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b RistrettoPoint) -> RistrettoPoint

Performs the * operation. Read more
source§

impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTable

source§

fn mul(self, scalar: &'b Scalar) -> EdwardsPoint

Construct an EdwardsPoint from a Scalar \(a\) by computing the multiple \(aB\) of this basepoint \(B\).

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix128

source§

fn mul(self, scalar: &'b Scalar) -> EdwardsPoint

Construct an EdwardsPoint from a Scalar \(a\) by computing the multiple \(aB\) of this basepoint \(B\).

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix256

source§

fn mul(self, scalar: &'b Scalar) -> EdwardsPoint

Construct an EdwardsPoint from a Scalar \(a\) by computing the multiple \(aB\) of this basepoint \(B\).

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix32

source§

fn mul(self, scalar: &'b Scalar) -> EdwardsPoint

Construct an EdwardsPoint from a Scalar \(a\) by computing the multiple \(aB\) of this basepoint \(B\).

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix64

source§

fn mul(self, scalar: &'b Scalar) -> EdwardsPoint

Construct an EdwardsPoint from a Scalar \(a\) by computing the multiple \(aB\) of this basepoint \(B\).

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsPoint

source§

fn mul(self, scalar: &'b Scalar) -> EdwardsPoint

Scalar multiplication: compute scalar * self.

For scalar multiplication of a basepoint, EdwardsBasepointTable is approximately 4x faster.

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

impl Mul<&Scalar> for &MontgomeryPoint

Multiply this MontgomeryPoint by a Scalar.

source§

fn mul(self, scalar: &Scalar) -> MontgomeryPoint

Given self \( = u_0(P) \), and a Scalar \(n\), return \( u_0([n]P) \)

§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'b Scalar> for &'a RistrettoBasepointTable

Available on crate feature precomputed-tables only.
§

type Output = RistrettoPoint

The resulting type after applying the * operator.
source§

fn mul(self, scalar: &'b Scalar) -> RistrettoPoint

Performs the * operation. Read more
source§

impl<'a, 'b> Mul<&'b Scalar> for &'a RistrettoPoint

source§

fn mul(self, scalar: &'b Scalar) -> RistrettoPoint

Scalar multiplication: compute scalar * self.

§

type Output = RistrettoPoint

The resulting type after applying the * operator.
source§

impl<'a, 'b> Mul<&'b Scalar> for &'a Scalar

§

type Output = Scalar

The resulting type after applying the * operator.
source§

fn mul(self, _rhs: &'b Scalar) -> Scalar

Performs the * operation. Read more
source§

impl Mul<&Scalar> for &SubgroupPoint

Available on crate feature group only.
source§

fn mul(self, scalar: &Scalar) -> SubgroupPoint

Scalar multiplication: compute scalar * self.

For scalar multiplication of a basepoint, EdwardsBasepointTable is approximately 4x faster.

§

type Output = SubgroupPoint

The resulting type after applying the * operator.
source§

impl<'b> Mul<&'b Scalar> for EdwardsPoint

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b Scalar) -> EdwardsPoint

Performs the * operation. Read more
source§

impl<'b> Mul<&'b Scalar> for MontgomeryPoint

§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b Scalar) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl<'b> Mul<&'b Scalar> for RistrettoPoint

§

type Output = RistrettoPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b Scalar) -> RistrettoPoint

Performs the * operation. Read more
source§

impl<'b> Mul<&'b Scalar> for Scalar

§

type Output = Scalar

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b Scalar) -> Scalar

Performs the * operation. Read more
source§

impl<'b> Mul<&'b Scalar> for SubgroupPoint

§

type Output = SubgroupPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b Scalar) -> SubgroupPoint

Performs the * operation. Read more
source§

impl Mul<&SubgroupPoint> for &Scalar

Available on crate feature group only.
source§

fn mul(self, point: &SubgroupPoint) -> SubgroupPoint

Scalar multiplication: compute scalar * self.

For scalar multiplication of a basepoint, EdwardsBasepointTable is approximately 4x faster.

§

type Output = SubgroupPoint

The resulting type after applying the * operator.
source§

impl<'b> Mul<&'b SubgroupPoint> for Scalar

§

type Output = SubgroupPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: &'b SubgroupPoint) -> SubgroupPoint

Performs the * operation. Read more
source§

impl<'a> Mul<EdwardsPoint> for &'a Scalar

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint

Performs the * operation. Read more
source§

impl Mul<EdwardsPoint> for Scalar

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint

Performs the * operation. Read more
source§

impl<'a> Mul<MontgomeryPoint> for &'a Scalar

§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: MontgomeryPoint) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl Mul<MontgomeryPoint> for Scalar

§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: MontgomeryPoint) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl<'a> Mul<RistrettoPoint> for &'a Scalar

§

type Output = RistrettoPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: RistrettoPoint) -> RistrettoPoint

Performs the * operation. Read more
source§

impl Mul<RistrettoPoint> for Scalar

§

type Output = RistrettoPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: RistrettoPoint) -> RistrettoPoint

Performs the * operation. Read more
source§

impl<'a> Mul<Scalar> for &'a EdwardsPoint

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> EdwardsPoint

Performs the * operation. Read more
source§

impl<'a> Mul<Scalar> for &'a MontgomeryPoint

§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl<'a> Mul<Scalar> for &'a RistrettoPoint

§

type Output = RistrettoPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> RistrettoPoint

Performs the * operation. Read more
source§

impl<'a> Mul<Scalar> for &'a Scalar

§

type Output = Scalar

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> Scalar

Performs the * operation. Read more
source§

impl<'a> Mul<Scalar> for &'a SubgroupPoint

§

type Output = SubgroupPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> SubgroupPoint

Performs the * operation. Read more
source§

impl Mul<Scalar> for EdwardsPoint

§

type Output = EdwardsPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> EdwardsPoint

Performs the * operation. Read more
source§

impl Mul<Scalar> for MontgomeryPoint

§

type Output = MontgomeryPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> MontgomeryPoint

Performs the * operation. Read more
source§

impl Mul<Scalar> for RistrettoPoint

§

type Output = RistrettoPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> RistrettoPoint

Performs the * operation. Read more
source§

impl Mul<Scalar> for SubgroupPoint

§

type Output = SubgroupPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> SubgroupPoint

Performs the * operation. Read more
source§

impl<'a> Mul<SubgroupPoint> for &'a Scalar

§

type Output = SubgroupPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: SubgroupPoint) -> SubgroupPoint

Performs the * operation. Read more
source§

impl Mul<SubgroupPoint> for Scalar

§

type Output = SubgroupPoint

The resulting type after applying the * operator.
source§

fn mul(self, rhs: SubgroupPoint) -> SubgroupPoint

Performs the * operation. Read more
source§

impl Mul for Scalar

§

type Output = Scalar

The resulting type after applying the * operator.
source§

fn mul(self, rhs: Scalar) -> Scalar

Performs the * operation. Read more
source§

impl<'b> MulAssign<&'b Scalar> for EdwardsPoint

source§

fn mul_assign(&mut self, scalar: &'b Scalar)

Performs the *= operation. Read more
source§

impl MulAssign<&Scalar> for MontgomeryPoint

source§

fn mul_assign(&mut self, scalar: &Scalar)

Performs the *= operation. Read more
source§

impl<'b> MulAssign<&'b Scalar> for RistrettoPoint

source§

fn mul_assign(&mut self, scalar: &'b Scalar)

Performs the *= operation. Read more
source§

impl<'b> MulAssign<&'b Scalar> for Scalar

source§

fn mul_assign(&mut self, _rhs: &'b Scalar)

Performs the *= operation. Read more
source§

impl MulAssign<&Scalar> for SubgroupPoint

Available on crate feature group only.
source§

fn mul_assign(&mut self, scalar: &Scalar)

Performs the *= operation. Read more
source§

impl MulAssign<Scalar> for EdwardsPoint

source§

fn mul_assign(&mut self, rhs: Scalar)

Performs the *= operation. Read more
source§

impl MulAssign<Scalar> for MontgomeryPoint

source§

fn mul_assign(&mut self, rhs: Scalar)

Performs the *= operation. Read more
source§

impl MulAssign<Scalar> for RistrettoPoint

source§

fn mul_assign(&mut self, rhs: Scalar)

Performs the *= operation. Read more
source§

impl MulAssign<Scalar> for SubgroupPoint

source§

fn mul_assign(&mut self, rhs: Scalar)

Performs the *= operation. Read more
source§

impl MulAssign for Scalar

source§

fn mul_assign(&mut self, rhs: Scalar)

Performs the *= operation. Read more
source§

impl<'a> Neg for &'a Scalar

§

type Output = Scalar

The resulting type after applying the - operator.
source§

fn neg(self) -> Scalar

Performs the unary - operation. Read more
source§

impl Neg for Scalar

§

type Output = Scalar

The resulting type after applying the - operator.
source§

fn neg(self) -> Scalar

Performs the unary - operation. Read more
source§

impl PartialEq for Scalar

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 PrimeField for Scalar

Available on crate feature group only.
§

type Repr = [u8; 32]

The prime field can be converted back and forth into this binary representation.
source§

fn from_repr(repr: Self::Repr) -> CtOption<Self>

Attempts to convert a byte representation of a field element into an element of this prime field, failing if the input is not canonical (is not smaller than the field’s modulus). Read more
source§

fn from_repr_vartime(repr: Self::Repr) -> Option<Self>

Attempts to convert a byte representation of a field element into an element of this prime field, failing if the input is not canonical (is not smaller than the field’s modulus). Read more
source§

fn to_repr(&self) -> Self::Repr

Converts an element of the prime field into the standard byte representation for this field. Read more
source§

fn is_odd(&self) -> Choice

Returns true iff this element is odd.
source§

const MODULUS: &'static str = "0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"

Modulus of the field written as a string for debugging purposes. Read more
source§

const NUM_BITS: u32 = 253u32

How many bits are needed to represent an element of this field.
source§

const CAPACITY: u32 = 252u32

How many bits of information can be reliably stored in the field element. Read more
source§

const TWO_INV: Self = _

Inverse of $2$ in the field.
source§

const MULTIPLICATIVE_GENERATOR: Self = _

A fixed multiplicative generator of modulus - 1 order. This element must also be a quadratic nonresidue. Read more
source§

const S: u32 = 2u32

An integer s satisfying the equation 2^s * t = modulus - 1 with t odd. Read more
source§

const ROOT_OF_UNITY: Self = _

The 2^s root of unity. Read more
source§

const ROOT_OF_UNITY_INV: Self = _

source§

const DELTA: Self = _

Generator of the t-order multiplicative subgroup. Read more
source§

fn from_str_vartime(s: &str) -> Option<Self>

Interpret a string of numbers as a (congruent) prime field element. Does not accept unnecessary leading zeroes or a blank string. Read more
source§

fn from_u128(v: u128) -> Self

Obtains a field element congruent to the integer v. Read more
source§

fn is_even(&self) -> Choice

Returns true iff this element is even.
source§

impl PrimeFieldBits for Scalar

Available on crate feature group-bits only.
§

type ReprBits = [u8; 32]

The backing store for a bit representation of a prime field element.
source§

fn to_le_bits(&self) -> FieldBits<Self::ReprBits>

Converts an element of the prime field into a little-endian sequence of bits.
source§

fn char_le_bits() -> FieldBits<Self::ReprBits>

Returns the bits of the field characteristic (the modulus) in little-endian order.
source§

impl<T> Product<T> for Scalar
where T: Borrow<Scalar>,

source§

fn product<I>(iter: I) -> Self
where I: Iterator<Item = T>,

Method which takes an iterator and generates Self from the elements by multiplying the items.
source§

impl Serialize for Scalar

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<'a, 'b> Sub<&'b Scalar> for &'a Scalar

§

type Output = Scalar

The resulting type after applying the - operator.
source§

fn sub(self, rhs: &'b Scalar) -> Scalar

Performs the - operation. Read more
source§

impl<'b> Sub<&'b Scalar> for Scalar

§

type Output = Scalar

The resulting type after applying the - operator.
source§

fn sub(self, rhs: &'b Scalar) -> Scalar

Performs the - operation. Read more
source§

impl<'a> Sub<Scalar> for &'a Scalar

§

type Output = Scalar

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Scalar) -> Scalar

Performs the - operation. Read more
source§

impl Sub for Scalar

§

type Output = Scalar

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Scalar) -> Scalar

Performs the - operation. Read more
source§

impl<'b> SubAssign<&'b Scalar> for Scalar

source§

fn sub_assign(&mut self, _rhs: &'b Scalar)

Performs the -= operation. Read more
source§

impl SubAssign for Scalar

source§

fn sub_assign(&mut self, rhs: Scalar)

Performs the -= operation. Read more
source§

impl<T> Sum<T> for Scalar
where T: Borrow<Scalar>,

source§

fn sum<I>(iter: I) -> Self
where I: Iterator<Item = T>,

Method which takes an iterator and generates Self from the elements by “summing up” the items.
source§

impl Zeroize for Scalar

Available on crate feature zeroize only.
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 Copy for Scalar

source§

impl Eq for Scalar

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

§

fn conv<T>(self) -> T
where 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 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.

§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where 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) -> R
where 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) -> R
where 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) -> R
where 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 ) -> R
where 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) -> R
where 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) -> R
where 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) -> R
where 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 ) -> R
where 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
§

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)) -> Self
where 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)) -> Self
where 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)) -> Self
where 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)) -> Self
where 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)) -> Self
where 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)) -> Self
where 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)) -> Self
where 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)) -> Self
where 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)) -> Self
where 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)) -> Self
where 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)) -> Self
where 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)) -> Self
where 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 T
where 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
§

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 T
where 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 T
where 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<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

source§

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

source§

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

source§

impl<T, Rhs, Output> ScalarMul<Rhs, Output> for T
where T: Mul<Rhs, Output = Output> + MulAssign<Rhs>,

source§

impl<T, Rhs, Output> ScalarMulOwned<Rhs, Output> for T
where T: for<'r> ScalarMul<&'r Rhs, Output>,