1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//! Scalar multiplication
//!
//! # Representation of group elements
//! The correspondence between strings and group elements depends on the primitive
//! implemented by `scalarmult()`. The correspondence is not necessarily
//! injective in either direction, but it is compatible with scalar multiplication
//! in the group. The correspondence does not necessarily include all group
//! elements, but it does include all strings; i.e., every string represents at
//! least one group element.
//!
//! # Representation of integers
//! The correspondence between strings and integers also depends on the primitive
//! implemented by `scalarmult()`. Every string represents at least one integer.
//!
//! # Security model
//! `scalarmult` is designed to be strong as a component of various well-known
//! "hashed Diffie–Hellman" applications. In particular, it is designed to make the
//! "computational Diffie–Hellman" problem (CDH) difficult with respect to the
//! standard base.
//!
//! `scalarmult` is also designed to make CDH difficult with respect to other
//! nontrivial bases. In particular, if a represented group element has small
//! order, then it is annihilated by all represented scalars. This feature allows
//! protocols to avoid validating membership in the subgroup generated by the
//! standard base.
//!
//! `NaCl` does not make any promises regarding the "decisional Diffie–Hellman"
//! problem (DDH), the "static Diffie–Hellman" problem (SDH), etc. Users are
//! responsible for hashing group elements.
//!
//! # Selected primitive
//! `scalarmult` is the function `crypto_scalarmult_curve25519` specified in
//! [Cryptography in `NaCl`](http://nacl.cr.yp.to/valid.html), Sections 2, 3, and 4.
//! This function is conjectured to be strong. For background see Bernstein,
//! "Curve25519: new Diffie-Hellman speed records," Lecture Notes in Computer
//! Science 3958 (2006), 207–228, <http://cr.yp.to/papers.html#curve25519>.
pub use self::curve25519::*;
pub mod curve25519;