mirror of
https://github.com/saymrwulf/curve25519-dalek-source.git
synced 2026-09-04 20:24:10 +00:00
Make key generation work with no_std.
This commit is contained in:
parent
85a3776d27
commit
47c1d869ec
3 changed files with 84 additions and 70 deletions
|
|
@ -24,8 +24,8 @@ version = "0.6"
|
|||
default-features = false
|
||||
|
||||
[dependencies.rand]
|
||||
optional = true
|
||||
version = "0.5.0-pre.2"
|
||||
default-features = false
|
||||
|
||||
[dependencies.digest]
|
||||
version = "^0.7"
|
||||
|
|
@ -53,9 +53,10 @@ bincode = "^0.9"
|
|||
|
||||
[features]
|
||||
default = ["std", "u64_backend"]
|
||||
std = ["rand", "subtle/std", "curve25519-dalek/std", "failure/std"]
|
||||
# We don't add "rand/std" here because it would enable a bunch of Fuchsia dependencies.
|
||||
std = ["subtle/std", "curve25519-dalek/std", "failure/std"]
|
||||
bench = []
|
||||
nightly = ["curve25519-dalek/nightly", "subtle/nightly"]
|
||||
nightly = ["curve25519-dalek/nightly", "subtle/nightly", "rand/nightly"]
|
||||
asm = ["sha2/asm"]
|
||||
yolocrypto = ["curve25519-dalek/yolocrypto"]
|
||||
u64_backend = ["curve25519-dalek/u64_backend"]
|
||||
|
|
|
|||
|
|
@ -12,9 +12,7 @@
|
|||
|
||||
use core::fmt::{Debug};
|
||||
|
||||
#[cfg(feature = "std")]
|
||||
use rand::CryptoRng;
|
||||
#[cfg(feature = "std")]
|
||||
use rand::Rng;
|
||||
|
||||
#[cfg(feature = "serde")]
|
||||
|
|
@ -262,8 +260,9 @@ impl SecretKey {
|
|||
/// extern crate sha2;
|
||||
/// extern crate ed25519_dalek;
|
||||
///
|
||||
/// # #[cfg(feature = "std")]
|
||||
/// # fn main() {
|
||||
///
|
||||
/// #
|
||||
/// use rand::Rng;
|
||||
/// use rand::OsRng;
|
||||
/// use sha2::Sha512;
|
||||
|
|
@ -273,8 +272,10 @@ impl SecretKey {
|
|||
///
|
||||
/// let mut csprng: OsRng = OsRng::new().unwrap();
|
||||
/// let secret_key: SecretKey = SecretKey::generate(&mut csprng);
|
||||
///
|
||||
/// # }
|
||||
/// #
|
||||
/// # #[cfg(not(feature = "std"))]
|
||||
/// # fn main() { }
|
||||
/// ```
|
||||
///
|
||||
/// Afterwards, you can generate the corresponding public—provided you also
|
||||
|
|
@ -289,13 +290,14 @@ impl SecretKey {
|
|||
/// # fn main() {
|
||||
/// #
|
||||
/// # use rand::Rng;
|
||||
/// # use rand::OsRng;
|
||||
/// # use rand::ChaChaRng;
|
||||
/// # use rand::SeedableRng;
|
||||
/// # use sha2::Sha512;
|
||||
/// # use ed25519_dalek::PublicKey;
|
||||
/// # use ed25519_dalek::SecretKey;
|
||||
/// # use ed25519_dalek::Signature;
|
||||
/// #
|
||||
/// # let mut csprng: OsRng = OsRng::new().unwrap();
|
||||
/// # let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]);
|
||||
/// # let secret_key: SecretKey = SecretKey::generate(&mut csprng);
|
||||
///
|
||||
/// let public_key: PublicKey = PublicKey::from_secret::<Sha512>(&secret_key);
|
||||
|
|
@ -308,10 +310,7 @@ impl SecretKey {
|
|||
///
|
||||
/// # Input
|
||||
///
|
||||
/// A CSPRNG with a `fill_bytes()` method, e.g. the one returned
|
||||
/// from `rand::OsRng::new()` (in the `rand` crate).
|
||||
///
|
||||
#[cfg(feature = "std")]
|
||||
/// A CSPRNG with a `fill_bytes()` method, e.g. `rand::ChaChaRng`
|
||||
pub fn generate<T>(csprng: &mut T) -> SecretKey
|
||||
where T: CryptoRng + Rng,
|
||||
{
|
||||
|
|
@ -402,6 +401,7 @@ impl<'a> From<&'a SecretKey> for ExpandedSecretKey {
|
|||
/// # extern crate sha2;
|
||||
/// # extern crate ed25519_dalek;
|
||||
/// #
|
||||
/// # #[cfg(all(feature = "std", feature = "sha2"))]
|
||||
/// # fn main() {
|
||||
/// #
|
||||
/// use rand::{Rng, OsRng};
|
||||
|
|
@ -412,6 +412,9 @@ impl<'a> From<&'a SecretKey> for ExpandedSecretKey {
|
|||
/// let secret_key: SecretKey = SecretKey::generate(&mut csprng);
|
||||
/// let expanded_secret_key: ExpandedSecretKey = ExpandedSecretKey::from(&secret_key);
|
||||
/// # }
|
||||
/// #
|
||||
/// # #[cfg(any(not(feature = "std"), not(feature = "sha2")))]
|
||||
/// # fn main() {}
|
||||
/// ```
|
||||
fn from(secret_key: &'a SecretKey) -> ExpandedSecretKey {
|
||||
ExpandedSecretKey::from_secret_key::<Sha512>(&secret_key)
|
||||
|
|
@ -434,7 +437,7 @@ impl ExpandedSecretKey {
|
|||
/// # extern crate sha2;
|
||||
/// # extern crate ed25519_dalek;
|
||||
/// #
|
||||
/// # #[cfg(feature = "sha2")]
|
||||
/// # #[cfg(all(feature = "sha2", feature = "std"))]
|
||||
/// # fn main() {
|
||||
/// #
|
||||
/// use rand::{Rng, OsRng};
|
||||
|
|
@ -449,7 +452,7 @@ impl ExpandedSecretKey {
|
|||
/// assert!(&expanded_secret_key_bytes[..] != &[0u8; 64][..]);
|
||||
/// # }
|
||||
/// #
|
||||
/// # #[cfg(not(feature = "sha2"))]
|
||||
/// # #[cfg(any(not(feature = "sha2"), not(feature = "std")))]
|
||||
/// # fn main() { }
|
||||
/// ```
|
||||
#[inline]
|
||||
|
|
@ -475,13 +478,13 @@ impl ExpandedSecretKey {
|
|||
/// # extern crate sha2;
|
||||
/// # extern crate ed25519_dalek;
|
||||
/// #
|
||||
/// # #[cfg(all(feature = "sha2", feature = "std"))]
|
||||
/// # fn do_test() -> Result<ExpandedSecretKey, DecodingError> {
|
||||
/// #
|
||||
/// use rand::{Rng, OsRng};
|
||||
/// use ed25519_dalek::{SecretKey, ExpandedSecretKey};
|
||||
/// use ed25519_dalek::DecodingError;
|
||||
///
|
||||
/// # #[cfg(feature = "sha2")]
|
||||
/// # fn do_test() -> Result<ExpandedSecretKey, DecodingError> {
|
||||
/// #
|
||||
/// let mut csprng: OsRng = OsRng::new().unwrap();
|
||||
/// let secret_key: SecretKey = SecretKey::generate(&mut csprng);
|
||||
/// let expanded_secret_key: ExpandedSecretKey = ExpandedSecretKey::from(&secret_key);
|
||||
|
|
@ -491,14 +494,14 @@ impl ExpandedSecretKey {
|
|||
/// # Ok(expanded_secret_key_again)
|
||||
/// # }
|
||||
/// #
|
||||
/// # #[cfg(feature = "sha2")]
|
||||
/// # #[cfg(all(feature = "sha2", feature = "std"))]
|
||||
/// # fn main() {
|
||||
/// # let result = do_test();
|
||||
/// # assert!(result.is_ok());
|
||||
/// # }
|
||||
/// #
|
||||
/// # #[cfg(not(feature = "sha2"))]
|
||||
/// # fn main() {}
|
||||
/// # #[cfg(any(not(feature = "sha2"), not(feature = "std")))]
|
||||
/// # fn main() { }
|
||||
/// ```
|
||||
#[inline]
|
||||
pub fn from_bytes(bytes: &[u8]) -> Result<ExpandedSecretKey, DecodingError> {
|
||||
|
|
@ -525,7 +528,8 @@ impl ExpandedSecretKey {
|
|||
/// # extern crate sha2;
|
||||
/// # extern crate ed25519_dalek;
|
||||
/// #
|
||||
/// # fn do_test() {
|
||||
/// # #[cfg(all(feature = "std", feature = "sha2"))]
|
||||
/// # fn main() {
|
||||
/// #
|
||||
/// use rand::{Rng, OsRng};
|
||||
/// use sha2::Sha512;
|
||||
|
|
@ -536,7 +540,8 @@ impl ExpandedSecretKey {
|
|||
/// let expanded_secret_key: ExpandedSecretKey = ExpandedSecretKey::from_secret_key::<Sha512>(&secret_key);
|
||||
/// # }
|
||||
/// #
|
||||
/// # fn main() { do_test(); }
|
||||
/// # #[cfg(any(not(feature = "sha2"), not(feature = "std")))]
|
||||
/// # fn main() { }
|
||||
/// ```
|
||||
pub fn from_secret_key<D>(secret_key: &SecretKey) -> ExpandedSecretKey
|
||||
where D: Digest<OutputSize = U64> + Default {
|
||||
|
|
@ -850,6 +855,7 @@ impl Keypair {
|
|||
/// extern crate sha2;
|
||||
/// extern crate ed25519_dalek;
|
||||
///
|
||||
/// # #[cfg(all(feature = "std", feature = "sha2"))]
|
||||
/// # fn main() {
|
||||
///
|
||||
/// use rand::Rng;
|
||||
|
|
@ -858,23 +864,24 @@ impl Keypair {
|
|||
/// use ed25519_dalek::Keypair;
|
||||
/// use ed25519_dalek::Signature;
|
||||
///
|
||||
/// let mut cspring: OsRng = OsRng::new().unwrap();
|
||||
/// let keypair: Keypair = Keypair::generate::<Sha512, OsRng>(&mut cspring);
|
||||
/// let mut csprng: OsRng = OsRng::new().unwrap();
|
||||
/// let keypair: Keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
///
|
||||
/// # }
|
||||
/// #
|
||||
/// # #[cfg(any(not(feature = "sha2"), not(feature = "std")))]
|
||||
/// # fn main() { }
|
||||
/// ```
|
||||
///
|
||||
/// # Input
|
||||
///
|
||||
/// A CSPRNG with a `fill_bytes()` method, e.g. the one returned
|
||||
/// from `rand::OsRng::new()` (in the `rand` crate).
|
||||
/// A CSPRNG with a `fill_bytes()` method, e.g. `rand::ChaChaRng`.
|
||||
///
|
||||
/// The caller must also supply a hash function which implements the
|
||||
/// `Digest` and `Default` traits, and which returns 512 bits of output.
|
||||
/// The standard hash function used for most ed25519 libraries is SHA-512,
|
||||
/// which is available with `use sha2::Sha512` as in the example above.
|
||||
/// Other suitable hash functions include Keccak-512 and Blake2b-512.
|
||||
#[cfg(feature = "std")]
|
||||
pub fn generate<D, R>(csprng: &mut R) -> Keypair
|
||||
where D: Digest<OutputSize = U64> + Default,
|
||||
R: CryptoRng + Rng,
|
||||
|
|
@ -943,7 +950,8 @@ mod test {
|
|||
use std::string::String;
|
||||
use std::vec::Vec;
|
||||
use curve25519_dalek::edwards::EdwardsPoint;
|
||||
use rand::OsRng;
|
||||
use rand::ChaChaRng;
|
||||
use rand::SeedableRng;
|
||||
use hex::FromHex;
|
||||
use sha2::Sha512;
|
||||
use super::*;
|
||||
|
|
@ -976,17 +984,17 @@ mod test {
|
|||
|
||||
#[test]
|
||||
fn unmarshal_marshal() { // TestUnmarshalMarshal
|
||||
let mut cspring: OsRng;
|
||||
let mut csprng: ChaChaRng;
|
||||
let mut keypair: Keypair;
|
||||
let mut x: Option<EdwardsPoint>;
|
||||
let a: EdwardsPoint;
|
||||
let public: PublicKey;
|
||||
|
||||
cspring = OsRng::new().unwrap();
|
||||
csprng = ChaChaRng::from_seed([0u8; 32]);
|
||||
|
||||
// from_bytes() fails if vx²-u=0 and vx²+u=0
|
||||
loop {
|
||||
keypair = Keypair::generate::<Sha512, OsRng>(&mut cspring);
|
||||
keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
x = keypair.public.decompress();
|
||||
|
||||
if x.is_some() {
|
||||
|
|
@ -1001,7 +1009,7 @@ mod test {
|
|||
|
||||
#[test]
|
||||
fn sign_verify() { // TestSignVerify
|
||||
let mut cspring: OsRng;
|
||||
let mut csprng: ChaChaRng;
|
||||
let keypair: Keypair;
|
||||
let good_sig: Signature;
|
||||
let bad_sig: Signature;
|
||||
|
|
@ -1009,8 +1017,8 @@ mod test {
|
|||
let good: &[u8] = "test message".as_bytes();
|
||||
let bad: &[u8] = "wrong message".as_bytes();
|
||||
|
||||
cspring = OsRng::new().unwrap();
|
||||
keypair = Keypair::generate::<Sha512, OsRng>(&mut cspring);
|
||||
csprng = ChaChaRng::from_seed([0u8; 32]);
|
||||
keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
good_sig = keypair.sign::<Sha512>(&good);
|
||||
bad_sig = keypair.sign::<Sha512>(&bad);
|
||||
|
||||
|
|
@ -1125,7 +1133,7 @@ mod test {
|
|||
#[cfg(all(test, feature = "bench"))]
|
||||
mod bench {
|
||||
use test::Bencher;
|
||||
use rand::OsRng;
|
||||
use rand::ChaChaRng;
|
||||
use sha2::Sha512;
|
||||
use super::*;
|
||||
|
||||
|
|
@ -1150,8 +1158,8 @@ mod bench {
|
|||
|
||||
#[bench]
|
||||
fn sign(b: &mut Bencher) {
|
||||
let mut csprng: OsRng = OsRng::new().unwrap();
|
||||
let keypair: Keypair = Keypair::generate::<Sha512>(&mut csprng);
|
||||
let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]).unwrap();
|
||||
let keypair: Keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
let msg: &[u8] = b"";
|
||||
|
||||
b.iter(| | keypair.sign::<Sha512>(msg));
|
||||
|
|
@ -1159,8 +1167,8 @@ mod bench {
|
|||
|
||||
#[bench]
|
||||
fn sign_expanded_key(b: &mut Bencher) {
|
||||
let mut csprng: OsRng = OsRng::new().unwrap();
|
||||
let keypair: Keypair = Keypair::generate::<Sha512>(&mut csprng);
|
||||
let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]).unwrap();
|
||||
let keypair: Keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
let expanded: ExpandedSecretKey = keypair.secret.expand::<Sha512>();
|
||||
let msg: &[u8] = b"";
|
||||
|
||||
|
|
@ -1169,8 +1177,8 @@ mod bench {
|
|||
|
||||
#[bench]
|
||||
fn verify(b: &mut Bencher) {
|
||||
let mut csprng: OsRng = OsRng::new().unwrap();
|
||||
let keypair: Keypair = Keypair::generate::<Sha512>(&mut csprng);
|
||||
let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]).unwrap();
|
||||
let keypair: Keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
let msg: &[u8] = b"";
|
||||
let sig: Signature = keypair.sign::<Sha512>(msg);
|
||||
|
||||
|
|
@ -1181,7 +1189,7 @@ mod bench {
|
|||
fn key_generation(b: &mut Bencher) {
|
||||
let mut rng: ZeroRng = ZeroRng::new();
|
||||
|
||||
b.iter(| | Keypair::generate::<Sha512>(&mut rng));
|
||||
b.iter(| | Keypair::generate::<Sha512, _>(&mut rng));
|
||||
}
|
||||
|
||||
#[bench]
|
||||
|
|
|
|||
59
src/lib.rs
59
src/lib.rs
|
|
@ -15,7 +15,7 @@
|
|||
//!
|
||||
//! First, we need to generate a `Keypair`, which includes both public and
|
||||
//! secret halves of an asymmetric key. To do so, we need a cryptographically
|
||||
//! secure pseudorandom number generator (CSPRING), and a hash function which
|
||||
//! secure pseudorandom number generator (CSPRNG), and a hash function which
|
||||
//! has 512 bits of output. For this example, we'll use the operating
|
||||
//! system's builtin PRNG and SHA-512 to generate a keypair:
|
||||
//!
|
||||
|
|
@ -24,6 +24,7 @@
|
|||
//! extern crate sha2;
|
||||
//! extern crate ed25519_dalek;
|
||||
//!
|
||||
//! # #[cfg(all(feature = "std", feature = "sha2"))]
|
||||
//! # fn main() {
|
||||
//! use rand::Rng;
|
||||
//! use rand::OsRng;
|
||||
|
|
@ -31,9 +32,12 @@
|
|||
//! use ed25519_dalek::Keypair;
|
||||
//! use ed25519_dalek::Signature;
|
||||
//!
|
||||
//! let mut cspring: OsRng = OsRng::new().unwrap();
|
||||
//! let keypair: Keypair = Keypair::generate::<Sha512, OsRng>(&mut cspring);
|
||||
//! let mut csprng: OsRng = OsRng::new().unwrap();
|
||||
//! let keypair: Keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
//! # }
|
||||
//! #
|
||||
//! # #[cfg(any(not(feature = "std"), not(feature = "sha2")))]
|
||||
//! # fn main() { }
|
||||
//! ```
|
||||
//!
|
||||
//! We can now use this `keypair` to sign a message:
|
||||
|
|
@ -44,12 +48,13 @@
|
|||
//! # extern crate ed25519_dalek;
|
||||
//! # fn main() {
|
||||
//! # use rand::Rng;
|
||||
//! # use rand::OsRng;
|
||||
//! # use rand::ChaChaRng;
|
||||
//! # use rand::SeedableRng;
|
||||
//! # use sha2::Sha512;
|
||||
//! # use ed25519_dalek::Keypair;
|
||||
//! # use ed25519_dalek::Signature;
|
||||
//! # let mut cspring: OsRng = OsRng::new().unwrap();
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512, OsRng>(&mut cspring);
|
||||
//! # let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]);
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
//! let message: &[u8] = "This is a test of the tsunami alert system.".as_bytes();
|
||||
//! let signature: Signature = keypair.sign::<Sha512>(message);
|
||||
//! # }
|
||||
|
|
@ -64,12 +69,13 @@
|
|||
//! # extern crate ed25519_dalek;
|
||||
//! # fn main() {
|
||||
//! # use rand::Rng;
|
||||
//! # use rand::OsRng;
|
||||
//! # use rand::ChaChaRng;
|
||||
//! # use rand::SeedableRng;
|
||||
//! # use sha2::Sha512;
|
||||
//! # use ed25519_dalek::Keypair;
|
||||
//! # use ed25519_dalek::Signature;
|
||||
//! # let mut cspring: OsRng = OsRng::new().unwrap();
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512, OsRng>(&mut cspring);
|
||||
//! # let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]);
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
//! # let message: &[u8] = "This is a test of the tsunami alert system.".as_bytes();
|
||||
//! # let signature: Signature = keypair.sign::<Sha512>(message);
|
||||
//! let verified: bool = keypair.verify::<Sha512>(message, &signature);
|
||||
|
|
@ -87,13 +93,14 @@
|
|||
//! # extern crate ed25519_dalek;
|
||||
//! # fn main() {
|
||||
//! # use rand::Rng;
|
||||
//! # use rand::OsRng;
|
||||
//! # use rand::ChaChaRng;
|
||||
//! # use rand::SeedableRng;
|
||||
//! # use sha2::Sha512;
|
||||
//! # use ed25519_dalek::Keypair;
|
||||
//! # use ed25519_dalek::Signature;
|
||||
//! use ed25519_dalek::PublicKey;
|
||||
//! # let mut cspring: OsRng = OsRng::new().unwrap();
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512, OsRng>(&mut cspring);
|
||||
//! # let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]);
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
//! # let message: &[u8] = "This is a test of the tsunami alert system.".as_bytes();
|
||||
//! # let signature: Signature = keypair.sign::<Sha512>(message);
|
||||
//!
|
||||
|
|
@ -117,12 +124,12 @@
|
|||
//! # extern crate sha2;
|
||||
//! # extern crate ed25519_dalek;
|
||||
//! # fn main() {
|
||||
//! # use rand::{Rng, OsRng};
|
||||
//! # use rand::{Rng, ChaChaRng, SeedableRng};
|
||||
//! # use sha2::Sha512;
|
||||
//! # use ed25519_dalek::{Keypair, Signature, PublicKey};
|
||||
//! use ed25519_dalek::{PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH, KEYPAIR_LENGTH, SIGNATURE_LENGTH};
|
||||
//! # let mut cspring: OsRng = OsRng::new().unwrap();
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512, OsRng>(&mut cspring);
|
||||
//! # let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]);
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
//! # let message: &[u8] = "This is a test of the tsunami alert system.".as_bytes();
|
||||
//! # let signature: Signature = keypair.sign::<Sha512>(message);
|
||||
//! # let public_key: PublicKey = keypair.public;
|
||||
|
|
@ -141,13 +148,13 @@
|
|||
//! # extern crate rand;
|
||||
//! # extern crate sha2;
|
||||
//! # extern crate ed25519_dalek;
|
||||
//! # use rand::{Rng, OsRng};
|
||||
//! # use rand::{Rng, ChaChaRng, SeedableRng};
|
||||
//! # use sha2::Sha512;
|
||||
//! # use ed25519_dalek::{Keypair, Signature, PublicKey, SecretKey, DecodingError};
|
||||
//! # use ed25519_dalek::{PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH, KEYPAIR_LENGTH, SIGNATURE_LENGTH};
|
||||
//! # fn do_test() -> Result<(SecretKey, PublicKey, Keypair, Signature), DecodingError> {
|
||||
//! # let mut cspring: OsRng = OsRng::new().unwrap();
|
||||
//! # let keypair_orig: Keypair = Keypair::generate::<Sha512, OsRng>(&mut cspring);
|
||||
//! # let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]);
|
||||
//! # let keypair_orig: Keypair = Keypair::generate::<Sha512, _>(&mut csprng);
|
||||
//! # let message: &[u8] = "This is a test of the tsunami alert system.".as_bytes();
|
||||
//! # let signature_orig: Signature = keypair_orig.sign::<Sha512>(message);
|
||||
//! # let public_key_bytes: [u8; PUBLIC_KEY_LENGTH] = keypair_orig.public.to_bytes();
|
||||
|
|
@ -173,7 +180,7 @@
|
|||
//! types additionally come with built-in [serde](https://serde.rs) support by
|
||||
//! building `ed25519-dalek` via:
|
||||
//!
|
||||
//! ```ignore,bash
|
||||
//! ```bash
|
||||
//! $ cargo build --features="serde"
|
||||
//! ```
|
||||
//!
|
||||
|
|
@ -191,12 +198,12 @@
|
|||
//!
|
||||
//! # #[cfg(feature = "serde")]
|
||||
//! # fn main() {
|
||||
//! # use rand::{Rng, OsRng};
|
||||
//! # use rand::{Rng, ChaChaRng, SeedableRng};
|
||||
//! # use sha2::Sha512;
|
||||
//! # use ed25519_dalek::{Keypair, Signature, PublicKey};
|
||||
//! use bincode::{serialize, Infinite};
|
||||
//! # let mut cspring: OsRng = OsRng::new().unwrap();
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512>(&mut cspring);
|
||||
//! # let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]);
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512>(&mut csprng);
|
||||
//! # let message: &[u8] = "This is a test of the tsunami alert system.".as_bytes();
|
||||
//! # let signature: Signature = keypair.sign::<Sha512>(message);
|
||||
//! # let public_key: PublicKey = keypair.public;
|
||||
|
|
@ -223,14 +230,14 @@
|
|||
//! #
|
||||
//! # #[cfg(feature = "serde")]
|
||||
//! # fn main() {
|
||||
//! # use rand::{Rng, OsRng};
|
||||
//! # use rand::{Rng, ChaChaRng, SeedableRng};
|
||||
//! # use sha2::Sha512;
|
||||
//! # use ed25519_dalek::{Keypair, Signature, PublicKey};
|
||||
//! # use bincode::{serialize, Infinite};
|
||||
//! use bincode::{deserialize};
|
||||
//!
|
||||
//! # let mut cspring: OsRng = OsRng::new().unwrap();
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512>(&mut cspring);
|
||||
//! # let mut csprng: ChaChaRng = ChaChaRng::from_seed([0u8; 32]);
|
||||
//! # let keypair: Keypair = Keypair::generate::<Sha512>(&mut csprng);
|
||||
//! let message: &[u8] = "This is a test of the tsunami alert system.".as_bytes();
|
||||
//! # let signature: Signature = keypair.sign::<Sha512>(message);
|
||||
//! # let public_key: PublicKey = keypair.public;
|
||||
|
|
@ -262,8 +269,6 @@ extern crate generic_array;
|
|||
extern crate digest;
|
||||
extern crate subtle;
|
||||
extern crate failure;
|
||||
|
||||
#[cfg(feature = "std")]
|
||||
extern crate rand;
|
||||
|
||||
#[cfg(any(feature = "std", test))]
|
||||
|
|
|
|||
Loading…
Reference in a new issue