use validator::ValidationError;
use validator::Validator;
use validator::Validatable;
use bytescontainer::BytesContainer;
use revoker::Revoker;
use revoker::Revokable;
#[derive(Clone,Debug,PartialEq)]
pub struct RootValidator<R: Revoker> {
revoker: R,
master_public_key: BytesContainer,
}
impl<R: Revoker> RootValidator<R> {
pub fn new(master_public_key: &[u8; 32], revoker: R) -> RootValidator<R> {
let mut vec: Vec<u8> = Vec::new();
vec.extend_from_slice(master_public_key);
RootValidator {
revoker: revoker,
master_public_key: BytesContainer::new(vec),
}
}
}
impl<R: Revoker> Validator for RootValidator<R> {
fn is_valid<V: Validatable + Revokable>(&self, cert: &V) -> Result<(), ValidationError> {
try!(cert.self_validate(self));
try!(self.revoker.is_revoked(cert));
Ok(())
}
fn is_signature_valid(&self, data: &[u8], signature: &[u8]) -> bool {
use ed25519;
ed25519::verify(data, signature, self.master_public_key.get())
}
}