Bläddra i källkod

Add protocol explanation.

parazyd 4 år sedan
förälder
incheckning
8baa8111f9
1 ändrade filer med 35 tillägg och 0 borttagningar
  1. 35 0
      README.md

+ 35 - 0
README.md

@@ -63,6 +63,41 @@ Usage:
 Before exiting, do run `/save` in order to make sure keep any pubkeys
 Before exiting, do run `/save` in order to make sure keep any pubkeys
 you have exchanged.
 you have exchanged.
 
 
+## Protocol
+
+Basic NaCl box, no ephemeral keys, persistent sessions.
+
+```python
+from base64 import b64encode, b64decode
+from nacl.public import PublicKey, PrivateKey, Box
+
+alice = PrivateKey.generate()
+alice_sessions = {}
+
+bob = PrivateKey.generate()
+bob_sessions = {}
+
+# Key exchange
+alice_pub = f"{b64encode(alice.public_key.encode()).decode()}"
+bob_pub = f"{b64encode(bob.public_key.encode()).decode()}"
+
+send_to_bob(f"?e2e_kexreq:{alice_pub}?")
+
+msg = bob.recv()
+alice_pub = decode_kexeq(msg)
+send_to_alice(f"?e2e_kexrep:{bob_pub}?")
+
+bob_sessions["alice"] = Box(bob, alice_pub)
+
+msg = alice.recv()
+bob_pub = decode_kexrep(msg)
+alice_sessions["bob"] = Box(alice, bob_pub)
+
+enc_msg = alice_sessions["bob"].encrypt("foo")
+send_to_bob(f"?e2e_msg:WW91IGJhc3RhcmQgbG1hby4gQnV5IHRoZSBkaXAhCg==?")
+```
+
+
 ## License
 ## License
 
 
 GNU GPL version 3
 GNU GPL version 3