1pub mod aead;
19pub mod cookie;
20pub mod ke;
21pub mod records;
22
23pub const AEAD_AES_SIV_CMAC_256: u16 = 15;
26
27pub const NTS_NEXT_PROTOCOL_NTPV4: u16 = 0;
29
30pub const AEAD_AES_SIV_CMAC_256_KEYLEN: usize = 32;
33
34pub const DEFAULT_COOKIE_COUNT: usize = 8;
36
37pub const NTS_KE_PORT: u16 = 4460;
39
40pub const NTS_TLS_EXPORTER_LABEL: &str = "EXPORTER-network-time-security";
42
43#[derive(Debug, thiserror::Error)]
44pub enum NtsError {
45 #[error("record too short: need at least {expected} bytes, got {got}")]
46 RecordTooShort { expected: usize, got: usize },
47
48 #[error("unknown record type: {0}")]
49 UnknownRecordType(u16),
50
51 #[error("invalid record body length: declared {declared}, available {available}")]
52 InvalidBodyLength { declared: usize, available: usize },
53
54 #[error("NTS-KE error code: {0}")]
55 KeError(u16),
56
57 #[error("NTS-KE warning code: {0}")]
58 KeWarning(u16),
59
60 #[error("missing required record: {0}")]
61 MissingRecord(&'static str),
62
63 #[error("unsupported next protocol: {0}")]
64 UnsupportedProtocol(u16),
65
66 #[error("unsupported AEAD algorithm: {0}")]
67 UnsupportedAlgorithm(u16),
68
69 #[error("no cookies received from server")]
70 NoCookies,
71
72 #[error("AEAD encryption failed")]
73 EncryptionFailed,
74
75 #[error("AEAD decryption failed (authentication tag mismatch)")]
76 DecryptionFailed,
77
78 #[error("invalid cookie: {0}")]
79 InvalidCookie(String),
80
81 #[error("TLS error: {0}")]
82 Tls(String),
83
84 #[error("I/O error: {0}")]
85 Io(#[from] std::io::Error),
86
87 #[error("extension field too short: need at least {expected} bytes, got {got}")]
88 ExtensionTooShort { expected: usize, got: usize },
89
90 #[error("invalid extension field length: {0}")]
91 InvalidExtensionLength(u16),
92}