qudag_protocol/
validation.rs1use crate::message::Message;
4use thiserror::Error;
5
6#[derive(Debug, Error)]
8pub enum ValidationError {
9 #[error("Invalid message format")]
11 InvalidFormat,
12
13 #[error("Invalid signature")]
15 InvalidSignature,
16
17 #[error("Message too old")]
19 MessageTooOld,
20
21 #[error("Invalid protocol version")]
23 InvalidVersion,
24}
25
26#[derive(Debug, Clone, PartialEq, Eq)]
28pub enum ValidationResult {
29 Valid,
31
32 Invalid,
34
35 PendingValidation,
37}
38
39#[derive(Debug, Clone)]
41pub struct ValidationConfig {
42 pub max_age: u64,
44
45 pub min_version: u32,
47
48 pub required_signatures: Vec<String>,
50}
51
52pub trait MessageValidation {
54 fn init(config: ValidationConfig) -> Result<(), ValidationError>;
56
57 fn validate_message(&self, message: &Message) -> Result<ValidationResult, ValidationError>;
59
60 fn validate_signature(&self, message: &Message) -> Result<bool, ValidationError>;
62
63 fn check_freshness(&self, message: &Message) -> bool;
65
66 fn validate_version(&self, version: u32) -> bool;
68}