Struct curve25519_dalek::scalar::Scalar[][src]

pub struct Scalar { /* fields omitted */ }

The Scalar struct holds an integer \(s < 2^{255} \) which represents an element of \(\mathbb Z / \ell\).

Both the Ristretto group and the Ed25519 basepoint have prime order \( \ell = 2^{252} + 27742317777372353535851937790883648493 \).

The code is intended to be useful with both the Ristretto group (where everything is done modulo \( \ell \)), and the X/Ed25519 setting, which mandates specific bit-twiddles that are not well-defined modulo \( \ell \).

To create a Scalar from a supposedly canonical encoding, use Scalar::from_canonical_bytes.

To create a Scalar by reducing a \(256\)-bit integer mod \( \ell \), use Scalar::from_bytes_mod_order.

To create a Scalar by reducing a \(512\)-bit integer mod \( \ell \), use Scalar::from_bytes_mod_order_wide.

To create a Scalar with a specific bit-pattern (e.g., for compatibility with X25519 "clamping"), use Scalar::from_bits.

All arithmetic on Scalars is done modulo \( \ell \).

Methods

impl Scalar
[src]

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

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

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;
  • None if bytes is not a canonical byte representation.

Construct a Scalar from the low 255 bits of a 256-bit integer.

This function is intended for applications like X25519 which require specific bit-patterns when performing scalar multiplication.

impl Scalar
[src]

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

Inputs

  • rng: any RNG which implements the rand::CryptoRng interface.

Returns

A random scalar within ℤ/lℤ.

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

extern crate sha2;
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());

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.

Convert this Scalar to its underlying sequence of bytes.

View this Scalar as a sequence of bytes.

Construct the scalar \( 0 \).

Construct the scalar \( 1 \).

Construct a scalar from the given u64.

Compute the multiplicative inverse of this scalar.

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.

This function is most efficient when the batch size (slice length) is a power of 2.

Example


let mut scalars = [
    Scalar::from_u64(3),
    Scalar::from_u64(5),
    Scalar::from_u64(7),
    Scalar::from_u64(11),
];

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

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

Reduce this Scalar modulo \(\ell\).

Check whether this Scalar is the canonical representative mod \(\ell\).

This is intended for uses like input validation, where variable-time code is acceptable.

// 2^255 - 1, since `from_bits` clears the high bit
let _2_255_minus_1 = Scalar::from_bits([0xff;32]);
assert!(!_2_255_minus_1.is_canonical());

let reduced = _2_255_minus_1.reduce();
assert!(reduced.is_canonical());

Trait Implementations

impl Copy for Scalar
[src]

impl Clone for Scalar
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl Debug for Scalar
[src]

Formats the value using the given formatter. Read more

impl Eq for Scalar
[src]

impl PartialEq for Scalar
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl ConstantTimeEq for Scalar
[src]

Determine if two items are equal. Read more

impl Index<usize> for Scalar
[src]

The returned type after indexing.

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

impl<'b> MulAssign<&'b Scalar> for Scalar
[src]

Performs the *= operation.

impl MulAssign<Scalar> for Scalar
[src]

Performs the *= operation.

impl<'a, 'b> Mul<&'b Scalar> for &'a Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'b> Mul<&'b Scalar> for Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'a> Mul<Scalar> for &'a Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl Mul<Scalar> for Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'b> AddAssign<&'b Scalar> for Scalar
[src]

Performs the += operation.

impl AddAssign<Scalar> for Scalar
[src]

Performs the += operation.

impl<'a, 'b> Add<&'b Scalar> for &'a Scalar
[src]

The resulting type after applying the + operator.

Performs the + operation.

impl<'b> Add<&'b Scalar> for Scalar
[src]

The resulting type after applying the + operator.

Performs the + operation.

impl<'a> Add<Scalar> for &'a Scalar
[src]

The resulting type after applying the + operator.

Performs the + operation.

impl Add<Scalar> for Scalar
[src]

The resulting type after applying the + operator.

Performs the + operation.

impl<'b> SubAssign<&'b Scalar> for Scalar
[src]

Performs the -= operation.

impl SubAssign<Scalar> for Scalar
[src]

Performs the -= operation.

impl<'a, 'b> Sub<&'b Scalar> for &'a Scalar
[src]

The resulting type after applying the - operator.

Performs the - operation.

impl<'b> Sub<&'b Scalar> for Scalar
[src]

The resulting type after applying the - operator.

Performs the - operation.

impl<'a> Sub<Scalar> for &'a Scalar
[src]

The resulting type after applying the - operator.

Performs the - operation.

impl Sub<Scalar> for Scalar
[src]

The resulting type after applying the - operator.

Performs the - operation.

impl<'a> Neg for &'a Scalar
[src]

The resulting type after applying the - operator.

Performs the unary - operation.

impl<'a> Neg for Scalar
[src]

The resulting type after applying the - operator.

Performs the unary - operation.

impl ConditionallyAssignable for Scalar
[src]

Conditionally assign other to self, according to choice. Read more

impl<T> Product<T> for Scalar where
    T: Borrow<Scalar>, 
[src]

Method which takes an iterator and generates Self from the elements by multiplying the items. Read more

impl<T> Sum<T> for Scalar where
    T: Borrow<Scalar>, 
[src]

Method which takes an iterator and generates Self from the elements by "summing up" the items. Read more

impl MulAssign<Scalar> for MontgomeryPoint
[src]

Performs the *= operation.

impl<'b> Mul<&'b Scalar> for MontgomeryPoint
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'a> Mul<Scalar> for &'a MontgomeryPoint
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl Mul<Scalar> for MontgomeryPoint
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'b> Mul<&'b MontgomeryPoint> for Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'a> Mul<MontgomeryPoint> for &'a Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl Mul<MontgomeryPoint> for Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'a, 'b> Mul<&'b Scalar> for &'a MontgomeryPoint
[src]

Multiply this MontgomeryPoint by a Scalar.

The resulting type after applying the * operator.

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

impl<'b> MulAssign<&'b Scalar> for MontgomeryPoint
[src]

Performs the *= operation.

impl<'a, 'b> Mul<&'b MontgomeryPoint> for &'a Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'b> MulAssign<&'b Scalar> for EdwardsPoint
[src]

Performs the *= operation.

impl MulAssign<Scalar> for EdwardsPoint
[src]

Performs the *= operation.

impl<'b> Mul<&'b Scalar> for EdwardsPoint
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'a> Mul<Scalar> for &'a EdwardsPoint
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl Mul<Scalar> for EdwardsPoint
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'b> Mul<&'b EdwardsPoint> for Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'a> Mul<EdwardsPoint> for &'a Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl Mul<EdwardsPoint> for Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

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

The resulting type after applying the * operator.

Scalar multiplication: compute scalar * self.

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

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

The resulting type after applying the * operator.

Scalar multiplication: compute scalar * self.

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

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

The resulting type after applying the * operator.

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

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

The resulting type after applying the * operator.

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

impl<'b> MulAssign<&'b Scalar> for RistrettoPoint
[src]

Performs the *= operation.

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

The resulting type after applying the * operator.

Scalar multiplication: compute scalar * self.

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

The resulting type after applying the * operator.

Scalar multiplication: compute self * scalar.

impl MulAssign<Scalar> for RistrettoPoint
[src]

Performs the *= operation.

impl<'b> Mul<&'b Scalar> for RistrettoPoint
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'a> Mul<Scalar> for &'a RistrettoPoint
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl Mul<Scalar> for RistrettoPoint
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'b> Mul<&'b RistrettoPoint> for Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl<'a> Mul<RistrettoPoint> for &'a Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

impl Mul<RistrettoPoint> for Scalar
[src]

The resulting type after applying the * operator.

Performs the * operation.

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

The resulting type after applying the * operator.

Performs the * operation.

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

The resulting type after applying the * operator.

Performs the * operation.

Auto Trait Implementations

impl Send for Scalar

impl Sync for Scalar