use base::Result;
use base::Datable;
use base::ConstantSize;
pub trait Sign<Seed, Pk, Sk, Sig>
where Seed: Datable + ConstantSize,
Pk: Datable + ConstantSize,
Sk: Datable + ConstantSize,
Sig: Datable + ConstantSize,
Self: 'static + Sized
{
fn generate_keys(&mut self, seed: Option<Seed>) -> Result<(Pk, Sk)>;
fn sign(&mut self, msg: &[u8], sk: &Sk) -> Result<Sig>;
fn verify(&mut self, msg: &[u8], pk: &Pk, sig: &Sig) -> Result<bool>;
fn check(&mut self, msg: &[u8], pk: &Pk, sig: &Sig) -> Result<()>;
}