qudag_protocol/
validation.rs

1//! Protocol message validation implementation.
2
3use crate::message::Message;
4use thiserror::Error;
5
6/// Errors that can occur during validation.
7#[derive(Debug, Error)]
8pub enum ValidationError {
9    /// Invalid message format
10    #[error("Invalid message format")]
11    InvalidFormat,
12
13    /// Invalid signature
14    #[error("Invalid signature")]
15    InvalidSignature,
16
17    /// Message too old
18    #[error("Message too old")]
19    MessageTooOld,
20
21    /// Invalid protocol version
22    #[error("Invalid protocol version")]
23    InvalidVersion,
24}
25
26/// Validation result.
27#[derive(Debug, Clone, PartialEq, Eq)]
28pub enum ValidationResult {
29    /// Message is valid
30    Valid,
31
32    /// Message is invalid
33    Invalid,
34
35    /// Message requires further validation
36    PendingValidation,
37}
38
39/// Validation configuration.
40#[derive(Debug, Clone)]
41pub struct ValidationConfig {
42    /// Maximum message age in seconds
43    pub max_age: u64,
44
45    /// Minimum protocol version
46    pub min_version: u32,
47
48    /// Required signature types
49    pub required_signatures: Vec<String>,
50}
51
52/// Message validation trait defining the interface for validation operations.
53pub trait MessageValidation {
54    /// Initialize validation with configuration.
55    fn init(config: ValidationConfig) -> Result<(), ValidationError>;
56
57    /// Validate a message.
58    fn validate_message(&self, message: &Message) -> Result<ValidationResult, ValidationError>;
59
60    /// Validate message signature.
61    fn validate_signature(&self, message: &Message) -> Result<bool, ValidationError>;
62
63    /// Check message freshness.
64    fn check_freshness(&self, message: &Message) -> bool;
65
66    /// Validate protocol version.
67    fn validate_version(&self, version: u32) -> bool;
68}