### v1.3.1 2026-07-14 Paris (France)

- Remove DKML CI (@jonahbeckford, @dinosaure, #159, #160, #161)
- Fix documentation (@kit-ty-kate, @dinosaure, #162)
- Reject bad digest size for BLAKE2 implementation (@samoht, @dinosaure, #166)
- Delete old artifact for MirageOS 3.0 (@dinosaure, @vbgl, #165, #168)
- Be safe aligned on ARM architecture (@dinosaure, @hannesm, #169)

### v1.3.0 2025-04-14 Paris (France)

- Use `CAMLextern` rather than `extern` in `caml_*` forward declarations to
  support bytecode linking on Windows (@jonahbeckford, #157)
- Add `x-maintenance-intent` into OPAM file (@hannesm, #158)
- Implement _feedable_ hmac (@reynir, #155)

### v1.2.0 2024-03-18 Paris (France)

- Update the description to include SHA3 (@Leonidas-from-XIV, #146)
- Add a new type `hash'`, a polymorphic variant (@reynir, @dinosaure, #150)
- Lint `fmt` dependency lower-bound (@reynir, #152)
- Add `get_into_bytes` function and a fuzzer about it (@reynir, @dinosaure, #149)

### v1.1.4 2023-03-23 Paris (France)

- Add a test about CVE-2022-37454 (@dinosaure, #143)
- Lint the distribution and delete the `pkg-config` dependency (@dinosuare, 1eff5c5)
- Fix primitives used for bytes and fix the support of `js_of_ocaml` 5 (@hhugo, #144)

### v1.1.3 2022-10-20 Paris (France)

- Support MSVC compiler (@jonahbeckford, #137)
- Fix CI on Windows (`test_conv.ml` requires `/dev/urandom`) (@dinosaure, #138)
- Fix threads support (@dinosaure, #140)
- Delete the META trick needed for MirageOS 3 when we install `digestif` (@dinosaure, #141)
  This version of `digestif` breaks the compatibility with MirageOS 3
  and `ocaml-freestanding`. This PR should unlock the ability to
  use `dune-cache`.

### v1.1.2 2022-04-08 Paris (France)

- Minor update on the README.md (@punchagan, #133)
- Support only OCaml >= 4.08, update with `ocamlformat.0.21.0` and remove `bigarray-compat`
  dependency (@hannesm, #134)

### v1.1.1 2022-03-28 Paradou (France)

- Hide C functions (`sha3_keccakf`) (@hannesm, #125)
- Use `ocaml` to run `install.ml` instead of a shebang (@Nymphium, #127)
- Use `command -v` instead of `which` (@Numphium, #126)
- Add `@since` meta-data in documentation (@c-cube, @dinosaure, #128)
- Update the README.md (@dinosaure, @mimoo, #130)
- `ocaml-solo5` provides `__ocaml_solo5__` instead of `__ocaml_freestanding__` (@dinosaure, #131)

### v1.1.0 2021-10-11 Paris (France)

- Add Keccak256 module (ethereum padding) (@maxtori, @dinosaure, #118)
- Update README.md to include the documentation (@mimoo, @dinosaure, 65a5c12)
- Remove deprecated function from `fmt` library (@dinosaure, #121)
- **NOTE**: This version lost the support of OCaml 4.03 and OCaml 4.04.

### v1.0.1 2020-02-08 Paris (France)

- Fix `esy` support (@dinosaure, #115)
- Fix big-endian support (@dinosaure, #113)

### v1.0.0 2020-11-02 Paris (France)

- **breaking changes** Upgrade the library with MirageOS 3.9 (new layout of artifacts)
  Add tests about compilation of unikernels (execution and link)
  (#105, @dinosaure, @hannesm)
- Fix `esy` installation (#104, @dinosaure)
- **breaking changes** Better GADT (#103, @dinosaure)
  As far as I can tell, nobody really use this part of `digestif`.
  The idea is to provide a GADT which contains the type of the hash.
  From third-part libraries point-of-view, it's better to _pattern-match_ with
  such information instead to use a polymorphic variant (as before).
- **breaking changes** key used for HMAC is a constant `string` (#101, @dinosaure, @hannesm)
  The key should not follow the same type as the digest value (`string`, `bytes`, `bigstring`).
  This update restricts the user to user only constant key (as a `string`).

### v0.9.0 2020-07-10 Paris (France)

- Add sha3 implementation (#98), @lyrm, @dinosaure, @hannesm and @cfcs

### v0.8.1 2020-06-15 Paris (France)

- Move to `dune.2.6.0` (#97)
- Apply `ocamlformat.0.14.2` (#97)
- Fix tests according `alcotest.1.0.0` (#95)

### v0.8.0 2019-20-09 Saint Louis (Sénégal)

- Fake version to prioritize dune's variants instead of
  old linking trick
- Use `stdlib-shims` to keep compatibility with < ocaml.4.07.0

### v0.7.3 2019-07-09 Paris (France)

- Fix bug about specialization of BLAKE2{B,S} (#85, #86)
  reported by @samoht, fixed by @dinosaure, reviewed by @hannes and @cfcs

### v0.7.2 2019-05-16 Paris (France)

- Add conflict with `< mirage-xen-posix.3.1.0` packages (@hannesm)
- Add a note on README.md about the linking-trick and order of dependencies (@rizo)
- Use experimental feature of variants with `dune` (@dinosaure, review @rgrinberg)

  `digestif` requires at least `dune.1.9.2`

### v0.7.1 2018-11-15 Paris (France)

- Cross compilation adjustments (@hannesm) (# 76)
- Add the WHIRLPOOL hash algorithm (@clecat) (#77)
- Backport fix on opam file (@dinosaure, @kit-ty-kate)

### v0.7 2018-10-15 Paris (France)

- Fixed HMAC on BLAKE2{S,B} (@emillon) (#46, #51)
- Fixed `convenient_of_hex` (@dinosaure, @hannesm, @cfcs) (#55)
- Add `of_raw_string`/`to_raw_string` (@samoht) (#57)
- Test `digestif` on solo5 and xen backends (@samoht)
- *breaking change*, commont type `t` is an abstract type (#58, #56)
- Fixed META file (@dinosaure, @g2p) (#75)
- New dependency `eqaf` (@dinosaure, @cfcs, @hannesm) (constant-time equal function) (#33, #34, #48, #50, #52, #65)
- Remove `Obj.magic` in common implementation (@dinosaure, @samoht) (#61, #62)
- Add conveniences functions in common implementation (@hcarty) (#63)
- Add option-returning functions in common implementation (@harcty) (#63)
- Verify length of string on `of_raw_string` function (@hcarty) (#63)
- Release runtime lock (@andersfugmann, @dinosaure, @cfcs) (#69, #70)
- Bounds check (@cfcs, @dinosaure) (#71, #72)
- Fixed linking problem (@andersfugmann, @g2p, @dinosaure) (#49, #53, #73, #74)
- Update OPAM file (@dinosaure)

### v0.6.1 2018-07-24 Paris (France)

- *breaking change* API: Digestif implements a true linking trick. End-user need
  to explicitely link with `digestif.{c,ocaml}` and it needs to be the first of
  your dependencies.
- move to `jbuilder`/`dune`

### v0.6 2018-07-05 Paris (France)

- *breaking change* API:
  From a consensus between people who use `digestif`, we decide to delete `*.Bytes.*` and `*.Bigstring.*` sub-modules.
  We replace it by `feed_{bytes,string,bigstring}` (`digest_`, and `hmac_` too)
- *breaking change* semantic: streaming and referentially transparent
  Add `feedi_{bytes,string,bigstring}`, `digesti_{bytes,string,bigstring}` and `hmaci_{bytes,string,bigstring}`
  (@hannesm, @cfcs)
- Constant time for `eq`/`neq` functions
  (@cfcs)
- *breaking change* semantic on `compare` and `unsafe_compare`:
  `compare` is not a lexicographical comparison function (rename to `unsafe_compare`)
  (@cfcs)
- Add `consistent_of_hex` (@hannesm, @cfcs)

### v0.4 2017-10-30 Mysore / ಮೈಸೂರು (India)

- Add an automatised test suit
- Add the RIPEMD160 hash algorithm
- Add the BLAKE2S hash algorithm
- Update authors
- Add `feed_bytes` and `feed_bigstring` for `Bytes` and `Bigstring`

### v0.3 2017-07-21 Phnom Penh (Cambodia)

- Fixed issue #6
- Make a new test suit

### v0.2 2017-07-05 Phnom Penh (Cambodia)

- Implementation of the hash function in pure OCaml
- Link improvement (à la `mtime`) to decide to use the C stub or the OCaml implementation
- Improvement of the common interface (pretty-print, type t, etc.)

### v0.1 2017-05-12 Rạch Giá (Vietnam)

- First release
