Smokey Echo Communications on Android Devices
Smoked with love by textbrowser.
Welcome to Smoke!
Smoke is an open source communications project. The purpose of Smoke is to introduce and investigate the Echo protocol on mobile technologies.
Some of the characteristics of Smoke are summarized below.
- Almost zero-dependency software.
- Automatic, oscillatory public-key exchange protocol, EPKS, via SipHash.
- BSD 3-clause license.
- Decentralized. TCP, and UDP multicast and unicast.
- Does not require Internet connectivity.
- Does not require registration. Telephone numbers are not required.
- Introduces Cryptographic Discovery. Cryptographic Discovery is a practical protocol which creates coordinated data paths.
- Mobile servers via SmokeStack.
- Post offices for messages of the past.
- Public and private public-key servers.
- SSL/TLS through SmokeStack.
- Semi-compatible with Spot-On via Fire.
- Software congestion control.
- Supported on 90% of Android versions.
- Allow new participant names via context menus; Settings::Participants.
- Automatically set the Ozone to the Smoke ID on new installations.
- Blocking socket reads.
- Clear internal messaging log on Chat::Clear.
- Corrected faulty widget listeners in Fire.
- Corrected slight time differences between time stamps in messages destined for SmokeStacks and messages destined for participants.
- Material Design-compliant color selections.
- McEliece parameters m = 12, t = 68. Compatibility with m = 11, t = 50 is preserved.
- New Fiasco Keys column in Settings::Participants.
- Periodically request Ozone messages.
- Removed the superfluous field name from the participants database table.
- Replaced complex if-statements with switch statements.
- Singular member pages. Single image attachments included.
- Uniquely-persistent Fire identities.
- LocalBroadcastManager instances.
- Single ID per Fire.
- Congestion-control improvements.
- Corrected nested locks (isNetworkConnected()).
- Insert-or-throw SQLite database queries.
- The ProgressDialog class has been deprecated. ProgressBars have now been added.
- The replace method may not be available in a hash table; put().
- Attempt socket connections regardless of WiFi availability. Insight.
- Automatically import rosemary-ipv4.tilaa.cloud:4710 on new installations.
- Corrected local echo behavior.
- Echo Fire, if possible!
- Fire Digest Key and Salt fields may not be empty. Corrected.
- Host translation must be performed before every socket connection attempt.
- Large-area congestion-control mutex.
- Partition messages over UDP links into 576-byte datagrams.
- Provide the HMAC algorithm during identity distribution.
- The Call widget should only be enabled if a network is present.
- Wonderful documentation.
- Allow empty Fire participant names.
- Allow purging of neighbor queues.
- Automatic, oscillatory EPKS.
- Avoid non-essential operations if network channels are not available.
- Depict corrupted database entries.
- Enabled Nagle's algorithm.
- Introduced McEliece-Fujisaka via BouncyCastle. Cross-communications supported.
- Minimum password length set to one character.
- New Fire key generation. Destination tags are required for SmokeStack.
- Participant name changes should be reflected in the Chat activity.
- Trim Channel, Digest Key, and Salt values on Fire.
- Fire, or, group communications. Compatible with Spot-On.
- Increased lane widths to 8 MiB.
- Set a non-zero SO_TIMEOUT as some devices do not unblock socket reads after sockets are closed.
- AndroidManifest.xml was missing WakeLock permissions.
- Do not attempt to send duplicate data.
- Do not specify timeouts in socket reads as separate threads are responsible for socket reads.
- Removed all Thread.sleep() instances.
- Replaced StringBuilder Neighbor member with StringBuffer. StringBuffer is thread-safe.
- Signed release.
- WiFi lock.
- Less activity on disconnected neighbors.
- Detect existing key pairs in writeParticipant().
- Smaller database transaction areas.
- Do not automatically purge the temporary identity for offline message retrieval unless some inactive period has elapsed.
- Issue SQLiteDatabase.update() whenever a participant is added. This will allow for replacing of participant names without removal of existing data.
- SmokeStack as a private public key repository.