mirror of https://github.com/ospab/ostp.git
59 lines
2.1 KiB
Rust
59 lines
2.1 KiB
Rust
use ostp_core::{ProtocolMachine, ProtocolConfig, OstpEvent, ProtocolAction, NoiseRole};
|
|
|
|
fn main() {
|
|
let key = "3f5dfaf68e377a3724bdde3ac7b4f4de";
|
|
let secrets = ostp_core::crypto::derive_all_secrets(key.as_bytes());
|
|
|
|
let mut init_cfg = ProtocolConfig {
|
|
role: NoiseRole::Initiator,
|
|
session_id: 12345,
|
|
psk: secrets.psk,
|
|
obfuscation_key: secrets.obfuscation_key,
|
|
handshake_pad_min: secrets.handshake_pad_min,
|
|
handshake_pad_max: secrets.handshake_pad_max,
|
|
max_reorder: 10,
|
|
max_reorder_buffer: 10,
|
|
ack_delay_ms: 10,
|
|
rto_ms: 100,
|
|
max_retries: 5,
|
|
max_sent_history: 100,
|
|
handshake_payload: vec![],
|
|
mtu: 1400,
|
|
max_padding: 0,
|
|
padding_strategy: ostp_core::PaddingStrategy::Adaptive,
|
|
};
|
|
|
|
let mut payload = Vec::new();
|
|
payload.extend_from_slice(&0u64.to_be_bytes()); // time
|
|
payload.extend_from_slice(&12345u32.to_be_bytes());
|
|
payload.extend_from_slice(key.as_bytes());
|
|
init_cfg.handshake_payload = payload;
|
|
|
|
let mut init_machine = ProtocolMachine::new(init_cfg.clone()).unwrap();
|
|
let action = init_machine.on_event(OstpEvent::Start).unwrap();
|
|
|
|
let pkt = match action {
|
|
ProtocolAction::SendDatagram(p) => p,
|
|
_ => panic!("Expected SendDatagram"),
|
|
};
|
|
|
|
println!("Initiator sent {} bytes", pkt.len());
|
|
|
|
let mut resp_cfg = init_cfg.clone();
|
|
resp_cfg.role = NoiseRole::Responder;
|
|
|
|
let mut resp_machine = ProtocolMachine::new(resp_cfg).unwrap();
|
|
|
|
// Simulate what server dispatcher does
|
|
let mut raw_vec = pkt.to_vec();
|
|
ostp_core::crypto::deobfuscate_packet_inplace(&mut raw_vec, &secrets.obfuscation_key, true);
|
|
println!("Deobfuscated length: {}", raw_vec.len());
|
|
|
|
let action = resp_machine.on_event(OstpEvent::Inbound(pkt));
|
|
match action {
|
|
Ok(ProtocolAction::HandshakePayload(_, _)) => println!("Responder: Handshake OK!"),
|
|
Ok(_) => println!("Responder: Not HandshakePayload"),
|
|
Err(e) => println!("Responder error: {:?}", e),
|
|
}
|
|
}
|