use crate::{ByteOrder, Error, domain::PublicKey};
pub use signature;
#[derive(Debug, Clone, Copy)]
pub struct Signature<'a> {
bytes: &'a [u8],
byte_order: ByteOrder,
}
impl<'a> Signature<'a> {
pub fn new(bytes: &'a [u8], byte_order: ByteOrder) -> Result<Self, Error> {
if bytes.len() < 2 || bytes.len() > 128 || !bytes.len().is_multiple_of(2) {
return Err(Error::InvalidEncoding);
}
Ok(Self { bytes, byte_order })
}
#[must_use]
pub fn byte_order(self) -> ByteOrder {
self.byte_order
}
}
impl AsRef<[u8]> for Signature<'_> {
fn as_ref(&self) -> &[u8] {
self.bytes
}
}
impl signature::hazmat::PrehashVerifier<Signature<'_>> for PublicKey {
fn verify_prehash(
&self,
prehash: &[u8],
signature: &Signature<'_>,
) -> Result<(), signature::Error> {
match Self::verify_prehash(self, prehash, signature.bytes, signature.byte_order) {
Ok(true) => Ok(()),
Ok(false) | Err(_) => Err(signature::Error::new()),
}
}
}