bip39

BIP39 mnemonic codes in Haskell (docs.ppad.tech/bip39).
git clone git://git.ppad.tech/bip39.git
Log | Files | Refs | README | LICENSE

commit c4f2e85ab52aca49460bd3bd261bf4e9e94061ca
parent 0f9aa55cd8cbe342b66ec2891bbee5cb7ca9c233
Author: Jared Tobin <jared@jtobin.io>
Date:   Fri, 20 Jun 2025 17:48:08 +0400

meta: update docs

Diffstat:
MREADME.md | 20+++++++++-----------
Mlib/Crypto/KDF/BIP39.hs | 6+++---
2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md @@ -86,23 +86,21 @@ security@ppad.tech. 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-bip39/mnemonic - time 4.222 μs (4.055 μs .. 4.380 μs) - 0.992 R² (0.990 R² .. 0.995 R²) - mean 4.220 μs (4.118 μs .. 4.332 μs) - std dev 366.1 ns (318.3 ns .. 427.9 ns) - variance introduced by outliers: 84% (severely inflated) + time 1.986 μs (1.982 μs .. 1.988 μs) + 1.000 R² (1.000 R² .. 1.000 R²) + mean 1.973 μs (1.969 μs .. 1.978 μs) + std dev 13.61 ns (12.14 ns .. 15.64 ns) benchmarking ppad-bip39/seed - time 12.91 ms (12.64 ms .. 13.35 ms) - 0.994 R² (0.989 R² .. 0.997 R²) - mean 12.87 ms (12.62 ms .. 13.16 ms) - std dev 699.8 μs (568.8 μs .. 938.4 μs) - variance introduced by outliers: 25% (moderately inflated) + time 7.017 ms (7.008 ms .. 7.027 ms) + 1.000 R² (1.000 R² .. 1.000 R²) + mean 7.010 ms (7.006 ms .. 7.015 ms) + std dev 13.95 μs (11.37 μs .. 18.55 μs) ``` ## Development diff --git a/lib/Crypto/KDF/BIP39.hs b/lib/Crypto/KDF/BIP39.hs @@ -140,7 +140,7 @@ words wlist bs = L.unfoldr coalg (bs, 0, 0) where -- >>> let mnem = "coral maze mimic half fat breeze thought club give brass bone snake" -- >> let pass = "hunter2" -- >>> seed mnem pass --- <512-bit long seed> +-- Just <512-bit long seed> seed :: T.Text -- ^ mnemonic -> T.Text -- ^ passphrase (use e.g. "" or 'mempty' if not required) @@ -156,7 +156,7 @@ seed = _seed english -- >>> let mnem = "coral maze mimic half fat breeze thought club give brass bone snake" -- >> let pass = "hunter2" -- >>> _seed english mnem pass --- <512-bit long seed> +-- Just <512-bit long seed> _seed :: Wordlist -- ^ wordlist -> T.Text -- ^ mnemonic @@ -177,7 +177,7 @@ _seed wlist mnem pass = do -- >>> let mnem = "coral maze mimic half fat breeze thought club give brass bone snake" -- >> let pass = "hunter2" -- >>> seed_unsafe mnem pass --- <512-bit long seed> +-- Just <512-bit long seed> seed_unsafe :: T.Text -- ^ mnemonic -> T.Text -- ^ passphrase (use e.g. "" or 'mempty' if not required)