1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
// -*- mode: rust; -*- // // To the extent possible under law, the authors have waived all copyright and // related or neighboring rights to curve25519-dalek, using the Creative // Commons "CC0" public domain dedication. See // <http://creativecommons.org/publicdomain/zero/.0/> for full details. // // Authors: // - Isis Agora Lovecruft <isis@patternsinthevoid.net> //! ed25519 signatures and verification //! //! # Example //! //! Creating an ed25519 signature on a message is simple. //! //! 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 random number generator (CSPRING). For //! this example, we'll use the operating system's builtin PRNG to //! generate a keypair: //! //! ```ignore //! extern crate rand; //! extern crate ed25519; //! //! use rand::Rng; //! use rand::OsRng; //! use ed25519::Keypair; //! //! let mut cspring: OsRng = OsRng::new().unwrap(); //! let keypair: Keypair = Keypair::generate(&mut cspring); //! ``` //! //! We can now use this `keypair` to sign a message: //! //! ```ignore //! let message: &[u8] = "This is a test of the tsunami alert system.".as_bytes(); //! let signature: Signature = keypair.sign(message); //! ``` //! //! As well as to verify that this is, indeed, a valid signature on //! that `message`: //! //! ```ignore //! let verified: bool = keypair.verify(message, &signature); //! //! assert!(verified); //! ``` //! //! Anyone else, given the `public` half of the `keypair` can also easily //! verify this signature: //! //! ```ignore //! let public_key: PublicKey = keypair.public; //! let verified: bool = public_key.verify(message, &signature); //! //! assert!(verified); //! ``` #![no_std] #![feature(rand)] #![allow(unused_features)] #![feature(test)] #[macro_use] extern crate arrayref; extern crate sha2; extern crate curve25519_dalek; #[cfg(feature = "std")] extern crate rand; #[cfg(test)] #[macro_use] extern crate std; #[cfg(test)] extern crate test; #[cfg(test)] extern crate rustc_serialize; mod ed25519; // Export everything public in ed25519. pub use ed25519::*;