This repository has been archived on 2019-12-07. You can view files and clone it, but cannot push or open issues or pull requests.
Go to file
Felix Ableitner 8334cd3926 Don't crash if device doesn't have Bluetooth 2016-09-30 16:50:27 +09:00
android Don't crash if device doesn't have Bluetooth 2016-09-30 16:50:27 +09:00
core Retry internet connections if all nodes disconnected 2016-09-25 20:17:26 +09:00
docs Added bachelor thesis 2016-08-26 17:37:14 +02:00
gradle Updated dependencies. 2016-01-27 21:23:09 +01:00
graphics Fixed screenshot size 2016-08-27 01:51:08 +02:00
integration Uncommented integration test code 2016-09-24 18:51:02 +09:00
server Bumped version to 0.5.2 2016-09-28 12:02:09 +09:00
.gitignore Added .apk files to .gitignore. 2016-01-25 22:47:20 +01:00
LICENSE Changed license to MPLv2 (fixes #47) 2016-08-27 02:00:15 +02:00
PROTOCOL.md Allow adding other device by address, auto request public key 2016-09-13 01:48:58 +02:00
README.md Change description to mention end-to-end encryption (ref #52) 2016-09-30 12:39:10 +09:00
build.gradle Removed maven central repository 2016-09-27 10:44:30 +09:00
gradlew Initial commit. 2014-10-03 12:55:35 +03:00
gradlew.bat Initial commit. 2014-10-03 12:55:35 +03:00
settings.gradle Implemented AODVv2, including integration test (fixes #33). 2016-05-29 18:35:50 +02:00

README.md

Ensichat

Instant messenger for Android that is fully decentralized, and uses strong end-to-end encryption. Messages are sent directly between devices via Bluetooth or Internet, without any central server. Relay nodes are used to ensure message delivery, even if the target node is offline.

For details on how Ensichat works, you can check out my bachelor thesis, and read the protocol definition.

screenshot 1 screenshot 2 screenshot 3

Get it on Google Play Get it on F-Droid

To set up a server, please follow the instructions on the wiki.

Building

To setup a development environment, just install Android Studio and import the project.

Alternatively, you can use the command line. To create a debug apk, run ./gradlew assembleDevDebug. This requires at least Android Lollipop on your development device. If you don't have 5.0 or higher, you have to use ./gradlew assembleRelDebug. However, this results in considerably slower incremental builds. To create a release apk, run ./gradlew assembleRelRelease.

Testing

You can run the unit tests with ./gradlew test. After connecting an Android device, you can run the Android tests with ./gradlew connectedDevDebugAndroidTest (or ./gradlew connectedRelDebugAndroidTest if your Android version is lower than 5.0).

To run integration tests for the core module, use ./gradlew integration:run. If this fails (or is very slow), try changing the value of Crypto#PublicKeySize to 512 (in the core module).

License

The project is licensed under the MPLv2.

The launcher icon is based on the Bubbles Icon created by Paomedia which is available under CC BY 3.0.