# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.0.0] - 2026-02-16

### Added/Changed since 1.3.0

- MLA2 is now the default; it is **incompatible** with MLA1. MLA1 enters **low maintenance mode**
- Hybrid traditional/post-quantum encryption using **X25519 + ML-KEM1024**
- Archive signing using hybrid traditional/post-quantum signatures
- Switched to **Rust 2024 edition**
- Key commitment support for AES-GCM
- New archive format, enabling improved cryptographic and performance characteristics
- Cryptographic layer reworked to **protect against truncation attacks**
- Redesigned API for improved **simplicity, safety, and stability over time**
- Support for **authenticated truncated archive reading**
- Support for **seeking inside archive entries**
- Comprehensive documentation overhaul
- Published the **MLA Book**, a comprehensive guide and reference for MLA usage and concepts
- Introduced `mlar-upgrader`: a tool to **upgrade MLA1 archives to MLA2 format**
- Bumped dependencies as part of pre-alpha maintenance: `brotli`, `clap`, `rand`, and others via Dependabot (April 2025)
- GitHub Actions workflows updated to **use pinned versions** for CI security
- Minor documentation corrections and CI improvements merged ahead of alpha release
- Added support for a shared-secret decryption advanced use case

### Fixed since 1.3.0

- Fixed incomplete recovery for truncated archives (#226)

### Added/Changed since 2.0.0-beta

- Added a migration guide ( doc/src/MIGRATION.md )
- Improved trust thanks to MLA security assessment (#465)
- Improved release transparency thanks to GitHub artifact attestation and reproducible builds

### Fixed since 2.0.0-beta

- Fixed incomplete memory zeroization (#465)

## [2.0.0-beta] – 2025-12-20

### Added / Changed

**Breaking changes**

- TLV-based options: introduce a TLV structure for `KeyOpts` and archive-level `Opts`
- Key format improvements: support alternative key-format line separators
- Signature compatibility: replace `ed25519ph` usage with `ed25519` for better compatibility

---

- Mark some public items (enum, struct) as non exhaustive to enable future additions without breaking existing code
- Documentation: improved security section and examples; MLA Book and docs refreshed
- CLI and tooling: `mlar` and `mlar-upgrader` enhancements:
  - Optimized read/write
  - Improved error handling
- Build & CI: 
  - Specify toolchain for releases
  - Remove macos-13 x86_64 support due to obsolescence
  - Deliver Windows 7 builds using tier 3 target 
- Dependencies: 
  - Removed unneeded deps (e.g., `humansize`, direct `kem` dependency)
  - Switched `ml-kem` to a maintained version
- Clippy fixes including pedantic mode
- [Advanced use case] HSM / shared-secret decryption: add an option to decrypt archives using a shared secret

### Fixed

- Fix stdin handling as input
- Backported truncated compression-layer fix from v1 where applicable
- Documentation: fix math environment for GFM and KaTeX conversion for GitHub Pages
- Fix `with_encryption_accept_unencrypted` behaviour

## [2.0.0-alpha] – 2025-08-01

### Added/Changed

- MLA2 is now the default; it is **incompatible** with MLA1. MLA1 enters **low maintenance mode**
- Hybrid traditional/post-quantum encryption using **X25519 + ML-KEM1024**
- Archive signing using hybrid traditional/post-quantum signatures
- Switched to **Rust 2024 edition**
- Key commitment support for AES-GCM
- New archive format, enabling improved cryptographic and performance characteristics
- Cryptographic layer reworked to **protect against truncation attacks**
- Redesigned APIs and CLI for improved **simplicity, safety, and semver compatibility**
- Support for **authenticated truncated archive reading**
- Support for **seeking inside archive entries**
- Comprehensive documentation overhaul
- Published the **MLA Book**, a comprehensive guide and reference for MLA usage and concepts
- Introduced `mlar-upgrader`: a tool to **upgrade MLA1 archives to MLA2 format**
- Bumped dependencies as part of pre-alpha maintenance: `brotli`, `clap`, `rand`, and others via Dependabot (April 2025)
- GitHub Actions workflows updated to **use pinned versions** for increased CI/CD security
- Minor documentation corrections and CI improvements merged ahead of alpha release

### Fixed

- Minor doc and CI fixes improving build stability

## [1.4.0] - 2023-10-02

### Added/Changed

- Code cleaning
- Bump dependencies
- Benchmarking: reduce the number of test case per test, add new scenarios
- Explicitly ask for `zeroize` and `static_secrets` feature in `x25519-dalek`

### Fixed

- FailSafe Reader: drastically improve performance
- Fix a Brotli-decompressor regression ([following a minor update](https://github.com/ANSSI-FR/MLA/pull/163)) and add corresponding tests

## [1.3.0] - 2022-08-22

### Thanks

- [Jean-Baptiste Galet](https://github.com/jbgalet)
- [@sashaconway](https://github.com/sashaconway)

### Added/Changed

- Introduce `"send"` feature, to provide `ArchiveWriter` with `Send` bound ([#120](https://github.com/ANSSI-FR/MLA/issues/120))
- Enable `x25519-dalek`'s `"u64_backend"` feature by default, to have a default working compilation
- Bump dependencies
- Dependencies: disable default features
- Code cleaning

### Fixed

- Internalize `StaticSecret` generation, due to [dependency issue](https://github.com/ANSSI-FR/MLA/pull/112)
- Tests: use `rand_chacha::ChaCha8Rng` (reliable accross achitectures) instead of `StdRng`
- Tests: fix a bug [due to a wrong assumption](https://github.com/ANSSI-FR/MLA/pull/112)
- Typo in comments
- CI: testing with different features

## [1.2.0] - 2021-09-28

### Thanks

- [Matthieu Buffet](https://github.com/mtth-bfft)
- [Olivier Dembour](https://github.com/alex-sector)

### Added/Changed

- C/CPP bindings now support partial writes and error codes
- Bump dependencies

## [1.1.1] - 2021-05-31

- Bump dependencies

## [1.1.0] - 2021-01-26

### Thanks

- [Matthieu Buffet](https://github.com/mtth-bfft)

### Added/Changed

- C/CPP bindings (for archive writing), and associated tests
- MLA releases (through the CI), including:
  * `.h` and `.hpp` headers. There are generated, but provided to ease the use of bindings without the Rust toolchain;
  * `libmla.a` for Linux x86-64 bits;
  * `mla.lib` (static), `mla.dll` + `mla.dll.lib` (dynamic), `mla.pdb` (symbols) for Windows i686 and x86_64, in *release* and *debug* targets.

### Fixed

- Force `aes-ctr` and `aes` version, to avoid breaking changes
- Fix [an issue](https://github.com/ANSSI-FR/MLA/issues/63) which may occurs in archive with more than 2^32 bits data

## [1.0.1] - 2020-09-14

### Thanks

- [Jean-Baptiste Galet](https://github.com/jbgalet)

### Added/Changed

- Publish previously internal structures:
  - `ArchiveFooter`
  - `ArchiveHeader`
  - `ArchivePersistentConfig` fields
  - `CompressionLayerReader.sizes_info`
  - `EncryptionPersistentConfig.multi_recipient`
  - `FileInfo`
  - `layers` module
  - `MultiRecipientPersistent`
  - `SizesInfo`
- Bump dependencies:
  - `x25519-dalek`: 0 to 1
- Code cleaning
- Minor memory footprint reduction
- Introduce `MultiRecipientPersistent.count_keys()`: amount of recipients
