phantom_protocol/transport/
api.rs1pub use crate::transport::scheduler::Scheduler;
28pub use crate::transport::session::{CryptoState, Session};
29pub use crate::transport::stream::Stream;
30pub use crate::transport::types::{LegType, PacketFlags, PacketHeader, SchedulerMode, SessionId};
31
32pub use crate::transport::handshake::{
34 ClientHello, HandshakeClient, HandshakeError, HandshakeServer, ServerHello,
35};
36
37pub use crate::crypto::hybrid_kem::{HybridCiphertext, HybridKeyPackage, HybridSecretKey};
39pub use crate::crypto::hybrid_sign::{
40 HybridSignError, HybridSignature, HybridSigningKey, HybridVerifyingKey,
41};
42
43#[derive(Debug, Clone)]
45pub struct TransportConfig {
46 pub pqc_enabled: bool,
48 pub scheduler_mode: SchedulerMode,
50 pub max_packet_size: usize,
52 pub stealth_mode: bool,
54}
55
56impl Default for TransportConfig {
57 fn default() -> Self {
58 Self {
59 pqc_enabled: true,
60 scheduler_mode: SchedulerMode::LowLatency,
61 max_packet_size: 1400,
62 stealth_mode: false,
63 }
64 }
65}
66
67impl TransportConfig {
68 pub fn low_latency() -> Self {
70 Self {
71 scheduler_mode: SchedulerMode::LowLatency,
72 ..Default::default()
73 }
74 }
75
76 pub fn high_throughput() -> Self {
78 Self {
79 scheduler_mode: SchedulerMode::HighThroughput,
80 ..Default::default()
81 }
82 }
83
84 pub fn stealth() -> Self {
86 Self {
87 stealth_mode: true,
88 scheduler_mode: SchedulerMode::Stealth,
89 ..Default::default()
90 }
91 }
92}
93
94pub struct PhantomBuilder {
96 config: TransportConfig,
97 server_key: Option<HybridVerifyingKey>,
98}
99
100impl PhantomBuilder {
101 pub fn new() -> Self {
103 Self {
104 config: TransportConfig::default(),
105 server_key: None,
106 }
107 }
108
109 pub fn config(mut self, config: TransportConfig) -> Self {
111 self.config = config;
112 self
113 }
114
115 pub fn pin_server_key(mut self, key: HybridVerifyingKey) -> Self {
117 self.server_key = Some(key);
118 self
119 }
120
121 pub fn server_key(&self) -> Option<&HybridVerifyingKey> {
123 self.server_key.as_ref()
124 }
125
126 pub fn get_config(&self) -> &TransportConfig {
128 &self.config
129 }
130
131 pub fn create_client_handshake(
134 &self,
135 ) -> Result<HandshakeClient, crate::transport::handshake::HandshakeError> {
136 HandshakeClient::new()
137 }
138
139 pub fn create_server_handshake(
142 ) -> Result<HandshakeServer, crate::transport::handshake::HandshakeError> {
143 HandshakeServer::new()
144 }
145}
146
147impl Default for PhantomBuilder {
148 fn default() -> Self {
149 Self::new()
150 }
151}
152
153#[cfg(test)]
154mod tests {
155 use super::*;
156
157 #[test]
158 fn test_config_presets() {
159 let low_lat = TransportConfig::low_latency();
160 assert!(matches!(low_lat.scheduler_mode, SchedulerMode::LowLatency));
161
162 let high_throughput = TransportConfig::high_throughput();
163 assert!(matches!(
164 high_throughput.scheduler_mode,
165 SchedulerMode::HighThroughput
166 ));
167
168 let stealth = TransportConfig::stealth();
169 assert!(stealth.stealth_mode);
170 assert!(matches!(stealth.scheduler_mode, SchedulerMode::Stealth));
171 }
172
173 #[test]
174 fn test_builder_flow() {
175 let builder = PhantomBuilder::new().config(TransportConfig::stealth());
176
177 assert!(builder.get_config().stealth_mode);
178
179 let client_hs = builder
181 .create_client_handshake()
182 .expect("create_client_handshake");
183 let _client_hello = client_hs.create_client_hello();
184
185 let server_hs = PhantomBuilder::create_server_handshake().expect("create_server_handshake");
186 let _server_pk = server_hs.verifying_key();
187 }
188}