xdoc-rs 0.1.1

Declarative XML engine for Rust
Documentation
use crate::core::{Document, XmlResult};

use super::{
    verify_xades_baseline_b_enveloped, verify_xades_bes_enveloped, verify_xades_epes_enveloped,
    SigningProvider, XadesConfig, XadesProfile, XadesVerificationReport,
};

/// High-level XAdES verifier for complete XML documents.
#[derive(Debug, Clone)]
pub struct XadesVerifier<P> {
    provider: P,
    config: XadesConfig,
}

impl<P> XadesVerifier<P>
where
    P: SigningProvider,
{
    pub fn new(provider: P) -> Self {
        Self {
            provider,
            config: XadesConfig::new(),
        }
    }

    pub fn with_config(mut self, config: XadesConfig) -> Self {
        self.config = config;
        self
    }

    pub fn verify_document(&self, document: &Document) -> XmlResult<XadesVerificationReport> {
        match self.config.profile() {
            XadesProfile::Bes => verify_xades_bes_enveloped(document, &self.provider, &self.config),
            XadesProfile::Epes(_) => {
                verify_xades_epes_enveloped(document, &self.provider, &self.config)
            }
            XadesProfile::BaselineB { .. } => {
                verify_xades_baseline_b_enveloped(document, &self.provider, &self.config)
            }
        }
    }

    pub fn config(&self) -> &XadesConfig {
        &self.config
    }

    pub fn provider(&self) -> &P {
        &self.provider
    }
}