mirror of
https://github.com/saymrwulf/curve25519-dalek-source.git
synced 2026-09-03 20:13:48 +00:00
chore: Release 2.0.0-rc.2 (#123)
This commit is contained in:
parent
84158337af
commit
cccf389467
5 changed files with 132 additions and 242 deletions
|
|
@ -4,7 +4,14 @@ Entries are listed in reverse chronological order.
|
|||
|
||||
# 2.x Series
|
||||
|
||||
## 2.0.0-rc.2
|
||||
|
||||
* Update MSRV to 1.60.
|
||||
* Update edition to 2021
|
||||
* Add `.as_bytes()` and `AsRef<[u8]>` for `Shared/StaticSecret`
|
||||
* Add `getrandom` feature to provide `random_from_rng` constructors
|
||||
* Make `StaticSecrets` optional via feature `static_secrets`
|
||||
* Update underlying `curve25519_dalek` library to `4.0.0-rc.2`
|
||||
|
||||
## 2.0.0-pre.1
|
||||
|
||||
|
|
|
|||
206
Cargo.lock
generated
206
Cargo.lock
generated
|
|
@ -2,6 +2,12 @@
|
|||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "anes"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
|
||||
|
||||
[[package]]
|
||||
name = "atty"
|
||||
version = "0.2.14"
|
||||
|
|
@ -53,27 +59,65 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "2.34.0"
|
||||
name = "ciborium"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
|
||||
checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f"
|
||||
dependencies = [
|
||||
"ciborium-io",
|
||||
"ciborium-ll",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ciborium-io"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369"
|
||||
|
||||
[[package]]
|
||||
name = "ciborium-ll"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b"
|
||||
dependencies = [
|
||||
"ciborium-io",
|
||||
"half",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "3.2.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"clap_lex",
|
||||
"indexmap",
|
||||
"textwrap",
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_lex"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
|
||||
dependencies = [
|
||||
"os_str_bytes",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "criterion"
|
||||
version = "0.3.6"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b01d6de93b2b6c65e17c634a26653a29d107b3c98c607c765bf38d041531cd8f"
|
||||
checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb"
|
||||
dependencies = [
|
||||
"anes",
|
||||
"atty",
|
||||
"cast",
|
||||
"ciborium",
|
||||
"clap",
|
||||
"criterion-plot",
|
||||
"csv",
|
||||
"itertools",
|
||||
"lazy_static",
|
||||
"num-traits",
|
||||
|
|
@ -82,7 +126,6 @@ dependencies = [
|
|||
"rayon",
|
||||
"regex",
|
||||
"serde",
|
||||
"serde_cbor",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
"tinytemplate",
|
||||
|
|
@ -91,9 +134,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "criterion-plot"
|
||||
version = "0.4.5"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2673cc8207403546f45f5fd319a974b1e6983ad1a3ee7e6041650013be041876"
|
||||
checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
|
||||
dependencies = [
|
||||
"cast",
|
||||
"itertools",
|
||||
|
|
@ -142,32 +185,11 @@ dependencies = [
|
|||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "csv"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad"
|
||||
dependencies = [
|
||||
"csv-core",
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "csv-core"
|
||||
version = "0.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "curve25519-dalek"
|
||||
version = "4.0.0-rc.1"
|
||||
version = "4.0.0-rc.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16"
|
||||
checksum = "03d928d978dbec61a1167414f5ec534f24bea0d7a0d24dd9b6233d3d8223e585"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"fiat-crypto",
|
||||
|
|
@ -207,6 +229,12 @@ version = "1.8.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.12.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.1.19"
|
||||
|
|
@ -225,6 +253,16 @@ dependencies = [
|
|||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "1.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"hashbrown",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
version = "0.10.5"
|
||||
|
|
@ -276,12 +314,6 @@ dependencies = [
|
|||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "memchr"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.8.0"
|
||||
|
|
@ -322,6 +354,12 @@ version = "11.1.3"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
|
||||
|
||||
[[package]]
|
||||
name = "os_str_bytes"
|
||||
version = "6.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
|
||||
|
||||
[[package]]
|
||||
name = "packed_simd_2"
|
||||
version = "0.3.8"
|
||||
|
|
@ -368,18 +406,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.51"
|
||||
version = "1.0.54"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6"
|
||||
checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.23"
|
||||
version = "1.0.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
|
||||
checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
|
@ -417,18 +455,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.7.1"
|
||||
version = "1.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
|
||||
checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d"
|
||||
dependencies = [
|
||||
"regex-syntax",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.6.28"
|
||||
version = "0.6.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
|
||||
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
|
|
@ -453,39 +491,29 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
|||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.155"
|
||||
version = "1.0.159"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8"
|
||||
checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_cbor"
|
||||
version = "0.11.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
|
||||
dependencies = [
|
||||
"half",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.155"
|
||||
version = "1.0.159"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630"
|
||||
checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 2.0.12",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.94"
|
||||
version = "1.0.95"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
|
||||
checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"ryu",
|
||||
|
|
@ -510,25 +538,21 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "synstructure"
|
||||
version = "0.12.6"
|
||||
name = "syn"
|
||||
version = "2.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
|
||||
checksum = "79d9531f94112cfc3e4c8f5f02cb2b58f72c97b7efd85f70203cc6d8efda5927"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"unicode-xid",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "textwrap"
|
||||
version = "0.11.0"
|
||||
version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
|
||||
dependencies = [
|
||||
"unicode-width",
|
||||
]
|
||||
checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
|
||||
|
||||
[[package]]
|
||||
name = "tinytemplate"
|
||||
|
|
@ -546,26 +570,13 @@ version = "1.0.8"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
|
||||
|
||||
[[package]]
|
||||
name = "walkdir"
|
||||
version = "2.3.2"
|
||||
version = "2.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
|
||||
checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
|
||||
dependencies = [
|
||||
"same-file",
|
||||
"winapi",
|
||||
"winapi-util",
|
||||
]
|
||||
|
||||
|
|
@ -596,7 +607,7 @@ dependencies = [
|
|||
"once_cell",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 1.0.109",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
||||
|
|
@ -618,7 +629,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
|
|||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"syn 1.0.109",
|
||||
"wasm-bindgen-backend",
|
||||
"wasm-bindgen-shared",
|
||||
]
|
||||
|
|
@ -672,7 +683,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
|
|||
|
||||
[[package]]
|
||||
name = "x25519-dalek"
|
||||
version = "2.0.0-pre.1"
|
||||
version = "2.0.0-rc.2"
|
||||
dependencies = [
|
||||
"bincode",
|
||||
"criterion",
|
||||
|
|
@ -684,21 +695,20 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "zeroize"
|
||||
version = "1.5.7"
|
||||
version = "1.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
|
||||
checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
|
||||
dependencies = [
|
||||
"zeroize_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zeroize_derive"
|
||||
version = "1.3.3"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c"
|
||||
checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
"synstructure",
|
||||
"syn 2.0.12",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ edition = "2021"
|
|||
# - update html_root_url
|
||||
# - update CHANGELOG
|
||||
# - if any changes were made to README.md, mirror them in src/lib.rs docs
|
||||
version = "2.0.0-pre.1"
|
||||
version = "2.0.0-rc.2"
|
||||
authors = [
|
||||
"Isis Lovecruft <isis@patternsinthevoid.net>",
|
||||
"DebugSteven <debugsteven@gmail.com>",
|
||||
|
|
@ -35,17 +35,17 @@ rustdoc-args = [
|
|||
"--html-in-header", "docs/assets/rustdoc-include-katex-header.html",
|
||||
"--cfg", "docsrs",
|
||||
]
|
||||
features = ["reusable_secrets", "serde"]
|
||||
features = ["getrandom", "reusable_secrets", "serde", "static_secrets"]
|
||||
|
||||
[dependencies]
|
||||
curve25519-dalek = { version = "4.0.0-rc.0", default-features = false }
|
||||
curve25519-dalek = { version = "4.0.0-rc.2", default-features = false }
|
||||
rand_core = { version = "0.6", default-features = false }
|
||||
serde = { version = "1", default-features = false, optional = true, features = ["derive"] }
|
||||
zeroize = { version = "1", default-features = false, optional = true, features = ["zeroize_derive"] }
|
||||
|
||||
[dev-dependencies]
|
||||
bincode = "1"
|
||||
criterion = "0.3.0"
|
||||
criterion = "0.4.0"
|
||||
rand_core = { version = "0.6", default-features = false, features = ["getrandom"] }
|
||||
|
||||
[[bench]]
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ the rest of the afternoon nomming some yummy pie!
|
|||
First, Alice uses `EphemeralSecret::random()` and then
|
||||
`PublicKey::from()` to produce her secret and public keys:
|
||||
|
||||
```rust
|
||||
```ignore
|
||||
use x25519_dalek::{EphemeralSecret, PublicKey};
|
||||
|
||||
let alice_secret = EphemeralSecret::random();
|
||||
|
|
@ -40,7 +40,7 @@ let alice_public = PublicKey::from(&alice_secret);
|
|||
|
||||
Bob does the same:
|
||||
|
||||
```rust
|
||||
```ignore
|
||||
# use x25519_dalek::{EphemeralSecret, PublicKey};
|
||||
let bob_secret = EphemeralSecret::random();
|
||||
let bob_public = PublicKey::from(&bob_secret);
|
||||
|
|
@ -100,7 +100,7 @@ To install, add the following to your project's `Cargo.toml`:
|
|||
|
||||
```toml
|
||||
[dependencies]
|
||||
x25519-dalek = "2.0.0-pre.0"
|
||||
x25519-dalek = "2.0.0-rc.2"
|
||||
```
|
||||
|
||||
# MSRV
|
||||
|
|
|
|||
147
src/lib.rs
147
src/lib.rs
|
|
@ -16,144 +16,17 @@
|
|||
|
||||
#![no_std]
|
||||
#![cfg_attr(feature = "bench", feature(test))]
|
||||
#![cfg_attr(feature = "nightly", deny(missing_docs))]
|
||||
#![doc(html_logo_url = "https://doc.dalek.rs/assets/dalek-logo-clear.png")]
|
||||
#![doc(html_root_url = "https://docs.rs/x25519-dalek/2.0.0-pre.1")]
|
||||
#![cfg_attr(docsrs, feature(doc_auto_cfg, doc_cfg, doc_cfg_hide))]
|
||||
#![cfg_attr(docsrs, doc(cfg_hide(docsrs)))]
|
||||
#![deny(missing_docs)]
|
||||
#![doc(
|
||||
html_logo_url = "https://cdn.jsdelivr.net/gh/dalek-cryptography/curve25519-dalek/docs/assets/dalek-logo-clear.png"
|
||||
)]
|
||||
#![doc = include_str!("../README.md")]
|
||||
|
||||
//! # x25519-dalek [](https://crates.io/crates/x25519-dalek) [](https://docs.rs/x25519-dalek) [](https://travis-ci.org/dalek-cryptography/x25519-dalek)
|
||||
//!
|
||||
//! A pure-Rust implementation of x25519 elliptic curve Diffie-Hellman key exchange,
|
||||
//! with curve operations provided by
|
||||
//! [curve25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek).
|
||||
//!
|
||||
//! This crate provides two levels of API: a bare byte-oriented `x25519`
|
||||
//! function which matches the function specified in [RFC7748][rfc7748], as
|
||||
//! well as a higher-level Rust API for static and ephemeral Diffie-Hellman.
|
||||
//!
|
||||
//! ## Examples
|
||||
//!
|
||||
//! <a href="https://shop.bubblesort.io">
|
||||
//! <img
|
||||
//! style="float: right; width: auto; height: 300px;"
|
||||
//! src="https://raw.githubusercontent.com/dalek-cryptography/x25519-dalek/master/res/bubblesort-zines-secret-messages-cover.jpeg"/>
|
||||
//! </a>
|
||||
//!
|
||||
//! Alice and Bob are two adorable kittens who have lost their mittens, and they
|
||||
//! wish to be able to send secret messages to each other to coordinate finding
|
||||
//! them, otherwise—if their caretaker cat finds out—they will surely be called
|
||||
//! naughty kittens and be given no pie!
|
||||
//!
|
||||
//! But the two kittens are quite clever. Even though their paws are still too big
|
||||
//! and the rest of them is 90% fuzziness, these clever kittens have been studying
|
||||
//! up on modern public key cryptography and have learned a nifty trick called
|
||||
//! *elliptic curve Diffie-Hellman key exchange*. With the right incantations, the
|
||||
//! kittens will be able to secretly organise to find their mittens, and then spend
|
||||
//! the rest of the afternoon nomming some yummy pie!
|
||||
//!
|
||||
//! First, Alice uses `EphemeralSecret::random_from_rng` and then
|
||||
//! `PublicKey::from()` to produce her secret and public keys:
|
||||
//!
|
||||
//! ```rust
|
||||
//! use rand_core::OsRng;
|
||||
//! use x25519_dalek::{EphemeralSecret, PublicKey};
|
||||
//!
|
||||
//! let alice_secret = EphemeralSecret::random_from_rng(OsRng);
|
||||
//! let alice_public = PublicKey::from(&alice_secret);
|
||||
//! ```
|
||||
//!
|
||||
//! Bob does the same:
|
||||
//!
|
||||
//! ```rust
|
||||
//! # use rand_core::OsRng;
|
||||
//! # use x25519_dalek::{EphemeralSecret, PublicKey};
|
||||
//! let bob_secret = EphemeralSecret::random_from_rng(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
|
||||
//! # use rand_core::OsRng;
|
||||
//! # use x25519_dalek::{EphemeralSecret, PublicKey};
|
||||
//! # let alice_secret = EphemeralSecret::random_from_rng(OsRng);
|
||||
//! # let alice_public = PublicKey::from(&alice_secret);
|
||||
//! # let bob_secret = EphemeralSecret::random_from_rng(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
|
||||
//! # use rand_core::OsRng;
|
||||
//! # use x25519_dalek::{EphemeralSecret, PublicKey};
|
||||
//! # let alice_secret = EphemeralSecret::random_from_rng(OsRng);
|
||||
//! # let alice_public = PublicKey::from(&alice_secret);
|
||||
//! # let bob_secret = EphemeralSecret::random_from_rng(OsRng);
|
||||
//! # let bob_public = PublicKey::from(&bob_secret);
|
||||
//! let bob_shared_secret = bob_secret.diffie_hellman(&alice_public);
|
||||
//! ```
|
||||
//!
|
||||
//! These secrets are the same:
|
||||
//!
|
||||
//! ```rust
|
||||
//! # use rand_core::OsRng;
|
||||
//! # use x25519_dalek::{EphemeralSecret, PublicKey};
|
||||
//! # let alice_secret = EphemeralSecret::random_from_rng(OsRng);
|
||||
//! # let alice_public = PublicKey::from(&alice_secret);
|
||||
//! # let bob_secret = EphemeralSecret::random_from_rng(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());
|
||||
//! ```
|
||||
//!
|
||||
//! Voilà! Alice and Bob can now use their shared secret to encrypt their
|
||||
//! meows, for example, by using it to generate a key and nonce for an
|
||||
//! authenticated-encryption cipher.
|
||||
//!
|
||||
//! This example used the ephemeral DH API, which ensures that secret keys
|
||||
//! cannot be reused; Alice and Bob could instead use the static DH API
|
||||
//! and load a long-term secret key.
|
||||
//!
|
||||
//! # Installation
|
||||
//!
|
||||
//! To install, add the following to your project's `Cargo.toml`:
|
||||
//!
|
||||
//! ```toml
|
||||
//! [dependencies]
|
||||
//! x25519-dalek = "2.0.0-pre.0"
|
||||
//! ```
|
||||
//!
|
||||
//! # MSRV
|
||||
//!
|
||||
//! Current MSRV is 1.60.
|
||||
//!
|
||||
//! # Documentation
|
||||
//!
|
||||
//! Documentation is available [here](https://docs.rs/x25519-dalek).
|
||||
//!
|
||||
//! # Note
|
||||
//!
|
||||
//! This code matches the [RFC7748][rfc7748] test vectors.
|
||||
//! The elliptic curve
|
||||
//! operations are provided by `curve25519-dalek`, which makes a best-effort
|
||||
//! attempt to prevent software side-channels.
|
||||
//!
|
||||
//! "Secret Messages" cover image and [zine](https://shop.bubblesort.io/products/secret-messages-zine)
|
||||
//! copyright © Amy Wibowo ([@sailorhg](https://twitter.com/sailorhg))
|
||||
//!
|
||||
//! [rfc7748]: https://tools.ietf.org/html/rfc7748
|
||||
//!
|
||||
//! # See also
|
||||
//!
|
||||
//! - [crypto_box]: pure Rust public-key authenticated encryption compatible with
|
||||
//! the NaCl family of encryption libraries (libsodium, TweetNaCl) which uses
|
||||
//! `x25519-dalek` for key agreement
|
||||
//!
|
||||
//! [crypto_box]: https://github.com/RustCrypto/AEADs/tree/master/crypto_box
|
||||
//------------------------------------------------------------------------
|
||||
// x25519-dalek public API
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
mod x25519;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue