pub trait Signer<S> {
    fn gen() -> Self;

    fn sign(&self, msg: &[u8]) -> S;
}

pub trait Verifier<S> {
    fn verify(&self, sig: &S, msg: &[u8]) -> bool;
}