use crate::base::hash::sha256_canonical;
use crate::base::schema::*;
use crate::base::time::Time;
use crate::checkpoint::TrustedCheckpoint;
use crate::record::evidence::{derive_evidence, Evidence};
use crate::record::kind::*;
use crate::record::payloads::*;
use crate::record::record::{decode, Record};
use crate::record::refs::{RecordId, Ref};
use crate::state::build::build_state_unchecked;
use crate::state::state::State;
use crate::verify::rules::VerifierRules;
use std::collections::{BTreeSet, HashMap, HashSet};
macro_rules! dec {
($buf:expr, $ty:ty) => {
match crate::record::record::decode::<$ty>($buf) {
Ok(v) => v,
Err(_) => return Some(ReasonCode::InvalidPayload),
}
};
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct LogVerdict {
pub result: VerdictResult,
pub reason: Option<ReasonCode>,
pub checked_records: u64,
pub last_time: Time,
pub retracted_records: BTreeSet<RecordId>,
pub tainted_records: BTreeSet<RecordId>,
}
fn reject(reason: ReasonCode, checked_records: u64, records: &[Record]) -> LogVerdict {
LogVerdict {
result: VerdictResult::Reject,
reason: Some(reason),
checked_records,
last_time: records.last().map(|r| r.time).unwrap_or(0),
retracted_records: BTreeSet::new(),
tainted_records: BTreeSet::new(),
}
}
mod activity;
mod lifecycle;
mod plans;
mod record_checks;
mod replay;
mod verdict;
pub use record_checks::verify_record;
pub use replay::verify_log;
use activity::check_kind_specific;
use lifecycle::*;
use plans::*;
use record_checks::{check_record, decodes_canonically};
use verdict::{check_verdict_record, Prior, PriorIndex};