use super::*;
use crate::doc::{self, authcert};
use crate::types;
use authcert::AuthCert as DirAuthKeyCert;
pub use doc::netstatus::Signature as NdiDirectorySignature;
use doc::netstatus::{
ConsensusAuthoritySection, DirectorySignaturesHashesAccu, VerifyGeneralTrustedAuthorities,
VoteAuthoritySection, VoteStatusConsensus, VoteStatusVote,
};
mod ns_per_flavour_macros;
pub use ns_per_flavour_macros::*;
ns_per_flavour_macros::ns_export_flavoured_types! {
NetworkStatus, NetworkStatusUnverified, Router,
}
#[derive(Clone, Debug, Default, Deftly)]
#[derive_deftly(ItemValueParseable)]
#[non_exhaustive]
pub struct NdiParams {
}
#[derive(Deftly, Clone, Debug)]
#[derive_deftly(ItemValueParseable)]
#[non_exhaustive]
pub struct NdiR {
pub nickname: types::Nickname,
pub identity: String, }
fn verify_general_timeless(
hashes: &DirectorySignaturesHashesAccu,
signatures: &[NdiDirectorySignature],
trusted: &[pk::rsa::RsaIdentity],
certs: &[&DirAuthKeyCert],
) -> Result<(), VF> {
let group = crate::doc::netstatus::SignatureGroup {
hashes: *hashes,
signatures: signatures.iter().cloned().collect_vec(),
};
group.verify_general(
VerifyGeneralTrustedAuthorities::TrustThese { trusted },
&certs.iter().copied().cloned().collect_vec(),
|tv| tv.verify(),
)
}