use super::{verify_sig, KeyedSig};
use crate::messaging::system::SectionAuth;
use secured_linked_list::SecuredLinkedList;
use serde::Serialize;
pub trait SectionAuthUtils<T: Serialize> {
fn new(value: T, sig: KeyedSig) -> Self;
fn verify(&self, section_chain: &SecuredLinkedList) -> bool;
fn self_verify(&self) -> bool;
}
impl<T: Serialize> SectionAuthUtils<T> for SectionAuth<T> {
fn new(value: T, sig: KeyedSig) -> Self {
Self { value, sig }
}
fn verify(&self, section_chain: &SecuredLinkedList) -> bool {
section_chain.has_key(&self.sig.public_key) && self.self_verify()
}
fn self_verify(&self) -> bool {
verify_sig(&self.sig, &self.value)
}
}