1#[cfg(feature = "socket")]
2pub mod socket;
3#[cfg(feature = "stream")]
4pub mod stream;
5#[cfg(feature = "socket")]
6pub mod timer;
7
8use thiserror::Error;
9
10pub use snow;
11pub use snow::params::NoiseParams;
12pub use snow::Builder;
13pub use snow::Keypair;
14
15#[cfg(feature = "socket")]
16pub use socket::HandshakeVerifier;
17#[cfg(feature = "socket")]
18pub use socket::NoiseSocket;
19#[cfg(feature = "socket")]
20pub use socket::PacketPoller;
21#[cfg(feature = "socket")]
22pub use socket::PacketVerifier;
23#[cfg(feature = "stream")]
24pub use stream::NoiseStream;
25
26const TAG_LEN: usize = 16;
27const MAX_MESSAGE_LEN: usize = u16::MAX as usize;
28
29#[derive(Debug, Error)]
30pub enum SnowstormError {
31 #[error("Snow error: {0}")]
32 SnowError(#[from] snow::Error),
33 #[error("IO error: {0}")]
34 IoError(#[from] std::io::Error),
35 #[error("Handshake error: {0}")]
36 HandshakeError(String),
37 #[error("Malformed packet: {0}")]
38 MalformedPacket(String),
39 #[error("Invalid nonce: {0:08x}")]
40 InvalidNonce(u64),
41 #[error("Invalid timestamp: {0}")]
42 InvalidTimestamp(u32),
43 #[error("Invalid public key: {0:x?}")]
44 InvalidPublicKey(Vec<u8>),
45 #[error("Invalid public key: {0:x?}")]
46 InvalidPrivateKey(Vec<u8>),
47 #[error("Invalid handshake hash: {0:x?}")]
48 InvalidHandshakeHash(Vec<u8>),
49}
50
51pub type SnowstormResult<T> = Result<T, SnowstormError>;