aboutsummaryrefslogtreecommitdiff
path: root/srp/src
diff options
context:
space:
mode:
Diffstat (limited to 'srp/src')
-rw-r--r--srp/src/lib.rs38
1 files changed, 19 insertions, 19 deletions
diff --git a/srp/src/lib.rs b/srp/src/lib.rs
index df11ae9..9dfffee 100644
--- a/srp/src/lib.rs
+++ b/srp/src/lib.rs
@@ -1,17 +1,17 @@
//! [Secure Remote Password][1] (SRP) protocol implementation.
-//!
+//!
//! This implementation is generic over hash functions using
//! [`Digest`](https://docs.rs/digest) trait, so you will need to choose a hash
//! function, e.g. `Sha256` from [`sha2`](https://crates.io/crates/sha2) crate.
//! Additionally this crate allows to use a specialized password hashing
//! algorithm for private key computation instead of method described in the
//! SRP literature.
-//!
+//!
//! Compatability with over implementations was not yet tested.
-//!
+//!
//! # Usage
//! Add `srp` dependecy to your `Cargo.toml`:
-//!
+//!
//! ```toml
//! [dependencies]
//! rand = "0.3"
@@ -28,31 +28,31 @@
//!
//! # Algorithm description
//! Here we briefly describe implemented algroithm. For additionall information
-//! refer to SRP literature. All arithmetic is done modulo `N`, where `N` is a
+//! refer to SRP literature. All arithmetic is done modulo `N`, where `N` is a
//! large safe prime (`N = 2q+1`, where `q` is prime). Additionally `g` MUST be
//! a generator modulo `N`. It's STRONGLY recommended to use SRP parameters
//! provided by this crate in the [`groups`](groups/index.html) module.
-//!
-//! Client | | Server
-//! ------------------------|---------------|------------------------
-//! | — `I` —> | (lookup `s`, `v`)
-//! `x = PH(P, s)` | <— `s`, `v` — |
-//! `a_pub = g^a` | — `a_pub` —> | `b_pub = k*v + g^b`
-//! `u = H(a_pub || b_pub)` | <— `b_pub` — | `u = H(a_pub || b_pub)`
-//! `s = (b_pub - k*g^x)^(a+u*x)` | | `S = (b_pub - k*g^x)^(a+u*x)`
-//! `K = H(s)` | | `K = H(s)`
-//! `M1 = H(A || B || K)` | — `M1` —> | (verify `M1`)
-//! (verify `M2`) | <— `M2` — | `M2 = H(A || M1 || K)`
-//!
-//! `||` denotes concatenation, variables and notations have the following
+//!
+//! Client | | Server
+//! ------------------------|-------------------|------------------------
+//! `a_pub = g^a` | — `a_pub`, `I` —> | (lookup `s`, `v` for given `I`)
+//! `x = PH(P, s)` | <— `b_pub`, `s` — | `b_pub = k*v + g^b`
+//! `u = H(a_pub || b_pub)` | | `u = H(a_pub || b_pub)`
+//! `s = (b_pub - k*g^x)^(a+u*x)` | | `S = (b_pub - k*g^x)^(a+u*x)`
+//! `K = H(s)` | | `K = H(s)`
+//! `M1 = H(A || B || K)` | — `M1` —> | (verify `M1`)
+//! (verify `M2`) | <— `M2` — | `M2 = H(A || M1 || K)`
+//!
+//! Variables and notations have the following
//! meaning:
-//!
+//!
//! - `I` — user identity (username)
//! - `P` — user password
//! - `H` — one-way hash function
//! - `PH` — password hashing algroithm, in the RFC 5054 described as
//! `H(s || H(I || ":" || P))`
//! - `^` — (modular) exponentiation
+//! - `||` — concatenation
//! - `x` — user private key
//! - `s` — salt generated by user and stored on the server
//! - `v` — password verifier equal to `g^x` and stored on the server