All work

Secure Messenger

An engineering prototype of a secure messenger core, with no interface. It proves the essentials: a message can’t be read by others, can’t be altered unnoticed and can’t be delivered twice.

Client
Our own project
Type
Prototype, command line
Our part
Cryptography, storage, tests
Year
2026
Secure Messenger

How it works

Each profile has a password and a key pair. Contacts are exchanged as files with a key fingerprint to compare. A message is signed with Ed25519 and encrypted with post-quantum ML-KEM-768 together with ChaCha20-Poly1305. History is kept in SQLite, and the text never sits on disk in the clear.

What it rejects

A replay of a message already received, a message with one flipped bit, a wrong password and an impostor who took the same name with a different key. All of it is shown in the real runs below.

Honest about the limits

This is a prototype: it has no network transport, no forward secrecy and no external audit. It shows how we build a cryptographic core and prove it with tests.

A sealing press for letters

A letter passes the key lock, the envelope sealer and the wax signature stamp. On the receiving side, a feeler at the gate checks the seal and rejects a letter with one broken bit, and a counter stops a replay.

The wax seal: the Ed25519 signature on the sealed letterML-KEM-768 padlock and the sealer: the letter is encryptedFeeler and pins on the receiving side: a bit and a replay are rejectedSecure Messenger CLI 0.1.0: a console prototype in C++20. The profile is password-protected (scrypt) and contacts are exchanged as files with fingerprints. A message is signed with Ed25519 and encrypted with ML-KEM-768, HKDF and ChaCha20-Poly1305 into a .smmsg file of about 1.3 KB; history is kept in SQLite. The receiving side rejects a replay, a single flipped bit, a wrong password and an impostor contact with the same name; this figure shows the first two. It is a prototype: no forward secrecy, no network transport and no audit.

Under the hood

  • C++20, CMake, OpenSSL and SQLite, strict compiler flags and a sanitizer build.
  • Ed25519 for signatures; ML-KEM-768, HKDF and ChaCha20-Poly1305 for encryption.
  • The profile password is hardened with scrypt.
  • About 1,500 lines of code; the program is about 120 KB.
  • Builds for Linux, macOS and Windows.

C++20 · OpenSSL · SQLite · CMake

Shall we talk about your project?

Discuss your project