type PrivateKey: PrivateKey<Signature = Self::Signature> + ToPublicKey<PublicKey = Self::PublicKey>
type PublicKey: PublicKey<Signature = Self::Signature>
type Signature: Signature + SignatureVerify<PublicKey = Self::PublicKey>
fn pub_key(priv_key: &[u8]) -> Result<Self::PublicKey, Error>
fn sign_message(msg: &[u8], priv_key: &[u8]) -> Result<Self::Signature, Error>
fn verify_signature(msg: &[u8], sig: &[u8], pub_key: &[u8]) -> Result<(), Error>