use crate::constants::*;
use crate::errors::*;
use crate::signature::*;
use crate::signature_box::*;
#[derive(Clone)]
pub struct SignatureBones {
pub(crate) signature: Signature,
pub(crate) is_prehashed: bool,
}
impl SignatureBones {
pub const BYTES: usize = Signature::BYTES;
pub fn is_prehashed(&self) -> bool {
self.is_prehashed
}
pub fn from_bytes(bytes: &[u8]) -> Result<SignatureBones> {
let signature = Signature::from_bytes(bytes)?;
let is_prehashed = match signature.sig_alg {
SIGALG => false,
SIGALG_PREHASHED => true,
_ => {
return Err(PError::new(
ErrorKind::Verify,
"Unsupported signature algorithm".to_string(),
))
}
};
Ok(SignatureBones {
signature,
is_prehashed,
})
}
pub fn to_bytes(&self) -> Vec<u8> {
self.signature.to_bytes()
}
}
impl From<SignatureBones> for SignatureBox {
fn from(signature: SignatureBones) -> SignatureBox {
let is_prehashed = signature.is_prehashed();
SignatureBox {
untrusted_comment: String::new(),
signature: signature.signature,
sig_and_trusted_comment: None,
global_sig: None,
is_prehashed,
}
}
}
impl From<SignatureBox> for SignatureBones {
fn from(signature: SignatureBox) -> SignatureBones {
let is_prehashed = signature.is_prehashed();
SignatureBones {
signature: signature.signature,
is_prehashed,
}
}
}