nim-chat-poc/README.md

79 lines
1.9 KiB
Markdown
Raw Normal View History

2025-07-07 16:03:16 -07:00
# Nim Chat POC
2025-07-04 22:17:31 -07:00
2025-07-07 16:03:16 -07:00
This is a technical proof of consuming the [chat_proto](https://github.com/waku-org/chat_proto/tree/base_types?tab=readme-ov-file) in nim.
2025-07-04 22:17:31 -07:00
2025-08-24 22:28:26 -07:00
This POC introduces the following Conversation Types:
- Inbox : Asymmetric channel for receiving invites
- PrivateV1: 1:1 private messaing with Forward Secrecy and Post compromise security
Messages are delivered over Waku
See [nim_chat_poc](./src/nim_chat_poc.nim) for a client side usage example.
## Quick Start
```
# Build Dependencies and link libraries
nimble initialize
# Run the default binary
nimble run
```
## Details
### Message Flow
2025-07-04 22:17:31 -07:00
2025-07-07 16:03:16 -07:00
To establish a secure conversation, Saro and Raya need to:
1. Exchange key material
2. Agree on a secret key, and location to communicate
2025-07-04 22:17:31 -07:00
2025-07-07 16:03:16 -07:00
For this technical proof, recipient identity keys are exchanged out of bound via an invite link. More complex identity systems will be explored in the future.
2025-07-04 22:17:31 -07:00
2025-07-07 16:03:16 -07:00
Key derivation and message framing is defined by Inbox spec
2025-07-04 22:17:31 -07:00
2025-07-07 16:03:16 -07:00
```mermaid
sequenceDiagram
actor S as Saro
participant SI as Saro Inbox
participant C as Convo
participant RI as Raya Inbox
actor R as Raya
2025-07-04 22:17:31 -07:00
2025-07-07 16:03:16 -07:00
Note over SI,RI: All clients subscribe to their default Inbox
SI ->> S: Subscribe
RI ->> R: Subscribe
Note over R: Key Information is exchanged OOB
Note over S: Conversation is created
C ->> S : Subscribe
S ->> RI : Send Invite `I1`
S ->> C : Send Message `M1`
RI --) R : Recv `I1`
Note over R: Conversation is joined
C ->> R : Subscribe
C --) R: Recv `M1`
R ->> C: Send M2
C -->> S: Recv M2
```
## Limitations
1. `.proto` files are included in this repo due to complications in importing nested packages using `?subdir=`. Once resolved there will be a single definition of protocol types.
1. Currently messages are not sent over the wire. They are simulated using a `TransportMessage`.
## License
[MIT](https://choosealicense.com/licenses/mit/)