snowstorm/
lib.rs

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>;