hkdf

Pure Haskell HMAC-based KDF (docs.ppad.tech/hkdf).
git clone git://git.ppad.tech/hkdf.git
Log | Files | Refs | README | LICENSE

commit 6091e423277423f574674649ed32ec640db8433d
parent 93aaf3eafad677087ffbea6fc5c24a63cb9651ea
Author: Jared Tobin <jared@jtobin.io>
Date:   Sat, 21 Jun 2025 15:17:59 +0400

release: v0.3.0

Diffstat:
MCHANGELOG | 4++++
MREADME.md | 18++++++++----------
Mflake.lock | 24++++++++++++------------
Mppad-hkdf.cabal | 2+-
4 files changed, 25 insertions(+), 23 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG @@ -1,5 +1,9 @@ # Changelog +- 0.3.0 (2025-06-21) + * The 'derive' function is now total, returning 'Nothing' when + supplied with bad inputs. + - 0.2.1 (2025-02-24) * Merely swaps out the base16 library used for the Wycheproof tests (in favour of ppad-base16). diff --git a/README.md b/README.md @@ -34,23 +34,21 @@ Haddocks (API documentation, etc.) are hosted at The aim is best-in-class performance for pure, highly-auditable Haskell code. -Current benchmark figures on my mid-2020 MacBook Air look like (use +Current benchmark figures on an M4 Silicon MacBook Air look like (use `cabal bench` to run the benchmark suite): ``` benchmarking ppad-hkdf/HKDF-SHA256/derive (outlen 32) - time 12.69 μs (12.58 μs .. 12.84 μs) - 0.999 R² (0.999 R² .. 1.000 R²) - mean 12.82 μs (12.75 μs .. 12.89 μs) - std dev 231.0 ns (190.1 ns .. 299.9 ns) - variance introduced by outliers: 16% (moderately inflated) + time 6.787 μs (6.780 μs .. 6.792 μs) + 1.000 R² (1.000 R² .. 1.000 R²) + mean 6.774 μs (6.769 μs .. 6.778 μs) + std dev 16.89 ns (14.95 ns .. 19.57 ns) benchmarking ppad-hkdf/HKDF-SHA512/derive (outlen 32) - time 12.24 μs (12.16 μs .. 12.31 μs) + time 7.014 μs (7.007 μs .. 7.019 μs) 1.000 R² (1.000 R² .. 1.000 R²) - mean 12.27 μs (12.22 μs .. 12.32 μs) - std dev 172.4 ns (131.6 ns .. 246.5 ns) - variance introduced by outliers: 11% (moderately inflated) + mean 7.003 μs (6.999 μs .. 7.008 μs) + std dev 16.60 ns (13.60 ns .. 20.14 ns) ``` ## Security diff --git a/flake.lock b/flake.lock @@ -51,11 +51,11 @@ ] }, "locked": { - "lastModified": 1739979569, - "narHash": "sha256-omEcmgzRlzIE5Vdty0/SskEcR2f7OtcHzGFE4i1dI60=", + "lastModified": 1741625558, + "narHash": "sha256-ZBDXRD5fsVqA5bGrAlcnhiu67Eo50q0M9614nR3NBwY=", "ref": "master", - "rev": "4439e0efafbb5185bd7d9bfb352a17c2a31b96b4", - "revCount": 15, + "rev": "fb63457f2e894eda28250dfe65d0fcd1d195ac2f", + "revCount": 24, "type": "git", "url": "git://git.ppad.tech/base16.git" }, @@ -102,11 +102,11 @@ ] }, "locked": { - "lastModified": 1737298572, - "narHash": "sha256-iAo6GFH1FLNi0wt0FczbqPCmVzCm9gfMEjk1oakExt0=", + "lastModified": 1740802974, + "narHash": "sha256-GTD9UrxwMa5zY7hxzDSXjKXKUwMK4r3FBHLG0nvgapk=", "ref": "master", - "rev": "abc984dc65f0df9bd958c0bc8f390c68e660f710", - "revCount": 87, + "rev": "ab0957e305dff0243dcab11e381470585849fd20", + "revCount": 94, "type": "git", "url": "git://git.ppad.tech/sha256.git" }, @@ -133,11 +133,11 @@ ] }, "locked": { - "lastModified": 1737298660, - "narHash": "sha256-W8wuLHRH7P5oITCXnxKEEnSD2yX1Qo7uypbxpwKvvM8=", + "lastModified": 1740802979, + "narHash": "sha256-6VAXmA1XiIT/WFcP+eFb6uK3YyfgVqIgDv3ASNIoCMs=", "ref": "master", - "rev": "e8ce88cafbf32900556832d3817997642f128242", - "revCount": 21, + "rev": "ff165b29fb21b99749460ae7e3fdca42a85c822b", + "revCount": 28, "type": "git", "url": "git://git.ppad.tech/sha512.git" }, diff --git a/ppad-hkdf.cabal b/ppad-hkdf.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: ppad-hkdf -version: 0.2.1 +version: 0.3.0 synopsis: A HMAC-based key derivation function license: MIT license-file: LICENSE