https://github.com/krypt0nn/udpsec
Secure UDP implementation in 🦀 Rust
https://github.com/krypt0nn/udpsec
Last synced: about 2 months ago
JSON representation
Secure UDP implementation in 🦀 Rust
- Host: GitHub
- URL: https://github.com/krypt0nn/udpsec
- Owner: krypt0nn
- License: gpl-3.0
- Created: 2022-04-12T14:57:52.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2023-01-27T20:38:12.000Z (over 3 years ago)
- Last Synced: 2026-03-17T14:07:31.901Z (4 months ago)
- Language: Rust
- Size: 22.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
🦀 udpsec
Secure UDP implementation in Rust
## Example
### Client
```rs
use udpsec::Socket;
use std::io::Write;
use std::net::SocketAddr;
fn input(prefix: &str) -> String {
let mut input = String::new();
print!("{}", prefix);
std::io::stdout().flush();
std::io::stdin().read_line(&mut input);
input.trim().to_string()
}
fn main() {
let local_addr = input("Local addr: ").parse::().unwrap();
let remote_addr = input("Remote addr: ").parse::().unwrap();
let mut socket = Socket::new(local_addr).unwrap();
// Send shared secret generation request
let mut awaiter = socket.generate_secret(remote_addr).unwrap();
// Wait until it'll not be generated
while let None = socket.shared_secret(remote_addr) {
socket.recv();
}
// wait because sometimes result can return None
println!("Ping: {} ms", awaiter.wait(None).unwrap().as_millis());
// Input and send text
loop {
socket.send(remote_addr, input("> ").as_bytes().to_vec());
}
}
```
### Server
```rs
use udpsec::Socket;
use std::io::Write;
use std::net::SocketAddr;
fn input(prefix: &str) -> String {
let mut input = String::new();
print!("{}", prefix);
std::io::stdout().flush();
std::io::stdin().read_line(&mut input);
input.trim().to_string()
}
fn main() {
let local_addr = input("Local addr: ").parse::().unwrap();
let mut socket = Socket::new(local_addr).unwrap();
loop {
if let Some((from, data)) = socket.recv() {
println!("[{}] {}", from, String::from_utf8(data).unwrap());
}
}
}
```
### Custom data encoder/decoder
```rs
let mut socket = Socket::new(local_addr).unwrap();
socket.set_encoder(|data, key| {
// somehow encode data
data
});
socket.set_decoder(|data, key| {
// somehow decode data
data
});
```
Author: [Nikita Podvirnyy](https://github.com/krypt0nn)
Licensed under [GNU GPL 3.0](LICENSE)