pub mod aead;
pub mod cookie;
pub mod ke;
pub mod records;
pub const AEAD_AES_SIV_CMAC_256: u16 = 15;
pub const NTS_NEXT_PROTOCOL_NTPV4: u16 = 0;
pub const AEAD_AES_SIV_CMAC_256_KEYLEN: usize = 32;
pub const DEFAULT_COOKIE_COUNT: usize = 8;
pub const NTS_KE_PORT: u16 = 4460;
pub const NTS_TLS_EXPORTER_LABEL: &str = "EXPORTER-network-time-security";
#[derive(Debug, thiserror::Error)]
pub enum NtsError {
#[error("record too short: need at least {expected} bytes, got {got}")]
RecordTooShort { expected: usize, got: usize },
#[error("unknown record type: {0}")]
UnknownRecordType(u16),
#[error("invalid record body length: declared {declared}, available {available}")]
InvalidBodyLength { declared: usize, available: usize },
#[error("NTS-KE error code: {0}")]
KeError(u16),
#[error("NTS-KE warning code: {0}")]
KeWarning(u16),
#[error("missing required record: {0}")]
MissingRecord(&'static str),
#[error("unsupported next protocol: {0}")]
UnsupportedProtocol(u16),
#[error("unsupported AEAD algorithm: {0}")]
UnsupportedAlgorithm(u16),
#[error("no cookies received from server")]
NoCookies,
#[error("AEAD encryption failed")]
EncryptionFailed,
#[error("AEAD decryption failed (authentication tag mismatch)")]
DecryptionFailed,
#[error("invalid cookie: {0}")]
InvalidCookie(String),
#[error("TLS error: {0}")]
Tls(String),
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),
#[error("extension field too short: need at least {expected} bytes, got {got}")]
ExtensionTooShort { expected: usize, got: usize },
#[error("invalid extension field length: {0}")]
InvalidExtensionLength(u16),
}