diff --git a/README.md b/README.md
index 882109c..300ac0a 100644
--- a/README.md
+++ b/README.md
@@ -120,7 +120,7 @@ Options:
✅ |
✅ |
-
+
p2pcopy |
✅ |
✅ |
@@ -129,6 +129,15 @@ Options:
❌ |
❌ |
+
+ qft |
+ ✅ |
+ ❌ |
+ ❌ |
+ ✅ |
+ ❌ |
+ ❌ |
+
iwant |
✅ |
@@ -205,6 +214,32 @@ Options:
Open an [issue](https://github.com/manforowicz/gday/issues) to add more projects to this list.
+## Technical Overview
+
+1. **Peer A** randomly generates a _"room code"_ and a _"shared secret"_.
+
+2. **Peer A** randomly selects a **gday server** ID and connects to it over TLS.
+
+3. **Peer A** sends its _room code_ and its local IP address and port number to the **gday server**.
+
+4. **Peer A** combines the server's ID, _room code_, and _shared secret_ into a code of form `"1.n5xn8.wvqsf"`.
+
+5. **Peer A** tells this code to **Peer B**, possibly via phone call or text message.
+
+6. **Peer B** also sends this _room code_ and its local IP address and port number to the **gday server**.
+
+7. The **gday server** sends both peers the public and local IP addresses and ports of the other peer.
+
+8. From the same local port that they used to connect to the server, each peer tries a few times to connect over TCP to both the local and public socket addresses of the other peer.
+
+9. Once any of the connection attempts succeeds, they use password-authenticated key exchange to derive a strong shared key from their _shared secret_, and use it to encrypt their TCP connection with chacha20poly1305.
+
+10. **Peer A** sends **Peer B** a list of offered files and their sizes.
+
+11. **Peer B** checks for files left over from any previous interrupted downloads, and replies with the file portions it would like to receive.
+
+12. **Peer A** sends all the accepted files to **Peer B**, back-to-back.
+
## In this repository
- [gday](/gday/) - Command line tool for sending files.
diff --git a/gday/README.md b/gday/README.md
index 50095a6..d672305 100644
--- a/gday/README.md
+++ b/gday/README.md
@@ -120,7 +120,7 @@ Options:
✅ |
✅ |
-
+
p2pcopy |
✅ |
✅ |
@@ -129,6 +129,15 @@ Options:
❌ |
❌ |
+
+ qft |
+ ✅ |
+ ❌ |
+ ❌ |
+ ✅ |
+ ❌ |
+ ❌ |
+
iwant |
✅ |
@@ -205,6 +214,32 @@ Options:
Open an [issue](https://github.com/manforowicz/gday/issues) to add more projects to this list.
+## Technical Overview
+
+1. **Peer A** randomly generates a _"room code"_ and a _"shared secret"_.
+
+2. **Peer A** randomly selects a **gday server** ID and connects to it over TLS.
+
+3. **Peer A** sends its _room code_ and its local IP address and port number to the **gday server**.
+
+4. **Peer A** combines the server's ID, _room code_, and _shared secret_ into a code of form `"1.n5xn8.wvqsf"`.
+
+5. **Peer A** tells this code to **Peer B**, possibly via phone call or text message.
+
+6. **Peer B** also sends this _room code_ and its local IP address and port number to the **gday server**.
+
+7. The **gday server** sends both peers the public and local IP addresses and ports of the other peer.
+
+8. From the same local port that they used to connect to the server, each peer tries a few times to connect over TCP to both the local and public socket addresses of the other peer.
+
+9. Once any of the connection attempts succeeds, they use password-authenticated key exchange to derive a strong shared key from their _shared secret_, and use it to encrypt their TCP connection with chacha20poly1305.
+
+10. **Peer A** sends **Peer B** a list of offered files and their sizes.
+
+11. **Peer B** checks for files left over from any previous interrupted downloads, and replies with the file portions it would like to receive.
+
+12. **Peer A** sends all the accepted files to **Peer B**, back-to-back.
+
## Related
- [gday](https://crates.io/crates/gday) - Command line tool for sending files.
- [gday_server](https://crates.io/crates/gday_server) - Server that lets two peers share their socket addresses.