Struct curve25519_dalek::scalar::Scalar
source · pub struct Scalar { /* private fields */ }
Expand description
The Scalar
struct holds an element of \(\mathbb Z / \ell\mathbb Z \).
Implementations§
source§impl Scalar
impl Scalar
sourcepub fn from_bytes_mod_order(bytes: [u8; 32]) -> Scalar
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 \).
sourcepub fn from_bytes_mod_order_wide(input: &[u8; 64]) -> Scalar
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 \).
sourcepub fn from_canonical_bytes(bytes: [u8; 32]) -> CtOption<Scalar>
pub fn from_canonical_bytes(bytes: [u8; 32]) -> CtOption<Scalar>
Attempt to construct a Scalar
from a canonical byte representation.
§Return
Some(s)
, wheres
is theScalar
corresponding tobytes
, ifbytes
is a canonical byte representation modulo the group order \( \ell \);None
ifbytes
is not a canonical byte representation.
sourcepub 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.
pub const fn from_bits(bytes: [u8; 32]) -> Scalar
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
impl Scalar
sourcepub fn random<R: CryptoRngCore + ?Sized>(rng: &mut R) -> Self
Available on crate feature rand_core
only.
pub fn random<R: CryptoRngCore + ?Sized>(rng: &mut R) -> Self
rand_core
only.Return a Scalar
chosen uniformly at random using a user-provided RNG.
§Inputs
rng
: any RNG which implementsCryptoRngCore
(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);
sourcepub fn hash_from_bytes<D>(input: &[u8]) -> Scalar
Available on crate feature digest
only.
pub fn hash_from_bytes<D>(input: &[u8]) -> Scalar
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());
sourcepub fn from_hash<D>(hash: D) -> Scalar
Available on crate feature digest
only.
pub fn from_hash<D>(hash: D) -> Scalar
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, ],
);
sourcepub const fn to_bytes(&self) -> [u8; 32]
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]);
sourcepub const fn as_bytes(&self) -> &[u8; 32]
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]);
sourcepub fn invert(&self) -> Scalar
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);
sourcepub fn batch_invert(inputs: &mut [Scalar]) -> Scalar
Available on crate feature alloc
only.
pub fn batch_invert(inputs: &mut [Scalar]) -> Scalar
alloc
only.Given a slice of nonzero (possibly secret) Scalar
s,
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<'b> AddAssign<&'b Scalar> for Scalar
impl<'b> AddAssign<&'b Scalar> for Scalar
source§fn add_assign(&mut self, _rhs: &'b Scalar)
fn add_assign(&mut self, _rhs: &'b Scalar)
+=
operation. Read moresource§impl AddAssign for Scalar
impl AddAssign for Scalar
source§fn add_assign(&mut self, rhs: Scalar)
fn add_assign(&mut self, rhs: Scalar)
+=
operation. Read moresource§impl ConditionallySelectable for Scalar
impl ConditionallySelectable for Scalar
source§impl ConstantTimeEq for Scalar
impl ConstantTimeEq for Scalar
source§impl<'de> Deserialize<'de> for Scalar
Available on crate feature serde
only.
impl<'de> Deserialize<'de> for Scalar
serde
only.source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
source§impl Field for Scalar
Available on crate feature group
only.
impl Field for Scalar
group
only.source§fn random(rng: impl RngCore) -> Self
fn random(rng: impl RngCore) -> Self
source§fn invert(&self) -> CtOption<Self>
fn invert(&self) -> CtOption<Self>
source§fn sqrt(&self) -> CtOption<Self>
fn sqrt(&self) -> CtOption<Self>
source§fn is_zero_vartime(&self) -> bool
fn is_zero_vartime(&self) -> bool
source§impl From<u64> for Scalar
impl From<u64> for Scalar
source§fn from(x: u64) -> Scalar
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 FromUniformBytes<64> for Scalar
Available on crate feature group
only.
impl FromUniformBytes<64> for Scalar
group
only.source§fn from_uniform_bytes(bytes: &[u8; 64]) -> Self
fn from_uniform_bytes(bytes: &[u8; 64]) -> Self
source§impl<'a, 'b> Mul<&'a EdwardsBasepointTable> for &'b Scalar
impl<'a, 'b> Mul<&'a EdwardsBasepointTable> for &'b Scalar
source§fn mul(self, basepoint_table: &'a EdwardsBasepointTable) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix128> for &'b Scalar
impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix128> for &'b Scalar
source§fn mul(self, basepoint_table: &'a EdwardsBasepointTableRadix128) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix256> for &'b Scalar
impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix256> for &'b Scalar
source§fn mul(self, basepoint_table: &'a EdwardsBasepointTableRadix256) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix32> for &'b Scalar
impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix32> for &'b Scalar
source§fn mul(self, basepoint_table: &'a EdwardsBasepointTableRadix32) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix64> for &'b Scalar
impl<'a, 'b> Mul<&'a EdwardsBasepointTableRadix64> for &'b Scalar
source§fn mul(self, basepoint_table: &'a EdwardsBasepointTableRadix64) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'a, 'b> Mul<&'b EdwardsPoint> for &'a Scalar
impl<'a, 'b> Mul<&'b EdwardsPoint> for &'a Scalar
source§fn mul(self, point: &'b EdwardsPoint) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'b> Mul<&'b EdwardsPoint> for Scalar
impl<'b> Mul<&'b EdwardsPoint> for Scalar
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§fn mul(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
fn mul(self, rhs: &'b EdwardsPoint) -> EdwardsPoint
*
operation. Read moresource§impl Mul<&MontgomeryPoint> for &Scalar
impl Mul<&MontgomeryPoint> for &Scalar
§type Output = MontgomeryPoint
type Output = MontgomeryPoint
*
operator.source§fn mul(self, point: &MontgomeryPoint) -> MontgomeryPoint
fn mul(self, point: &MontgomeryPoint) -> MontgomeryPoint
*
operation. Read moresource§impl<'b> Mul<&'b MontgomeryPoint> for Scalar
impl<'b> Mul<&'b MontgomeryPoint> for Scalar
§type Output = MontgomeryPoint
type Output = MontgomeryPoint
*
operator.source§fn mul(self, rhs: &'b MontgomeryPoint) -> MontgomeryPoint
fn mul(self, rhs: &'b MontgomeryPoint) -> MontgomeryPoint
*
operation. Read moresource§impl<'a, 'b> Mul<&'a RistrettoBasepointTable> for &'b Scalar
Available on crate feature precomputed-tables
only.
impl<'a, 'b> Mul<&'a RistrettoBasepointTable> for &'b Scalar
precomputed-tables
only.§type Output = RistrettoPoint
type Output = RistrettoPoint
*
operator.source§fn mul(self, basepoint_table: &'a RistrettoBasepointTable) -> RistrettoPoint
fn mul(self, basepoint_table: &'a RistrettoBasepointTable) -> RistrettoPoint
*
operation. Read moresource§impl<'a, 'b> Mul<&'b RistrettoPoint> for &'a Scalar
impl<'a, 'b> Mul<&'b RistrettoPoint> for &'a Scalar
source§fn mul(self, point: &'b RistrettoPoint) -> RistrettoPoint
fn mul(self, point: &'b RistrettoPoint) -> RistrettoPoint
Scalar multiplication: compute self * scalar
.
§type Output = RistrettoPoint
type Output = RistrettoPoint
*
operator.source§impl<'b> Mul<&'b RistrettoPoint> for Scalar
impl<'b> Mul<&'b RistrettoPoint> for Scalar
§type Output = RistrettoPoint
type Output = RistrettoPoint
*
operator.source§fn mul(self, rhs: &'b RistrettoPoint) -> RistrettoPoint
fn mul(self, rhs: &'b RistrettoPoint) -> RistrettoPoint
*
operation. Read moresource§impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTable
impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTable
source§fn mul(self, scalar: &'b Scalar) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix128
impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix128
source§fn mul(self, scalar: &'b Scalar) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix256
impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix256
source§fn mul(self, scalar: &'b Scalar) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix32
impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix32
source§fn mul(self, scalar: &'b Scalar) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix64
impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsBasepointTableRadix64
source§fn mul(self, scalar: &'b Scalar) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsPoint
impl<'a, 'b> Mul<&'b Scalar> for &'a EdwardsPoint
source§fn mul(self, scalar: &'b Scalar) -> EdwardsPoint
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
type Output = EdwardsPoint
*
operator.source§impl Mul<&Scalar> for &MontgomeryPoint
impl Mul<&Scalar> for &MontgomeryPoint
Multiply this MontgomeryPoint
by a Scalar
.
source§fn mul(self, scalar: &Scalar) -> MontgomeryPoint
fn mul(self, scalar: &Scalar) -> MontgomeryPoint
Given self
\( = u_0(P) \), and a Scalar
\(n\), return \( u_0([n]P) \)
§type Output = MontgomeryPoint
type Output = MontgomeryPoint
*
operator.source§impl<'a, 'b> Mul<&'b Scalar> for &'a RistrettoBasepointTable
Available on crate feature precomputed-tables
only.
impl<'a, 'b> Mul<&'b Scalar> for &'a RistrettoBasepointTable
precomputed-tables
only.§type Output = RistrettoPoint
type Output = RistrettoPoint
*
operator.source§impl<'a, 'b> Mul<&'b Scalar> for &'a RistrettoPoint
impl<'a, 'b> Mul<&'b Scalar> for &'a RistrettoPoint
source§fn mul(self, scalar: &'b Scalar) -> RistrettoPoint
fn mul(self, scalar: &'b Scalar) -> RistrettoPoint
Scalar multiplication: compute scalar * self
.
§type Output = RistrettoPoint
type Output = RistrettoPoint
*
operator.source§impl Mul<&Scalar> for &SubgroupPoint
Available on crate feature group
only.
impl Mul<&Scalar> for &SubgroupPoint
group
only.source§fn mul(self, scalar: &Scalar) -> SubgroupPoint
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
type Output = SubgroupPoint
*
operator.source§impl<'b> Mul<&'b Scalar> for EdwardsPoint
impl<'b> Mul<&'b Scalar> for EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§impl<'b> Mul<&'b Scalar> for MontgomeryPoint
impl<'b> Mul<&'b Scalar> for MontgomeryPoint
§type Output = MontgomeryPoint
type Output = MontgomeryPoint
*
operator.source§impl<'b> Mul<&'b Scalar> for RistrettoPoint
impl<'b> Mul<&'b Scalar> for RistrettoPoint
§type Output = RistrettoPoint
type Output = RistrettoPoint
*
operator.source§impl<'b> Mul<&'b Scalar> for SubgroupPoint
impl<'b> Mul<&'b Scalar> for SubgroupPoint
§type Output = SubgroupPoint
type Output = SubgroupPoint
*
operator.source§impl Mul<&SubgroupPoint> for &Scalar
Available on crate feature group
only.
impl Mul<&SubgroupPoint> for &Scalar
group
only.source§fn mul(self, point: &SubgroupPoint) -> SubgroupPoint
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
type Output = SubgroupPoint
*
operator.source§impl<'b> Mul<&'b SubgroupPoint> for Scalar
impl<'b> Mul<&'b SubgroupPoint> for Scalar
§type Output = SubgroupPoint
type Output = SubgroupPoint
*
operator.source§fn mul(self, rhs: &'b SubgroupPoint) -> SubgroupPoint
fn mul(self, rhs: &'b SubgroupPoint) -> SubgroupPoint
*
operation. Read moresource§impl<'a> Mul<EdwardsPoint> for &'a Scalar
impl<'a> Mul<EdwardsPoint> for &'a Scalar
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
*
operation. Read moresource§impl Mul<EdwardsPoint> for Scalar
impl Mul<EdwardsPoint> for Scalar
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
fn mul(self, rhs: EdwardsPoint) -> EdwardsPoint
*
operation. Read moresource§impl<'a> Mul<MontgomeryPoint> for &'a Scalar
impl<'a> Mul<MontgomeryPoint> for &'a Scalar
§type Output = MontgomeryPoint
type Output = MontgomeryPoint
*
operator.source§fn mul(self, rhs: MontgomeryPoint) -> MontgomeryPoint
fn mul(self, rhs: MontgomeryPoint) -> MontgomeryPoint
*
operation. Read moresource§impl Mul<MontgomeryPoint> for Scalar
impl Mul<MontgomeryPoint> for Scalar
§type Output = MontgomeryPoint
type Output = MontgomeryPoint
*
operator.source§fn mul(self, rhs: MontgomeryPoint) -> MontgomeryPoint
fn mul(self, rhs: MontgomeryPoint) -> MontgomeryPoint
*
operation. Read moresource§impl<'a> Mul<RistrettoPoint> for &'a Scalar
impl<'a> Mul<RistrettoPoint> for &'a Scalar
§type Output = RistrettoPoint
type Output = RistrettoPoint
*
operator.source§fn mul(self, rhs: RistrettoPoint) -> RistrettoPoint
fn mul(self, rhs: RistrettoPoint) -> RistrettoPoint
*
operation. Read moresource§impl Mul<RistrettoPoint> for Scalar
impl Mul<RistrettoPoint> for Scalar
§type Output = RistrettoPoint
type Output = RistrettoPoint
*
operator.source§fn mul(self, rhs: RistrettoPoint) -> RistrettoPoint
fn mul(self, rhs: RistrettoPoint) -> RistrettoPoint
*
operation. Read moresource§impl<'a> Mul<Scalar> for &'a EdwardsPoint
impl<'a> Mul<Scalar> for &'a EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§impl<'a> Mul<Scalar> for &'a MontgomeryPoint
impl<'a> Mul<Scalar> for &'a MontgomeryPoint
§type Output = MontgomeryPoint
type Output = MontgomeryPoint
*
operator.source§impl<'a> Mul<Scalar> for &'a RistrettoPoint
impl<'a> Mul<Scalar> for &'a RistrettoPoint
§type Output = RistrettoPoint
type Output = RistrettoPoint
*
operator.source§impl<'a> Mul<Scalar> for &'a SubgroupPoint
impl<'a> Mul<Scalar> for &'a SubgroupPoint
§type Output = SubgroupPoint
type Output = SubgroupPoint
*
operator.source§impl Mul<Scalar> for EdwardsPoint
impl Mul<Scalar> for EdwardsPoint
§type Output = EdwardsPoint
type Output = EdwardsPoint
*
operator.source§impl Mul<Scalar> for MontgomeryPoint
impl Mul<Scalar> for MontgomeryPoint
§type Output = MontgomeryPoint
type Output = MontgomeryPoint
*
operator.source§impl Mul<Scalar> for RistrettoPoint
impl Mul<Scalar> for RistrettoPoint
§type Output = RistrettoPoint
type Output = RistrettoPoint
*
operator.source§impl Mul<Scalar> for SubgroupPoint
impl Mul<Scalar> for SubgroupPoint
§type Output = SubgroupPoint
type Output = SubgroupPoint
*
operator.source§impl<'a> Mul<SubgroupPoint> for &'a Scalar
impl<'a> Mul<SubgroupPoint> for &'a Scalar
§type Output = SubgroupPoint
type Output = SubgroupPoint
*
operator.source§fn mul(self, rhs: SubgroupPoint) -> SubgroupPoint
fn mul(self, rhs: SubgroupPoint) -> SubgroupPoint
*
operation. Read moresource§impl Mul<SubgroupPoint> for Scalar
impl Mul<SubgroupPoint> for Scalar
§type Output = SubgroupPoint
type Output = SubgroupPoint
*
operator.source§fn mul(self, rhs: SubgroupPoint) -> SubgroupPoint
fn mul(self, rhs: SubgroupPoint) -> SubgroupPoint
*
operation. Read moresource§impl<'b> MulAssign<&'b Scalar> for EdwardsPoint
impl<'b> MulAssign<&'b Scalar> for EdwardsPoint
source§fn mul_assign(&mut self, scalar: &'b Scalar)
fn mul_assign(&mut self, scalar: &'b Scalar)
*=
operation. Read moresource§impl MulAssign<&Scalar> for MontgomeryPoint
impl MulAssign<&Scalar> for MontgomeryPoint
source§fn mul_assign(&mut self, scalar: &Scalar)
fn mul_assign(&mut self, scalar: &Scalar)
*=
operation. Read moresource§impl<'b> MulAssign<&'b Scalar> for RistrettoPoint
impl<'b> MulAssign<&'b Scalar> for RistrettoPoint
source§fn mul_assign(&mut self, scalar: &'b Scalar)
fn mul_assign(&mut self, scalar: &'b Scalar)
*=
operation. Read moresource§impl<'b> MulAssign<&'b Scalar> for Scalar
impl<'b> MulAssign<&'b Scalar> for Scalar
source§fn mul_assign(&mut self, _rhs: &'b Scalar)
fn mul_assign(&mut self, _rhs: &'b Scalar)
*=
operation. Read moresource§impl MulAssign<&Scalar> for SubgroupPoint
Available on crate feature group
only.
impl MulAssign<&Scalar> for SubgroupPoint
group
only.source§fn mul_assign(&mut self, scalar: &Scalar)
fn mul_assign(&mut self, scalar: &Scalar)
*=
operation. Read moresource§impl MulAssign<Scalar> for EdwardsPoint
impl MulAssign<Scalar> for EdwardsPoint
source§fn mul_assign(&mut self, rhs: Scalar)
fn mul_assign(&mut self, rhs: Scalar)
*=
operation. Read moresource§impl MulAssign<Scalar> for MontgomeryPoint
impl MulAssign<Scalar> for MontgomeryPoint
source§fn mul_assign(&mut self, rhs: Scalar)
fn mul_assign(&mut self, rhs: Scalar)
*=
operation. Read moresource§impl MulAssign<Scalar> for RistrettoPoint
impl MulAssign<Scalar> for RistrettoPoint
source§fn mul_assign(&mut self, rhs: Scalar)
fn mul_assign(&mut self, rhs: Scalar)
*=
operation. Read moresource§impl MulAssign<Scalar> for SubgroupPoint
impl MulAssign<Scalar> for SubgroupPoint
source§fn mul_assign(&mut self, rhs: Scalar)
fn mul_assign(&mut self, rhs: Scalar)
*=
operation. Read moresource§impl MulAssign for Scalar
impl MulAssign for Scalar
source§fn mul_assign(&mut self, rhs: Scalar)
fn mul_assign(&mut self, rhs: Scalar)
*=
operation. Read moresource§impl PartialEq for Scalar
impl PartialEq for Scalar
source§impl PrimeField for Scalar
Available on crate feature group
only.
impl PrimeField for Scalar
group
only.§type Repr = [u8; 32]
type Repr = [u8; 32]
source§fn from_repr(repr: Self::Repr) -> CtOption<Self>
fn from_repr(repr: Self::Repr) -> CtOption<Self>
source§fn from_repr_vartime(repr: Self::Repr) -> Option<Self>
fn from_repr_vartime(repr: Self::Repr) -> Option<Self>
source§fn to_repr(&self) -> Self::Repr
fn to_repr(&self) -> Self::Repr
source§const MODULUS: &'static str = "0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"
const MODULUS: &'static str = "0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"
source§const CAPACITY: u32 = 252u32
const CAPACITY: u32 = 252u32
source§const MULTIPLICATIVE_GENERATOR: Self = _
const MULTIPLICATIVE_GENERATOR: Self = _
modulus - 1
order. This element must also be
a quadratic nonresidue. Read moresource§const ROOT_OF_UNITY: Self = _
const ROOT_OF_UNITY: Self = _
2^s
root of unity. Read moresource§const ROOT_OF_UNITY_INV: Self = _
const ROOT_OF_UNITY_INV: Self = _
Self::ROOT_OF_UNITY
.source§impl PrimeFieldBits for Scalar
Available on crate feature group-bits
only.
impl PrimeFieldBits for Scalar
group-bits
only.source§fn to_le_bits(&self) -> FieldBits<Self::ReprBits>
fn to_le_bits(&self) -> FieldBits<Self::ReprBits>
source§fn char_le_bits() -> FieldBits<Self::ReprBits>
fn char_le_bits() -> FieldBits<Self::ReprBits>
source§impl<'b> SubAssign<&'b Scalar> for Scalar
impl<'b> SubAssign<&'b Scalar> for Scalar
source§fn sub_assign(&mut self, _rhs: &'b Scalar)
fn sub_assign(&mut self, _rhs: &'b Scalar)
-=
operation. Read moresource§impl SubAssign for Scalar
impl SubAssign for Scalar
source§fn sub_assign(&mut self, rhs: Scalar)
fn sub_assign(&mut self, rhs: Scalar)
-=
operation. Read moreimpl Copy for Scalar
impl Eq for Scalar
Auto Trait Implementations§
impl Freeze for Scalar
impl RefUnwindSafe for Scalar
impl Send for Scalar
impl Sync for Scalar
impl Unpin for Scalar
impl UnwindSafe for Scalar
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> ConditionallyNegatable for T
impl<T> ConditionallyNegatable for T
source§fn conditional_negate(&mut self, choice: Choice)
fn conditional_negate(&mut self, choice: Choice)
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.