pub trait Signature: AsRef<[u8]> + Debug + Sized {
fn from_bytes(bytes: &[u8]) -> Result<Self, Error>;
fn as_bytes(&self) -> &[u8]ⓘNotable traits for &'_ [u8]impl<'_> Read for &'_ [u8]impl<'_> Write for &'_ mut [u8]
{ ... }
}
Expand description
Trait impl’d by concrete types that represent digital signatures.
Signature types must (as mandated by the AsRef<[u8]>
bound) be a thin
wrapper around the “bag-of-bytes” serialized form of a signature which can
be directly parsed from or written to the “wire”.
Inspiration for this approach comes from the Ed25519 signature system, which adopted it based on the observation that past signature systems were not prescriptive about how signatures should be represented on-the-wire, and that lead to a proliferation of different wire formats and confusion about which ones should be used.
The Signature
trait aims to provide similar simplicity by minimizing
the number of steps involved to obtain a serializable signature and
ideally ensuring there is one signature type for any given signature system
shared by all “provider” crates.
For signature systems which require a more advanced internal representation
(e.g. involving decoded scalars or decompressed elliptic curve points) it’s
recommended that “provider” libraries maintain their own internal signature
type and use From
bounds to provide automatic conversions.