1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
//! Signature traits use crate::error::Error; use core::fmt::Debug; /// Trait impl'd by concrete types that represent digital signatures pub trait Signature: AsRef<[u8]> + Debug + Sized { /// Parse a signature from its byte representation fn from_bytes(bytes: impl AsRef<[u8]>) -> Result<Self, Error>; /// Borrow this signature as serialized bytes fn as_slice(&self) -> &[u8] { self.as_ref() } } /// Marker trait for `Signature` types computable as `S(H(m))` /// /// - `S`: signature algorithm /// - `H`: hash (a.k.a. digest) function /// - `m`: message /// /// For signature types that implement this trait, when the `derive-preview` /// Cargo feature is enabled a custom derive for `Signer` is available for any /// types that impl `DigestSigner`, and likewise for deriving `Verifier` for /// types which impl `DigestVerifier`. #[cfg(feature = "digest")] pub trait DigestSignature: Signature { /// Preferred `Digest` algorithm to use when computing this signature type. type Digest: digest::Digest; }