Session Desktop - Onion routing based messenger
 
 
 
 
Go to file
sachaaaaa 9da4e94276 print outgoing messages as bytes, that can be injected in the mock socket server for debugging
.github Pull request template: Fix link to Transifex project ()
.tx Transifex config specific to electron, updated translations ()
_locales Merge branch 'master' of https://github.com/signalapp/Signal-Desktop into development
app Follow symlinks on target file path as well as user/config paths
build Bypass often-corrupt node_modules/.bin/grunt.cmd on windows ()
components bower.json and Gruntfile.js cleanup
config config: change the default server from signal.org to localhost
fixtures Add style guide examples for portrait/landscape images
fonts Add fonts so we don't have to hit googlefonts
images Copy quoted message contents into quote on receipt
js add helper to set the keysPending flag for a discussion
libloki Decrypt friend-request messages (the ones using fallback encryption). Moved logic into a new file libloki-protocol.js and concat loki code into js/libloki.js
libtextsecure print outgoing messages as bytes, that can be injected in the mock socket server for debugging
mockup_servers update mock socket server to send friend-request message (fallback encryption)
protos Add fallback encryption (FallBackSessionCipher. simple DH) for when key bundle hasn't been received yet. Skip padding of bytes.
scripts Add `start-backup` script
stylesheets Merge branch 'master' of https://github.com/signalapp/Signal-Desktop into development
test Use base64 strings for incoming message cache instead of binary
ts Decrypt friend-request messages (the ones using fallback encryption). Moved logic into a new file libloki-protocol.js and concat loki code into js/libloki.js
.aptly.conf Setup publishing to s3
.editorconfig Use 2 spaces for indentation
.eslintignore Decrypt friend-request messages (the ones using fallback encryption). Moved logic into a new file libloki-protocol.js and concat loki code into js/libloki.js
.eslintrc.js Use window.log in browser context, turn on console eslint rule
.gitignore Decrypt friend-request messages (the ones using fallback encryption). Moved logic into a new file libloki-protocol.js and concat loki code into js/libloki.js
.nvmrc Update to electron v2.0.1 ()
.prettierignore Decrypt friend-request messages (the ones using fallback encryption). Moved logic into a new file libloki-protocol.js and concat loki code into js/libloki.js
.prettierrc.js Add `.prettierrc.js`
.travis.yml Custom linter to check code quality ()
.yarnclean node-sqlcipher update: always build, statically link openssl
CONTRIBUTING.md Migrate to SQLCipher for messages/cache
Gruntfile.js Decrypt friend-request messages (the ones using fallback encryption). Moved logic into a new file libloki-protocol.js and concat loki code into js/libloki.js
LICENSE Add GPLv3 LICENSE file ()
LOKI-NOTES.md fix readme
README.md Change Signal readme
about.html New media permission, show dialog when not enabled for voice msg
about_preload.js Remove jshint - move everything over to eslint
appveyor.yml Custom linter to check code quality ()
aptly.sh aptly.sh: Fix broken switch commands - distro and config fix
background.html Decrypt friend-request messages (the ones using fallback encryption). Moved logic into a new file libloki-protocol.js and concat loki code into js/libloki.js
bower.json bower.json and Gruntfile.js cleanup
debug_log.html New media permission, show dialog when not enabled for voice msg
debug_log_preload.js Update the user agent for debug log requests
dev-app-update.yml.sample Show dialog box when there's an update for download
find_broken_perms.sh Add two scripts to handle broken permissions in release dir
fix_broken_perms.sh Beta builds: A few updates required for successful release ()
index.html App loading screen: show messages processed so far
main.js Merge branch 'master' of https://github.com/signalapp/Signal-Desktop into development
package.json Merge branch 'master' of https://github.com/signalapp/Signal-Desktop into development
permissions_popup.html New media permission, show dialog when not enabled for voice msg
permissions_popup_preload.js Fix permissions popup; add needed function on window ()
preload.js Add skeleton for Loki Message API. Wrap data in json (for now?)
prepare_beta_build.js Use window.log in browser context, turn on console eslint rule
prepare_import_build.js Use window.log in browser context, turn on console eslint rule
settings.html Link labels with checkboxes in settings pane ()
settings_preload.js Update the user agent for debug log requests
styleguide.config.js Finish new Message component, integrate into application
travis.sh Simplify testing and linting
tsconfig.json Adjust `tsconfig.json` formatting for Prettier
tslint.json Finish new Message component, integrate into application
yarn.lock Custom linter to check code quality ()

README.md

Loki Messenger

Loki Messenger allows for truly decentralized and end to end and private encrypted chats, Loki Messenger is built to handle both online and fully Asynchronous offline messages , Loki messenger implements the Signal protocol for message encryption, Our Client interface is a fork of Signal Messenger. All communication that passes through Loki messenger is routed through Lokinet.

Summary

Loki messenger integrates directly with Loki Service Nodes, which are a set of distributed, decentralized and Sybil resistant nodes. Service Nodes act as both federated servers which store messages offline, and a set of nodes which allow for mixnet functionality obfuscating users IP Addresses. For a full understanding of how Loki messenger works, read the Loki whitepaper

Online Messages

If Alice and Bob are both online they can simply resolve each others public keys, to introduction sets, this functionality is handled by interfacing with Lokinet. With the appropriate introduction sets Alice and Bob can create a path and using onion routing pass messages through the Loki network without giving away personally identifiable information like their IP address.

Offline messages

Offline messaging uses Swarms, given any users public key the user can resolve a public key to a specific grouping of Service Nodes (AKA Swarm) each user in Loki Messenger belongs to a Swarm. When routing a message offline the user selects a Service node in the destination users Swarm, when the user comes online they query any node in their Swarm, if the Swarm is holding any messages for the user they disseminate those messages to the user.

Swarm Messaging

Spam protections for Loki Messenger are based on a Proof of Work which is attached to any message that exceeds a default size or Time To Live, this process is discussed further in the Loki whitepaper.

Want to Contribute? Found a Bug or Have a feature request?

Please search for any existing issues that describe your bugs in order to avoid duplicate submissions. Submissions can be made by making a pull request to our development branch, if you don't know where to start contributing , try reading the Github issues page for ideas.

License

Copyright 2018- Current, Loki Foundation Copyright 2014-2018, Open Whisper Systems Licensed under the GPLv3: http://www.gnu.org/licenses/gpl-3.0.html