1
0
Fork 0
Experimental mTLS alternative
  • D 87%
  • C 10.9%
  • Makefile 2.1%
Find a file
2026-04-28 17:46:48 +01:00
src Replace put() with ~= 2026-04-28 17:46:48 +01:00
.gitignore Relicense under GPLv3 2026-04-19 20:45:12 +01:00
COPYING Relicense under GPLv3 2026-04-19 20:45:12 +01:00
Makefile Enable contracts for RELEASE builds 2026-04-28 17:34:30 +01:00
README.md Update README to reflect licensing change 2026-04-19 20:52:24 +01:00

LibreShield is an experimental alternative to mTLS for secure communication across untrusted networks. It features post-quantum cryptography (PQC), perfect forward secrecy and anti-replay protection. LibreShield can be used with any transport layer protocol, provided that streams are reliable and in-order.

Examples

Generating an identity:

JSONValue cert;
JSONValue identity;
libreshield.generateIdentity(identity, cert);

Creating a session:

libreshield.Session client;
libreshield.Session server;
scope(exit) client.erase();
scope(exit) server.erase();

client.load(clientIdentity, serverCert);
server.load(serverIdentity, clientCert);

ubyte[] clientHello = client.clientHandshake();
ubyte[] serverHello = server.serverHandshake(clientHello);
client.clientStart(serverHello);
server.serverStart();

Exchanging messages:

ubyte[] clientMessage = cast(ubyte[]) "Hello from client!";
ubyte[] serverMessage = cast(ubyte[]) "Hello from server!";
c1 = client.seal(clientMessage);
c2 = server.seal(serverMessage);
assert(client.unseal(c2) == serverMessage);
assert(server.unseal(c1) == clientMessage);

Cryptography

Identities use a hybrid combination of ed25519 and ML-DSA-65. Key exchange uses a hybrid combination of ECDH (X25519) and KEM (ML-KEM-768). Messages are encrypted using XChaCha20-Poly1305.

Guidance and limitations

LibreShield has not undergone a security audit; exercise caution.

LibreShield provides mutual authentication and transport security, but it does not hide the identities of the communicating parties. If your threat model requires this, you would be better served by mTLS 1.3 or a protocol based on Noise.

If you are defining a new protocol, you should consider compressing your plaintexts (e.g. with zstd) prior to encryption. You should also consider the use of a messaging library (e.g. ZeroMQ).

Compatibility

LibreShield should work correctly on systems which implement 64-bit (LP64) POSIX or POSIX-oriented standards. However, the Makefile (which builds the module and the test suite) is currently configured for GNU/Linux on amd64.

Build

To build the module and the test suite, the following dependencies are required:

  • the GNU D compiler
  • GNU Make
  • libsodium
  • liboqs

then run:

make prepare && make

Report a bug

Report bugs directly to hello@indraj.net.

For security bugs, please allow up to 48 hours for a reply and up to 90 days for the issue(s) to be confirmed and fixed before disclosing them publicly.

License

LibreShield is licensed under the GNU General Public License version 3 or later.