extern crate ed25519_dalek;
extern crate failure;
extern crate rand;
extern crate sha2;
pub use self::ed25519_dalek::{Keypair, PublicKey, Signature};
use self::failure::Error;
use self::rand::OsRng;
use self::sha2::Sha512;
pub fn generate() -> Keypair {
let mut cspring: OsRng = OsRng::new().unwrap();
Keypair::generate::<Sha512>(&mut cspring)
}
pub fn sign(keypair: &Keypair, msg: &[u8]) -> Signature {
keypair.sign::<Sha512>(msg)
}
pub fn verify(
public: &PublicKey,
msg: &[u8],
sig: &Signature,
) -> Result<(), Error> {
ensure!(
public.verify::<Sha512>(msg, sig),
"Signature verification failed"
);
Ok(())
}
#[test]
fn can_verify_messages() {
let keypair = generate();
let from = b"hello";
let sig = sign(&keypair, from);
verify(&keypair.public, from, &sig).unwrap();
verify(&keypair.public, b"oops", &sig).is_err();
}