OnionSoup is a message encryption application that uses asymmetric RSA or PGP cryptography to protect and verify communications between users without exposing a shared secret or contacting a centralized server. It is designed to provide a simple and secure way for users to communicate with each other without exposing their identities to a third party. OnionSoup uses Tor and the Tor Onion Service to route all traffic through the Tor network, which provides a layer of anonymity that is not possible over clearnet.
It is written in Go using the Fyne toolkit to provide a native application for Windows, Mac, and Linux. Prebuilt binaries are included for each operating system, but you can also build them yourself with the instructions below. Please note, if you want to use the live conversation feature, you will need to have Tor installed and accessible from the command line.
OnionSoup is still under heavy development. Bugs will be present, and the API may change and become incompatible with old versions.
This example highlights how 2 parties (Alice and Bob), can bootstrap a conversation without exposing a shared secret or their identity. To create a conversation:
- Alice and Bob generate their public and private keys and bootstrap their perspective conversation server.
- Alice and Bob exchange their public keys over the clearnet or tor.
- Either party now can generate a conversation bootstrap token and send it to the other party over the same channel as the public keys (for our example, Alice will send the bootstrap token to Bob).
- After receiving the bootstrap token, Bob pastes the bootstrap token into the start conversation dialog and submits the request. When the request is submitted, a bootstrap sequence will start and attempt to establish a secure messaging channel between the parties bidirectional over Tor.
- The session will remain open until either party closes their session, which will terminate the conversation.
- Download the prebuilt
tar.xz
from the Release page and extract it. - Install tor using the package manager (IE
sudo apt install tor
). - Run
make user-install
- Open OnionSoup!
- Download the prebuilt
exe.zip
from the Release page and extract it. - Download and install the tor expert bundle from here and start the daemon service with
c:\Tor\tor.exe –-service install
- Open OnionSoup!
Mac Builds are currently not working, please see this issue
To bundle the assets into the program run:
~/go/bin/fyne bundle -package data -o data/bundled.go data/assets
~/go/bin/fyne-cross linux -arch=amd64,arm64 -app-id="OnionSoup"
~/go/bin/fyne-cross windows -arch=amd64,arm64 -app-id="Onion.Soup"
Mac Builds are currently not working, please see this issue
~/go/bin/fyne-cross darwin -arch=amd64,arm64 -app-id="Onion.Soup" --macosx-sdk-path /full-path/macos-sdk/MacOSX15.2.sdk
OnionSoup is made possible by these amazing projects:
graph TD;
subgraph Onion
Alice-Guard-Node --> Alice-Relay-Node;
Alice-Relay-Node --> Alice-Exit-Node;
Bob-Guard-Node --> Bob-Relay-Node;
Bob-Relay-Node --> Bob-Exit-Node;
end;
Alice-Exit-Node --> Bob-Tor-Daemon;
Bob-Exit-Node --> Alice-Tor-Daemon;
Alice-Tor-Daemon --> Alice-Guard-Node;
Bob-Tor-Daemon --> Bob-Guard-Node;
subgraph Alice
Alice-Tor-Daemon;
subgraph Alice-OnionSoup
Alice-Echo-Server;
Alice-Fyne-GUI;
Alice-Tor-Connector;
Alice-Tor-Connector <--> Alice-Echo-Server;
Alice-Fyne-GUI --> Alice-Tor-Connector;
Alice-Echo-Server --> Alice-Fyne-GUI;
end;
Alice-Tor-Connector <--> Alice-Tor-Daemon;
end;
subgraph Bob;
Bob-Tor-Daemon;
subgraph Bob-OnionSoup
Bob-Echo-Server;
Bob-Fyne-GUI;
Bob-Tor-Connector;
Bob-Tor-Connector <--> Bob-Echo-Server;
Bob-Fyne-GUI --> Bob-Tor-Connector;
Bob-Echo-Server --> Bob-Fyne-GUI;
end;
Bob-Tor-Connector <--> Bob-Tor-Daemon;
end;
Feel free to help out when:
- Reporting a bug
- Discussing the current state of the code
- Submitting a fix
- Proposing new features
We use github to host code, to track issues and feature requests, as well as accept pull requests.
- Fork the repo and create your branch from
master
. - If you've added code that should be tested, add tests.
- If you've changed APIs, update the documentation.
- Ensure the test suite passes.
- Make sure your code lints.
- Issue that pull request!
In short, when you submit code changes, your submissions are understood to be under the same MIT License that covers the project. Feel free to contact the maintainers if that's a concern.
Report bugs using Github's Issues
We use GitHub issues to track public bugs. Report a bug by opening a new issue; it's that easy!
Great Bug Reports tend to have:
- A quick summary and/or background
- Steps to reproduce
- Be specific!
- Give sample code if you can.
- What you expected would happen
- What actually happens
- Notes (possibly including why you think this might be happening, or stuff you tried that didn't work)