net_receiver/
net_receiver.rs1use std::io::{self, Read, Write};
2use std::net::{TcpListener, TcpStream};
3use hop_core::{CompanionMatrix, Field, StreamGenerator};
4
5fn handle_client(mut socket: TcpStream) -> io::Result<()> {
6 let coeffs = vec![1, 2, 3];
7 let companion = CompanionMatrix::from_coeffs(&coeffs);
8 let t = StreamGenerator::build_t_from_poly(&companion, &coeffs);
9 let state = vec![Field::one(); companion.k];
10 let mut sg = StreamGenerator::new(companion, t, state);
11
12 let mut buf = [0u8; 1024];
13 let stdout = io::stdout();
14 let mut out = stdout.lock();
15
16 loop {
17 let n = socket.read(&mut buf)?;
18 if n == 0 { break; }
19
20 for &b in &buf[..n] {
21 let _mask = sg.step();
22 let decoded = b.wrapping_sub((_mask.v & 0xFF) as u8);
23 write!(out, "{}", decoded as char)?;
24 }
25 out.flush()?;
26 }
27
28 Ok(())
29}
30
31fn main() -> io::Result<()> {
32 let listener = TcpListener::bind("127.0.0.1:4000")?;
33 println!("Receiver listening on 127.0.0.1:4000");
34 for stream in listener.incoming() {
35 handle_client(stream?)?;
36 }
37 Ok(())
38}