Overview of mautrix-signal
mastermautrix-signal is a Matrix-Signal puppeting bridge. It allows users to interact with Signal through the Matrix protocol.
For detailed setup and usage instructions, refer to the official documentation at docs.mau.fi.
repository·master·Indexed 23 days ago
https://github.com/d99kris/nchatA terminal-based multi-protocol messaging client supporting Telegram, WhatsApp, and Signal. The project includes Duchat, a dummy chat protocol for development and testing, and integrates several C++ libraries including Apathy for path manipulation, cereal for serialization, Clip for cross-platform clipboard interaction, and sqlite_modern_cpp for SQLite database management.
mautrix-signal is a Matrix-Signal puppeting bridge. It allows users to interact with Signal through the Matrix protocol.
For detailed setup and usage instructions, refer to the official documentation at docs.mau.fi.
tdlib located in the ext/td directory. Tgchat is enabled by default in standard nchat builds.stb libraries. If public disclosure of vulnerabilities poses an unreasonable risk to your project, do not use these libraries.whatsmeow is a Go library designed to interface with the WhatsApp web multidevice API. It allows developers to automate WhatsApp interactions such as sending/receiving messages, managing groups, and handling app state.
Core capabilities include:
Note: Broadcast list messages and calls are currently not supported.
Duchat is an implementation of a dummy chat protocol designed specifically for the development and testing of nchat. It allows developers to simulate chat interactions without needing to connect to real messaging services.
Note that Duchat is disabled by default in standard nchat builds and must be explicitly enabled during the build process.
The blockchain is a distributed ledger system used to maintain a consistent state across multiple participants. It manages three primary types of state:
AddUsers, RemoveUsers).Security is enforced through cryptographic signatures, sequential block heights, and state proofs that validate the state after a block is applied.
For most use cases involving languages other than C++, Java, or .NET, it is recommended to use the TDLib JSON interface. This interface is accessible via any language capable of executing C functions.
The JSON interface follows semantic versioning: major versions are binary and backward compatible, but the underlying API may change between minor or patch versions. You can use the version option to ensure compatibility with specific TDLib versions.
All stb libraries are dual-licensed as Public Domain or MIT.
Because they are public domain, you can wrap these libraries in your own software and relicense your new library under any license you choose.
When applying a block, the system performs the following sequential checks. If any check fails, the entire block is rejected:
current_height + 1. Failure returns HEIGHT_MISMATCH.prev_block_hash must match the hash of the last applied block. Failure returns PREVIOUS_BLOCK_HASH_MISMATCH.external_permissions).INVALID_SIGNATURE.state_proof must be valid for the resulting state. Failure returns INVALID_STATE_PROOF.Concurrency: If two blocks are built for the same height, only the first one applied succeeds; the second is rejected with HEIGHT_MISMATCH to prevent forks.
nchat uses a multi-threaded architecture to handle different communication protocols (e.g., Telegram).
RequestMessage objects received via its SendRequest() method.ServiceMessage objects to its message handler. These messages are then processed in a worker thread.uimodel.cpp, while the user interface rendering is managed by the ui*view.cpp files.When developing with the Clip Library, keep the following platform constraints in mind:
size_t) within custom format data, as their size may change.libx11-dev/libX11-devel for text and libpng-dev/libpng-devel for images.To prevent block creators from brute-forcing emojis, a two-phase commit-reveal protocol is used to generate an unpredictable emoji_hash.
Protocol Steps:
nonce and calculates nonce_hash = SHA256(nonce).nonce_hash (signed). The system waits for all participants to commit.nonce (signed). The system verifies SHA256(revealed_nonce) == committed_hash.emoji_hash = HMAC-SHA512(concatenated_sorted_nonces, blockchain_hash).Implementation Details: Participants should only apply messages (including their own) when received from the server to ensure all clients see the same state. This ensures emojis are only displayed once all clients with reasonable connectivity can view them.