net_receiver/
net_receiver.rs

1use 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}