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 \).
theorem from_bytes_mod_order_spec (bytes : Array U8 32#usize) :
from_bytes_mod_order bytes ⦃ (s : Scalar) =>
U8x32_as_Nat s.bytes ≡ U8x32_as_Nat bytes [MOD L] ∧
U8x32_as_Nat s.bytes < L ⦄
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 \).
theorem from_bytes_mod_order_wide_spec (input : Array U8 64#usize) :
from_bytes_mod_order_wide input ⦃ (result : Scalar) =>
U8x32_as_Nat result.bytes ≡ U8x64_as_Nat input [MOD L] ∧
U8x32_as_Nat result.bytes < L ⦄
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), wheresis theScalarcorresponding tobytes, ifbytesis a canonical byte representation modulo the group order \( \ell \);Noneifbytesis not a canonical byte representation.
theorem from_canonical_bytes_spec (bytes : Array U8 32#usize) :
from_canonical_bytes bytes ⦃ (s : subtle.CtOption Scalar) =>
(U8x32_as_Nat bytes < L → s.is_some = Choice.one ∧ s.value.bytes = bytes) ∧
(L ≤ U8x32_as_Nat bytes → s.is_some = Choice.zero) ⦄
Source§impl Scalar
impl Scalar
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]);theorem to_bytes_spec (s : Scalar) :
to_bytes s ⦃ (a : Array U8 32#usize) =>
a = s.bytes ∧
mk a = s ⦄
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]);theorem as_bytes_spec (s : Scalar) :
as_bytes s ⦃ (result : Array U8 32#usize) =>
result = s.bytes ∧
mk result = s ⦄
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);theorem invert_spec (self : Scalar) (h : U8x32_as_Nat self.bytes % L ≠ 0) :
invert self ⦃ (result : Scalar) =>
U8x32_as_Nat self.bytes * U8x32_as_Nat result.bytes ≡ 1 [MOD L] ⦄
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) 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());theorem batch_invert_spec
(inputs : Slice scalar.Scalar)
(vals : ℕ → ℕ)
(h_vals_lt : ∀ j < inputs.val.length, vals j < L)
(h_vals_nz : ∀ j < inputs.val.length, vals j % L ≠ 0)
(h_vals_def : ∀ j < inputs.val.length,
SliceScalarAt inputs j (fun b => U8x32_as_Nat b = vals j)) :
batch_invert inputs ⦃ (result : scalar.Scalar × Slice scalar.Scalar) =>
U8x32_as_Nat result.1.bytes * PrefixProd vals inputs.val.length ≡ 1 [MOD L] ∧
∀ j < inputs.val.length,
SliceScalarAt result.2 j
(fun b => U8x32_as_Nat b * vals j ≡ 1 [MOD L]) ⦄
Trait Implementations§
Source§impl<'a> Add<&'a Scalar> for &Scalar
impl<'a> Add<&'a Scalar> for &Scalar
Source§fn add(self, _rhs: &'a Scalar) -> Scalar
fn add(self, _rhs: &'a Scalar) -> Scalar
+ operation. Read moretheorem add_spec (self _rhs : scalar.Scalar)
(h_self : U8x32_as_Nat self.bytes < L)
(h_rhs : U8x32_as_Nat _rhs.bytes < L) :
add self _rhs ⦃ (result : scalar.Scalar) =>
U8x32_as_Nat result.bytes ≡ U8x32_as_Nat self.bytes + U8x32_as_Nat _rhs.bytes [MOD L] ∧
U8x32_as_Nat result.bytes < L ⦄
Source§impl<'a> AddAssign<&'a Scalar> for Scalar
impl<'a> AddAssign<&'a Scalar> for Scalar
Source§fn add_assign(&mut self, _rhs: &'a Scalar)
fn add_assign(&mut self, _rhs: &'a 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§fn conditional_select(a: &Self, b: &Self, choice: Choice) -> Self
fn conditional_select(a: &Self, b: &Self, choice: Choice) -> Self
theorem conditional_select_spec
(a b : scalar.Scalar)
(choice : subtle.Choice) :
conditional_select a b choice ⦃ (result : scalar.Scalar) =>
result = if choice.val = 1#u8 then b else a ⦄
Source§fn conditional_assign(&mut self, other: &Self, choice: Choice)
fn conditional_assign(&mut self, other: &Self, choice: Choice)
Source§fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)
fn conditional_swap(a: &mut Self, b: &mut Self, choice: Choice)
self and other if choice == 1; otherwise,
reassign both unto themselves. Read moreSource§impl ConstantTimeEq for Scalar
impl ConstantTimeEq for Scalar
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<'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\).
Source§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\).
Source§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\).
Source§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\).
Source§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\).
Source§type Output = EdwardsPoint
type Output = EdwardsPoint
* operator.Source§impl<'a> Mul<&'a EdwardsPoint> for &Scalar
impl<'a> Mul<&'a EdwardsPoint> for &Scalar
Source§fn mul(self, point: &'a EdwardsPoint) -> EdwardsPoint
fn mul(self, point: &'a EdwardsPoint) -> EdwardsPoint
Scalar multiplication: compute scalar * self.
For scalar multiplication of a basepoint,
EdwardsBasepointTable is approximately 4x faster.
Source§type Output = EdwardsPoint
type Output = EdwardsPoint
* operator.Source§impl<'b> Mul<&'b EdwardsPoint> for Scalar
impl<'b> Mul<&'b EdwardsPoint> for Scalar
Source§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
Source§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
Source§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> Mul<&'a RistrettoBasepointTable> for &Scalar
Available on crate feature precomputed-tables only.
impl<'a> Mul<&'a RistrettoBasepointTable> for &Scalar
precomputed-tables only.Source§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> Mul<&'a RistrettoPoint> for &Scalar
impl<'a> Mul<&'a RistrettoPoint> for &Scalar
Source§fn mul(self, point: &'a RistrettoPoint) -> RistrettoPoint
fn mul(self, point: &'a RistrettoPoint) -> RistrettoPoint
Scalar multiplication: compute self * scalar.
Source§type Output = RistrettoPoint
type Output = RistrettoPoint
* operator.Source§impl<'b> Mul<&'b RistrettoPoint> for Scalar
impl<'b> Mul<&'b RistrettoPoint> for Scalar
Source§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\).
Source§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\).
Source§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\).
Source§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\).
Source§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\).
Source§type Output = EdwardsPoint
type Output = EdwardsPoint
* operator.Source§impl<'a> Mul<&'a Scalar> for &EdwardsPoint
impl<'a> Mul<&'a Scalar> for &EdwardsPoint
Source§fn mul(self, scalar: &'a Scalar) -> EdwardsPoint
fn mul(self, scalar: &'a Scalar) -> EdwardsPoint
Scalar multiplication: compute scalar * self.
For scalar multiplication of a basepoint,
EdwardsBasepointTable is approximately 4x faster.
Source§type Output = EdwardsPoint
type Output = EdwardsPoint
* operator.Source§impl Mul<&Scalar> for &MontgomeryPoint
Multiply this MontgomeryPoint by a Scalar.
impl Mul<&Scalar> for &MontgomeryPoint
Multiply this MontgomeryPoint by a Scalar.
NOTE: This implementation avoids using Scalar::bits_le() and iterator adapters (.rev(), .skip()) because Charon/Aeneas cannot extract the Iterator trait machinery. Instead, we inline the bit iteration using a while loop.
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) \)
Source§type Output = MontgomeryPoint
type Output = MontgomeryPoint
* operator.Source§impl<'b> Mul<&'b Scalar> for &RistrettoBasepointTable
Available on crate feature precomputed-tables only.
impl<'b> Mul<&'b Scalar> for &RistrettoBasepointTable
precomputed-tables only.Source§type Output = RistrettoPoint
type Output = RistrettoPoint
* operator.Source§impl<'a> Mul<&'a Scalar> for &RistrettoPoint
impl<'a> Mul<&'a Scalar> for &RistrettoPoint
Source§fn mul(self, scalar: &'a Scalar) -> RistrettoPoint
fn mul(self, scalar: &'a Scalar) -> RistrettoPoint
Scalar multiplication: compute scalar * self.
Source§type Output = RistrettoPoint
type Output = RistrettoPoint
* operator.Source§impl<'a> Mul<&'a Scalar> for &Scalar
impl<'a> Mul<&'a Scalar> for &Scalar
Source§fn mul(self, _rhs: &'a Scalar) -> Scalar
fn mul(self, _rhs: &'a Scalar) -> Scalar
* operation. Read moretheorem mul_spec
(self : scalar.Scalar) (point : edwards.EdwardsPoint)
(h_self_canonical : U8x32_as_Nat self.bytes < 2 ^ 255)
(h_point_valid : point.IsValid) :
mul self point ⦃ (result : edwards.EdwardsPoint) =>
result.IsValid ∧
result.toPoint = (U8x32_as_Nat self.bytes) • point.toPoint ⦄
Source§impl<'b> Mul<&'b Scalar> for EdwardsPoint
impl<'b> Mul<&'b Scalar> for EdwardsPoint
Source§type Output = EdwardsPoint
type Output = EdwardsPoint
* operator.Source§impl<'b> Mul<&'b Scalar> for MontgomeryPoint
impl<'b> Mul<&'b Scalar> for MontgomeryPoint
Source§type Output = MontgomeryPoint
type Output = MontgomeryPoint
* operator.Source§impl<'b> Mul<&'b Scalar> for RistrettoPoint
impl<'b> Mul<&'b Scalar> for RistrettoPoint
Source§type Output = RistrettoPoint
type Output = RistrettoPoint
* operator.Source§impl<'a> Mul<EdwardsPoint> for &'a Scalar
impl<'a> Mul<EdwardsPoint> for &'a Scalar
Source§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
Source§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
Source§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
Source§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
Source§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
Source§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
Source§type Output = EdwardsPoint
type Output = EdwardsPoint
* operator.Source§impl<'a> Mul<Scalar> for &'a MontgomeryPoint
impl<'a> Mul<Scalar> for &'a MontgomeryPoint
Source§type Output = MontgomeryPoint
type Output = MontgomeryPoint
* operator.Source§impl<'a> Mul<Scalar> for &'a RistrettoPoint
impl<'a> Mul<Scalar> for &'a RistrettoPoint
Source§type Output = RistrettoPoint
type Output = RistrettoPoint
* operator.Source§impl Mul<Scalar> for EdwardsPoint
impl Mul<Scalar> for EdwardsPoint
Source§type Output = EdwardsPoint
type Output = EdwardsPoint
* operator.Source§impl Mul<Scalar> for MontgomeryPoint
impl Mul<Scalar> for MontgomeryPoint
Source§type Output = MontgomeryPoint
type Output = MontgomeryPoint
* operator.Source§impl Mul<Scalar> for RistrettoPoint
impl Mul<Scalar> for RistrettoPoint
Source§type Output = RistrettoPoint
type Output = RistrettoPoint
* operator.Source§impl<'a> MulAssign<&'a Scalar> for EdwardsPoint
impl<'a> MulAssign<&'a Scalar> for EdwardsPoint
Source§fn mul_assign(&mut self, scalar: &'a Scalar)
fn mul_assign(&mut self, scalar: &'a 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<'a> MulAssign<&'a Scalar> for RistrettoPoint
impl<'a> MulAssign<&'a Scalar> for RistrettoPoint
Source§fn mul_assign(&mut self, scalar: &'a Scalar)
fn mul_assign(&mut self, scalar: &'a Scalar)
*= operation. Read moreSource§impl<'a> MulAssign<&'a Scalar> for Scalar
impl<'a> MulAssign<&'a Scalar> for Scalar
Source§fn mul_assign(&mut self, _rhs: &'a Scalar)
fn mul_assign(&mut self, _rhs: &'a Scalar)
*= operation. Read moretheorem mul_assign_spec (self _rhs : Scalar)
(h_self : U8x32_as_Nat self.bytes < L)
(h_rhs : U8x32_as_Nat _rhs.bytes < L) :
mul_assign self _rhs ⦃ (result : Scalar) =>
U8x32_as_Nat result.bytes ≡ U8x32_as_Nat self.bytes * U8x32_as_Nat _rhs.bytes [MOD L] ∧
U8x32_as_Nat result.bytes < L ⦄
Source§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 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 Neg for &Scalar
impl Neg for &Scalar
Source§fn neg(self) -> Scalar
fn neg(self) -> Scalar
- operation. Read moretheorem neg_spec (self : scalar.Scalar)
(h_self : U8x32_as_Nat self.bytes < L) :
neg self ⦃ (result : scalar.Scalar) =>
U8x32_as_Nat result.bytes + U8x32_as_Nat self.bytes ≡ 0 [MOD L] ∧
U8x32_as_Nat result.bytes < L ⦄
Source§impl PartialEq for Scalar
impl PartialEq for Scalar
Source§impl<'a> Sub<&'a Scalar> for &Scalar
impl<'a> Sub<&'a Scalar> for &Scalar
Source§fn sub(self, rhs: &'a Scalar) -> Scalar
fn sub(self, rhs: &'a Scalar) -> Scalar
- operation. Read moretheorem sub_spec (self rhs : scalar.Scalar)
(h_self : U8x32_as_Nat self.bytes < L)
(h_rhs : U8x32_as_Nat rhs.bytes < L) :
sub self rhs ⦃ (result : scalar.Scalar) =>
U8x32_as_Nat result.bytes + U8x32_as_Nat rhs.bytes ≡
U8x32_as_Nat self.bytes [MOD L] ∧
U8x32_as_Nat result.bytes < L ⦄
Source§impl<'a> SubAssign<&'a Scalar> for Scalar
impl<'a> SubAssign<&'a Scalar> for Scalar
Source§fn sub_assign(&mut self, _rhs: &'a Scalar)
fn sub_assign(&mut self, _rhs: &'a 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 more