All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Changed
sas_verify_mac/4now returns{:error, reason}with a binaryreasonnaming the specific failure ("bad_mac"for a MAC mismatch,"bad_tag"for an undecodable tag,"bad_*_utf8"for non-UTF-8 args) instead of the catch-all{:error, :bad_message}. This makes SAS MAC-interop failures diagnosable (tag base64-decode vs an actual MAC mismatch).verify_ed25519/3is unchanged and still returns{:error, :bad_message}.- Upgraded the bundled
vodozemacRust crate0.9→0.10. The Elixir NIF API is unchanged; internal adaptations to 0.10's breaking changes:- Olm sessions now use
SessionConfig::version_1(0.10 movedversion_2behind an experimental feature flag and defaults to v1). Existing v2-pickled sessions still unpickle and operate normally — the config travels with each pickle, so no migration is required. Account::create_inbound_sessionnow takes aSessionConfigargument.Account::create_outbound_session,Session::encrypt, andCurve25519SecretKey::diffie_hellmanare now fallible; the NIF returns{:error, ...}(outbound_session_failed/encrypt_failed/ecdh_failed) instead of panicking on the rare contributory-behaviour failure.- 0.10 makes strict Ed25519 signature verification mandatory (the
strict-signaturesfeature was removed); honestly-generated signatures are unaffected.
- Olm sessions now use
[0.1.5] - 2026-05-13
Fixed
- Package the precompiled
.soinside the tarball with the same suffixed filenamerustler_precompileddlopens at load time (libvodozemac_nif-v<ver>-nif-<nif>-<target>.so). 0.1.4 packed it as the bare cargo output name (libvodozemac_nif.so), so:erl_tar.extractproduced a file at the wrong path and@on_loadfailed with "no such file". 0.1.4 is unusable; consumers must move directly to 0.1.5.
[0.1.4] - 2026-05-13
Added
- Precompiled NIF artifacts for
aarch64-apple-darwin,x86_64-apple-darwin,aarch64-unknown-linux-gnu,x86_64-unknown-linux-gnu, andx86_64-unknown-freebsd. Consumers on these targets no longer need a Rust toolchain onmix deps.get.
Fixed
- Set a
User-Agentheader on NIF downloads. sr.ht sits behind thego-awayanti-scraper proxy, which 403s any request with an empty UA — Erlang's:httpc(used byrustler_precompiled) sends none by default, so 0.1.2/0.1.3 consumers would have hit the proxy.
[0.1.0] - 2026-05-13
Added
- Initial public release: Olm + Megolm primitives for Matrix
end-to-end encryption, built on Element's
vodozemac (Rust) via
Rustler. Surface covers account / one-time-keys, inbound and
outbound Megolm group sessions, Olm pairwise sessions, raw Ed25519
- Curve25519 helpers, and SAS short-authentication-string verification.
Known limitations
- Source-only release. Consumers need a Rust toolchain
(
rustup install stable) onmix deps.get; the NIF compiles from source via Rustler. Precompiled binaries for the four major macOS + Linux targets are scheduled for 0.1.1. - Pickle bytes are wrapped with vodozemac's default zero-key — no
confidentiality at rest. Callers must apply their own at-rest
encryption until a
pickle_keyparameter lands in a later release.