Skip to main content

vcl_protocol/
lib.rs

1//! # VCL Protocol
2//!
3//! Cryptographically chained packet transport protocol with:
4//! - SHA-256 integrity chain
5//! - Ed25519 digital signatures
6//! - X25519 ephemeral key exchange
7//! - XChaCha20-Poly1305 authenticated encryption
8//! - Replay protection
9//! - Connection events, ping/heartbeat, mid-session key rotation
10//! - Connection pool for managing multiple peers
11//!
12//! ## Quick Start
13//!
14//! ```no_run
15//! use vcl_protocol::connection::VCLConnection;
16//!
17//! #[tokio::main]
18//! async fn main() {
19//!     let mut server = VCLConnection::bind("127.0.0.1:8080").await.unwrap();
20//!     server.accept_handshake().await.unwrap();
21//!
22//!     let packet = server.recv().await.unwrap();
23//!     println!("Received: {}", String::from_utf8_lossy(&packet.payload));
24//! }
25//! ```
26
27pub mod error;
28pub mod event;
29pub mod packet;
30pub mod crypto;
31pub mod connection;
32pub mod handshake;
33pub mod pool;
34pub mod config;
35pub mod transport;
36pub mod fragment;
37pub mod flow;
38pub mod metrics;
39pub mod tun_device;
40pub mod ip_packet;
41pub mod multipath;
42pub mod mtu;
43pub mod keepalive;
44pub mod reconnect;
45pub mod dns;
46pub mod obfuscation;
47
48pub use error::VCLError;
49pub use event::VCLEvent;
50pub use pool::VCLPool;
51pub use config::VCLConfig;
52pub use transport::VCLTransport;
53pub use fragment::{Fragmenter, Reassembler, Fragment};
54pub use flow::FlowController;
55pub use metrics::VCLMetrics;
56pub use tun_device::{VCLTun, TunConfig, IpPacket, IpVersion};
57pub use ip_packet::{ParsedPacket, TransportProtocol};
58pub use multipath::{MultipathSender, MultipathReceiver, PathInfo, SchedulingPolicy};
59pub use mtu::{MtuNegotiator, MtuConfig, PathMtu, MtuState};
60pub use keepalive::{KeepaliveManager, KeepaliveConfig, KeepaliveAction, KeepalivePreset};
61pub use reconnect::{ReconnectManager, ReconnectConfig, ReconnectState};
62pub use dns::{DnsFilter, DnsConfig, DnsAction, DnsPacket};
63pub use obfuscation::{Obfuscator, ObfuscationConfig, ObfuscationMode};