Devlog 0x13 - zend file transfer
Over the past few weeks, I've been working on creating an encrypted file transfer protocol and application suite. Here's the current state of the project:
- Encryption passes RFC verification tests. Crypto stack includes Chacha20, Poly1305, and X25519 elliptic curve key exchange.
- Compression is used only if it's useful (actually reduces file size)
- The relay is just a dumb blob store. We encrypt locally in the browser using wasm and transport only encrypted ciphertext.
- Currently, upload is streamed but we download the full ciphertext and decrypt it. This is something I want to change, but I've been struggling with streamed downloads.
- The public relay doesn't use elliptic curve key exchange but a key we generate within the browser. This key is never sent to the relay, so your information is safe.
- The CLI tool uses either the relay for non-local transmission or TCP + X25519 elliptic curve key exchange for local transmission.
Before we begin talking about details, if you'd like to use zend, you can checkout the github page: zend github
About zend
zend is an encrypted file transfer tool. Within the github repo, we have the relay which can work to store ciphertext long-term without the need for both users to be available; and the CLI tool which can both connect to the relay as well as direct peer-to-peer connection via TCP with X25519 elliptic curve key exchange. In it's current state(public beta), we are enforcing that file sizes remain less than 100MB, incomplete uploads are reaped after 10 minutes, and uploaded files that don't get downloaded are reaped within 24 hours. This keeps overhead low and storage costs cheap.
Some Features Available Now
- Engine Matches - Play matches between engines with a variety of time control modes.
- Player Matches - Play 1vs1 against a chess engine of your choice, also with a variety of bot time controls.
- Logging - Log each match your bots play, which is incredibly useful for collecting data on engine performance and debugging specific positions.
- Elo Estimation - Play a number of test games against Stockfish to determine a rough elo range for your engine. Not super accurate but interesting nonetheless.
- Configuration - Change the colors of white/black pieces via a configuration file. Works using the TOML parser I wrote, ztoml.
- Game Display - Using ANSI escape codes, zduel shows you the match being played in real time. This helps you visualize how your engine is playing and one of the most important parts of the match manager.
Some Features to Come
There are quite a few features I'd like to add to zduel to make it a more complete match manager. Here's a few features planned so far:
- Match History - Maintain a persistent match history in a toml file and read/store engine histories from the same file.
- Tournament Mode - Run a round-robin style tournament between all the engines available.
- Stockfish Game Analysis - Use Stockfish to analyze all games happening in real time, give a rough move accuracy number and performance value.
While the project is incomplete and a bit buggy in it's current state, I am enjoying using the program for debugging my own chess engines and I would recommend trying it if you want a light weight, simple and intuitive chess match manager. Thanks for reading and I'll see you next time :)