mjl- / nox

nox protocol and go implementation, an easy to use and configure noise-secured transport protocol

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

nox - bidirectional streaming transport protocol, mutually authenticated and secured by the noise protocol variant Noise_XX_25519_ChaChaPoly_BLAKE2b, with simple framing.

For documentation, see https://godoc.org/github.com/mjl-/nox.
For an example client & server, see cmd/nox/.

The nox protocol is described in PROTOCOL.txt.
See https://noiseprotocol.org/ for the noise protocol families.
This code uses the noise Go library at https://github.com/flynn/noise.

Design inspiration for nox:
- Looking for a nearby .nox directory: hg & git.
- Trust-on-first use with known_hosts file: ssh.
- Go library interface: "net" and "crypto/tls" packages.
- Using noise, small base64 keys, simple setup: wireguard.
- X.509, for what not to want.

# TODO

- need an implementation in another language
- test with go-fuzz
- clear crypto state on close, golang/go#21865
- audit the code
- add benchmark tests, can probably be made more efficient with less data copying
- more tests, counterparty with invalid protocol messages, use a transcript of successful communication.

About

nox protocol and go implementation, an easy to use and configure noise-secured transport protocol

License:MIT License


Languages

Language:Go 100.0%