Skip to content

Commit

Permalink
Merge pull request #60 from dalek-cryptography/remove-rand-os-example
Browse files Browse the repository at this point in the history
Remove rand os example
  • Loading branch information
hdevalence committed Aug 18, 2020
2 parents 5d245dc + 8287798 commit 736f8dd
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 41 deletions.
51 changes: 33 additions & 18 deletions README.md
Expand Up @@ -31,45 +31,60 @@ the rest of the afternoon nomming some yummy pie!
First, Alice uses `EphemeralSecret::new()` and then
`PublicKey::from()` to produce her secret and public keys:

```rust,ignore
extern crate rand_os;
extern crate x25519_dalek;
```rust
use rand_core::OsRng;
use x25519_dalek::{EphemeralSecret, PublicKey};

use rand_os::OsRng;
use x25519_dalek::EphemeralSecret;
use x25519_dalek::PublicKey;
let mut alice_csprng = OsRng::new().unwrap();
let alice_secret = EphemeralSecret::new(&mut alice_csprng);
let alice_public = PublicKey::from(&alice_secret);
let alice_secret = EphemeralSecret::new(OsRng);
let alice_public = PublicKey::from(&alice_secret);
```

Bob does the same:

```rust,ignore
let mut bob_csprng = OsRng::new().unwrap();
let bob_secret = EphemeralSecret::new(&mut bob_csprng);
let bob_public = PublicKey::from(&bob_secret);
```rust
# use rand_core::OsRng;
# use x25519_dalek::{EphemeralSecret, PublicKey};
let bob_secret = EphemeralSecret::new(OsRng);
let bob_public = PublicKey::from(&bob_secret);
```

Alice meows across the room, telling `alice_public` to Bob, and Bob
loudly meows `bob_public` back to Alice. Alice now computes her
shared secret with Bob by doing:

```rust,ignore
```rust
# use rand_core::OsRng;
# use x25519_dalek::{EphemeralSecret, PublicKey};
# let alice_secret = EphemeralSecret::new(OsRng);
# let alice_public = PublicKey::from(&alice_secret);
# let bob_secret = EphemeralSecret::new(OsRng);
# let bob_public = PublicKey::from(&bob_secret);
let alice_shared_secret = alice_secret.diffie_hellman(&bob_public);
```

Similarly, Bob computes a shared secret by doing:

```rust,ignore
```rust
# use rand_core::OsRng;
# use x25519_dalek::{EphemeralSecret, PublicKey};
# let alice_secret = EphemeralSecret::new(OsRng);
# let alice_public = PublicKey::from(&alice_secret);
# let bob_secret = EphemeralSecret::new(OsRng);
# let bob_public = PublicKey::from(&bob_secret);
let bob_shared_secret = bob_secret.diffie_hellman(&alice_public);
```

These secrets are the same:

```rust,ignore
```rust
# use rand_core::OsRng;
# use x25519_dalek::{EphemeralSecret, PublicKey};
# let alice_secret = EphemeralSecret::new(OsRng);
# let alice_public = PublicKey::from(&alice_secret);
# let bob_secret = EphemeralSecret::new(OsRng);
# let bob_public = PublicKey::from(&bob_secret);
# let alice_shared_secret = alice_secret.diffie_hellman(&bob_public);
# let bob_shared_secret = bob_secret.diffie_hellman(&alice_public);
assert_eq!(alice_shared_secret.as_bytes(), bob_shared_secret.as_bytes());
```

Expand Down
25 changes: 2 additions & 23 deletions src/x25519.rs
Expand Up @@ -68,10 +68,7 @@ impl EphemeralSecret {
}

/// Generate an x25519 `EphemeralSecret` key.
pub fn new<T>(csprng: &mut T) -> Self
where
T: RngCore + CryptoRng,
{
pub fn new<T: RngCore + CryptoRng>(mut csprng: T) -> Self {
let mut bytes = [0u8; 32];

csprng.fill_bytes(&mut bytes);
Expand Down Expand Up @@ -110,10 +107,7 @@ impl StaticSecret {
}

/// Generate a x25519 `StaticSecret` key.
pub fn new<T>(csprng: &mut T) -> Self
where
T: RngCore + CryptoRng,
{
pub fn new<T: RngCore + CryptoRng>(mut csprng: T) -> Self {
let mut bytes = [0u8; 32];

csprng.fill_bytes(&mut bytes);
Expand Down Expand Up @@ -217,21 +211,6 @@ mod test {

use rand_core::OsRng;

// This was previously a doctest but it got moved to the README to
// avoid duplication where it then wasn't being run, so now it
// lives here.
#[test]
fn alice_and_bob() {
let alice_secret = EphemeralSecret::new(&mut OsRng);
let alice_public = PublicKey::from(&alice_secret);
let bob_secret = EphemeralSecret::new(&mut OsRng);
let bob_public = PublicKey::from(&bob_secret);
let alice_shared_secret = alice_secret.diffie_hellman(&bob_public);
let bob_shared_secret = bob_secret.diffie_hellman(&alice_public);

assert_eq!(alice_shared_secret.as_bytes(), bob_shared_secret.as_bytes());
}

#[test]
fn byte_basepoint_matches_edwards_scalar_mul() {
let mut scalar_bytes = [0x37; 32];
Expand Down

0 comments on commit 736f8dd

Please sign in to comment.