use crate::{public::PublicKey, secret::SecretKey, signature::Signature};
use rand::{CryptoRng, RngCore};
pub struct Keypair {
pub secret: SecretKey,
pub public: PublicKey,
}
impl Keypair {
pub fn generate<R>(csprng: &mut R) -> Self
where
R: CryptoRng + RngCore,
{
let sk = SecretKey::generate(csprng);
let pk = PublicKey::from(&sk);
Keypair {
secret: sk,
public: pk,
}
}
pub fn sign(&self, message: &[u8]) -> Signature {
self.secret.sign(message)
}
pub fn verify(&self, message: &[u8], signature: Signature) -> bool {
self.public.verify(message, signature)
}
}