33 lines
847 B
Rust
33 lines
847 B
Rust
|
|
#[cfg (test)]
|
|
mod test {
|
|
#[test]
|
|
fn signing () -> anyhow::Result <()> {
|
|
use std::fs;
|
|
use ring::{
|
|
signature::{
|
|
self,
|
|
Ed25519KeyPair,
|
|
KeyPair,
|
|
},
|
|
};
|
|
|
|
fs::create_dir_all ("untracked")?;
|
|
|
|
let rng = ring::rand::SystemRandom::new ();
|
|
let pkcs8_bytes = Ed25519KeyPair::generate_pkcs8 (&rng).map_err (|_| anyhow::anyhow! ("generate_pkcs8"))?;
|
|
|
|
let key_pair = Ed25519KeyPair::from_pkcs8 (pkcs8_bytes.as_ref ()).map_err (|_| anyhow::anyhow! ("from_pkcs8"))?;
|
|
|
|
const MESSAGE: &[u8] = b":V";
|
|
let sig = key_pair.sign (MESSAGE);
|
|
|
|
let peer_public_key_bytes = key_pair.public_key ().as_ref ();
|
|
let peer_public_key = signature::UnparsedPublicKey::new (&signature::ED25519, peer_public_key_bytes);
|
|
|
|
peer_public_key.verify (MESSAGE, sig.as_ref ()).map_err (|_| anyhow::anyhow! ("verify"))?;
|
|
|
|
Ok (())
|
|
}
|
|
}
|