pub trait VerificationAlgorithm: AsymmetricPublicKey {
    type Signature: AsRef<[u8]> + Clone;
    const SIGNATURE_SIZE: usize;
    const SIGNATURE_BECH32_HRP: &'static str;
    fn verify_bytes(
        pubkey: &Self::Public, 
        signature: &Self::Signature, 
        msg: &[u8]
    ) -> Verification;
    fn signature_from_bytes(
        data: &[u8]
    ) -> Result<Self::Signature, SignatureError>;
}