Skip to content

deku-messaging/Deku-SMS-Android

Repository files navigation

Deku SMS

Contents

About

Build

Reproducible builds

About

Deku SMS is an Android SMS app.

Deku SMS is being developed as a proof-of-concept for secure SMS messaging, SMS image transmission and SMS-Cloud communications.

The technical functionalities of the app are currently not user friendly, which would be updated with the help of PRs and issues. The reason for the lack of user friendliness is solely based on the app aiming to be as customizable as possible. Users should be able to configure the app to their custom cloud servers without being tied into using specific providers.

Features

End-to-End encryption

Ability to forward incoming messages to cloud server

Ability to use mobile phone as an SMS Gateway to send messages from the cloud

End to End Encryption

Deku SMS supports end to end encryption for users. For the feature to work, both users need to be using Deku SMS as their default SMS app.

The users are guided through a ECDH handshake, after which a secure key is generated and associated with the peers phone number. The outgoing messages are then encrypted with AES-256-CBC from the secure key and transmitted to the user. No forward secrecy is currently implemented.

The users cannot know when their peer has deleted their secured keys. This means messages will still be received by peer in encrypted form. Upcoming features would help inform peers when encryption has been disabled on one end.

All messages are currenly being stored in the default SMS inbox (including encrypted messages). Users switching between SMS apps would still maintain their inbox as it is. Upcoming features would remove encrypted messages to custom database if users intends.

Forward incoming messages to cloud

Forward incoming SMS messages to custom url. The messages remain in queue till the device has an active connection. The messages remain queue if server status codes is in range 5xx. The device also provides visibility into the messages being forwarded into the cloud.

The content being forwarded to your cloud look like:

Android phone as SMS Gateway

You can transmit data from your to your cloud to Android devices, using your Android phones as your SMS Gateway.

The app has direct built configurations for RabbitMQ allowing technical users to configure their own messaging queue directly from their own server.

The structure of the incoming RabbitMQ messages is a json like:

{"sid":"", "id":"", "to":"", "text":""}

sid: special id you can include in the message going to your messaging queue server

id: uniquely generated by messaging queue server - should not be used in determining the status of messages. Primarily used to inform messaging queue server to ack the message.

to: phone number of the receipient. Should be in E.164 Format.

text: the message to be sent to the receipient.

The app sends a callback to your SMS Gateways once the requested message status changes*.

{"type":"SMS_TYPE_STATUS", "status":"[status_changes]()", "sid":""}

* Status changes - sent, delivered, failed

Build

Getting the project into Android-studio would allow for an easy build.

Reproducible builds notes

  • Create a file called ks.passwd at the root of the project.
    This file contains the keystore password for signing the .jks (keystore) file used for signing the apks.
  • Copy your keystore file to apps/keys/app-release-key.jks.

Pending to do

  • For reproducible builds, run make release-docker.
    This handles building 2 instances of the project in Docker containers for isolation. The output apks are signed and compared using diffoscope.

  • https://f-droid.org/docs/Reproducible_Builds/