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]

[src]

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

[src]

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

[src]

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.

[src]

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]

[src]

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

Inputs

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

Returns

A random scalar within ℤ/lℤ.

[src]

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());

[src]

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.

[src]

Convert this Scalar to its underlying sequence of bytes.

[src]

View this Scalar as a sequence of bytes.

[src]

Construct the scalar \( 0 \).

[src]

Construct the scalar \( 1 \).

[src]

Construct a scalar from the given u64.

[src]

Compute the multiplicative inverse of this scalar.

[src]

Reduce this Scalar modulo \(\ell\).

[src]

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]

[src]

Returns a copy of the value. Read more

1.0.0
[src]

Performs copy-assignment from source. Read more

impl Debug for Scalar
[src]

[src]

Formats the value using the given formatter.

impl Eq for Scalar
[src]

impl PartialEq for Scalar
[src]

[src]

Test equality between two Scalars.

Warning

This function is not guaranteed to be constant time and should only be used for debugging purposes.

Returns

True if they are equal, and false otherwise.

1.0.0
[src]

This method tests for !=.

impl Equal for Scalar
[src]

[src]

Test equality between two Scalars in constant time.

Returns

1u8 if they are equal, and 0u8 otherwise.

impl Index<usize> for Scalar
[src]

The returned type after indexing.

[src]

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

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

[src]

Performs the *= operation.

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

The resulting type after applying the * operator.

[src]

Performs the * operation.

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

[src]

Performs the += operation.

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

The resulting type after applying the + operator.

[src]

Performs the + operation.

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

[src]

Performs the -= operation.

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

The resulting type after applying the - operator.

[src]

Performs the - operation.

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

The resulting type after applying the - operator.

[src]

Performs the unary - operation.

impl ConditionallyAssignable for Scalar
[src]

[src]

Conditionally assign another Scalar to this one.

let a = Scalar::from_bits([0u8;32]);
let b = Scalar::from_bits([1u8;32]);
let mut t = a;
t.conditional_assign(&b, 0u8);
assert!(t[0] == a[0]);
t.conditional_assign(&b, 1u8);
assert!(t[0] == b[0]);

Preconditions

  • choice in {0,1}

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

The resulting type after applying the * operator.

[src]

Performs the * operation.

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

The resulting type after applying the * operator.

[src]

Scalar multiplication: compute scalar * self.

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

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

The resulting type after applying the * operator.

[src]

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

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

The resulting type after applying the * operator.

[src]

Scalar multiplication: compute self * scalar.

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

The resulting type after applying the * operator.

[src]

Performs the * operation.