use base::Result;
use base::Datable;
pub trait Prove<P>
where P: Datable,
Self: 'static + Sized
{
fn prove(&mut self, msg: &[u8]) -> Result<P>;
fn verify(&mut self, msg: &[u8], proof: &P) -> Result<bool>;
fn check(&mut self, msg: &[u8], proof: &P) -> Result<()>;
}