mirror of
https://github.com/saymrwulf/curve25519-dalek-source.git
synced 2026-09-04 20:24:10 +00:00
Merge pull request #60 from dalek-cryptography/remove-rand-os-example
Remove rand os example
This commit is contained in:
commit
736f8dd313
2 changed files with 35 additions and 41 deletions
51
README.md
51
README.md
|
|
@ -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());
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
@ -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);
|
||||
|
|
@ -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];
|
||||
|
|
|
|||
Loading…
Reference in a new issue