bip39

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

commit e86efa2247adba15e2901b13811237536763c6f2
parent 98a9dbfe67d86019d971b5fc7d732702c75360ba
Author: Jared Tobin <jared@jtobin.io>
Date:   Sun, 21 Dec 2025 20:13:55 -0330

meta: add llvm flag, update flake/lockfile

Diffstat:
Mflake.lock | 156++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
Mflake.nix | 15++++++++++++---
Mppad-bip39.cabal | 7+++++++
3 files changed, 146 insertions(+), 32 deletions(-)

diff --git a/flake.lock b/flake.lock @@ -68,6 +68,46 @@ "ppad-base16_2": { "inputs": { "flake-utils": [ + "ppad-bip32", + "ppad-secp256k1", + "ppad-hmac-drbg", + "ppad-base16", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-bip32", + "ppad-secp256k1", + "ppad-hmac-drbg", + "ppad-base16", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-nixpkgs": [ + "ppad-bip32", + "ppad-secp256k1", + "ppad-hmac-drbg", + "ppad-nixpkgs" + ] + }, + "locked": { + "lastModified": 1741625558, + "narHash": "sha256-ZBDXRD5fsVqA5bGrAlcnhiu67Eo50q0M9614nR3NBwY=", + "ref": "master", + "rev": "fb63457f2e894eda28250dfe65d0fcd1d195ac2f", + "revCount": 24, + "type": "git", + "url": "git://git.ppad.tech/base16.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/base16.git" + } + }, + "ppad-base16_3": { + "inputs": { + "flake-utils": [ "ppad-pbkdf", "ppad-base16", "ppad-nixpkgs", @@ -113,6 +153,10 @@ "ppad-nixpkgs", "nixpkgs" ], + "ppad-base16": [ + "ppad-bip32", + "ppad-base16" + ], "ppad-nixpkgs": [ "ppad-bip32", "ppad-nixpkgs" @@ -123,11 +167,11 @@ ] }, "locked": { - "lastModified": 1750500456, - "narHash": "sha256-9N1EzWyT4QknMjRvE+RUjs1klOxvTlU5vRl+mzDKZfE=", + "lastModified": 1750582288, + "narHash": "sha256-scwPuowiX2/+o4cgxEtmKTZjpSi/E9IMX72aKB3ylkk=", "ref": "master", - "rev": "f40766056e463a82a06eec66d7b08cba1dbcf2d4", - "revCount": 28, + "rev": "e36b0a81145b163bdf103d43e31392b272417cbe", + "revCount": 29, "type": "git", "url": "git://git.ppad.tech/base58.git" }, @@ -153,6 +197,7 @@ "ppad-base16" ], "ppad-base58": "ppad-base58", + "ppad-fixed": "ppad-fixed", "ppad-nixpkgs": [ "ppad-nixpkgs" ], @@ -166,11 +211,11 @@ ] }, "locked": { - "lastModified": 1750503912, - "narHash": "sha256-AZO1atA3iUyv/t05S8JC31NdBefoKdVga1AyhBGDShE=", + "lastModified": 1766360190, + "narHash": "sha256-aZh7oXi/nE6/Ft0aE6Y6rdoUWqcv5lE8J3ocrd/oR98=", "ref": "master", - "rev": "1917afc9f432e2c32c964635ff2348075a675d38", - "revCount": 46, + "rev": "f38feccb2b38aa6f3108a13c58b5d3195272a843", + "revCount": 53, "type": "git", "url": "git://git.ppad.tech/bip32.git" }, @@ -180,6 +225,40 @@ "url": "git://git.ppad.tech/bip32.git" } }, + "ppad-fixed": { + "inputs": { + "flake-utils": [ + "ppad-bip32", + "ppad-fixed", + "ppad-nixpkgs", + "flake-utils" + ], + "nixpkgs": [ + "ppad-bip32", + "ppad-fixed", + "ppad-nixpkgs", + "nixpkgs" + ], + "ppad-nixpkgs": [ + "ppad-bip32", + "ppad-nixpkgs" + ] + }, + "locked": { + "lastModified": 1766353466, + "narHash": "sha256-uQ2PW6AuO5ihjQuaedKUjpCzXBNd+yrZWxQl7kz6QwE=", + "ref": "master", + "rev": "602f5fbd031106b89b31bea5eddf1c0dc3b07148", + "revCount": 253, + "type": "git", + "url": "git://git.ppad.tech/fixed.git" + }, + "original": { + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/fixed.git" + } + }, "ppad-hmac-drbg": { "inputs": { "flake-utils": [ @@ -196,6 +275,7 @@ "ppad-nixpkgs", "nixpkgs" ], + "ppad-base16": "ppad-base16_2", "ppad-nixpkgs": [ "ppad-bip32", "ppad-secp256k1", @@ -213,11 +293,11 @@ ] }, "locked": { - "lastModified": 1740802952, - "narHash": "sha256-rYWQAzoXmxWQqBA2iPiRkSnb3xDjDt5aq3Fe0UyoS38=", + "lastModified": 1750582815, + "narHash": "sha256-m9Ynf6rCAGrGU8bPil2apUC5nwPNfJSkak4GOVPj9ok=", "ref": "master", - "rev": "567288a1f3a558a69a6ee10a26e44f00310692f9", - "revCount": 51, + "rev": "d49f5c7c03c82d4d8321f2932b19160822715ebc", + "revCount": 52, "type": "git", "url": "git://git.ppad.tech/hmac-drbg.git" }, @@ -259,7 +339,7 @@ "ppad-nixpkgs", "nixpkgs" ], - "ppad-base16": "ppad-base16_2", + "ppad-base16": "ppad-base16_3", "ppad-nixpkgs": [ "ppad-nixpkgs" ], @@ -299,17 +379,21 @@ "ppad-nixpkgs", "nixpkgs" ], + "ppad-base16": [ + "ppad-bip32", + "ppad-base16" + ], "ppad-nixpkgs": [ "ppad-bip32", "ppad-nixpkgs" ] }, "locked": { - "lastModified": 1740802961, - "narHash": "sha256-sEW9RGhoWs8BmsQ+FHowMaWgSEjJc68qB7Bg33c0yKw=", + "lastModified": 1750583200, + "narHash": "sha256-nVW/anVOzCiMcRmqQlbmT0LRmT6XjCKSH6DxubhL/sI=", "ref": "master", - "rev": "d703a7a58bad51f8271cfb9b1731e37c05202eeb", - "revCount": 26, + "rev": "84eaa4264fe5e638004ea42d2dedbc2d12b1df91", + "revCount": 27, "type": "git", "url": "git://git.ppad.tech/ripemd160.git" }, @@ -333,6 +417,14 @@ "ppad-nixpkgs", "nixpkgs" ], + "ppad-base16": [ + "ppad-bip32", + "ppad-base16" + ], + "ppad-fixed": [ + "ppad-bip32", + "ppad-fixed" + ], "ppad-hmac-drbg": "ppad-hmac-drbg", "ppad-nixpkgs": [ "ppad-bip32", @@ -348,11 +440,11 @@ ] }, "locked": { - "lastModified": 1750503268, - "narHash": "sha256-DYpCW4dfqLTyV2ACFVH8gzKl1PNYYxcg6xfgT5aWBfg=", + "lastModified": 1766355085, + "narHash": "sha256-Kvl8C9GXN6BMgPpahfBF0Emq2BH318McldU1k2L/K0k=", "ref": "master", - "rev": "6b6e784010ba5b6ddb938e62a90eccb07bf5a3fb", - "revCount": 173, + "rev": "50faf718771e0577b6ac13f5c7a0391abf1376f7", + "revCount": 215, "type": "git", "url": "git://git.ppad.tech/secp256k1.git" }, @@ -374,16 +466,19 @@ "ppad-nixpkgs", "nixpkgs" ], + "ppad-base16": [ + "ppad-base16" + ], "ppad-nixpkgs": [ "ppad-nixpkgs" ] }, "locked": { - "lastModified": 1740802974, - "narHash": "sha256-GTD9UrxwMa5zY7hxzDSXjKXKUwMK4r3FBHLG0nvgapk=", + "lastModified": 1750583530, + "narHash": "sha256-elc+wo2v26SW9WWqZ+36nlrEHTCIotUbbPU0eeMaKLc=", "ref": "master", - "rev": "ab0957e305dff0243dcab11e381470585849fd20", - "revCount": 94, + "rev": "282fa90825bbc04c324c58186da473cb380d0fc2", + "revCount": 95, "type": "git", "url": "git://git.ppad.tech/sha256.git" }, @@ -405,16 +500,19 @@ "ppad-nixpkgs", "nixpkgs" ], + "ppad-base16": [ + "ppad-base16" + ], "ppad-nixpkgs": [ "ppad-nixpkgs" ] }, "locked": { - "lastModified": 1740802979, - "narHash": "sha256-6VAXmA1XiIT/WFcP+eFb6uK3YyfgVqIgDv3ASNIoCMs=", + "lastModified": 1750736173, + "narHash": "sha256-7AGv9HktdslIaVDO8IQUMrcBewmFngHlwqEUaYsI6kw=", "ref": "master", - "rev": "ff165b29fb21b99749460ae7e3fdca42a85c822b", - "revCount": 28, + "rev": "ba7757cf61132cf3c3d79960f51ddaf4801f7aec", + "revCount": 30, "type": "git", "url": "git://git.ppad.tech/sha512.git" }, diff --git a/flake.nix b/flake.nix @@ -27,12 +27,14 @@ url = "git://git.ppad.tech/sha256.git"; ref = "master"; inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; + inputs.ppad-base16.follows = "ppad-base16"; }; ppad-sha512 = { type = "git"; url = "git://git.ppad.tech/sha512.git"; ref = "master"; inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; + inputs.ppad-base16.follows = "ppad-base16"; }; ppad-pbkdf = { type = "git"; @@ -58,10 +60,17 @@ pkgs = import nixpkgs { inherit system; }; hlib = pkgs.haskell.lib; + llvm = pkgs.llvmPackages_15.llvm; + + bip32 = ppad-bip32.packages.${system}.default; + bip32-llvm = + hlib.addBuildTools + (hlib.enableCabalFlag bip32 "llvm") + [ llvm ]; hpkgs = pkgs.haskell.packages.ghc981.extend (new: old: { ${lib} = old.callCabal2nixWithOptions lib ./. "--enable-profiling" {}; - ppad-bip32 = ppad-bip32.packages.${system}.default; + ppad-bip32 = bip32-llvm; ppad-base16 = ppad-base16.packages.${system}.default; ppad-sha256 = ppad-sha256.packages.${system}.default; ppad-sha512 = ppad-sha512.packages.${system}.default; @@ -83,10 +92,9 @@ buildInputs = [ cabal cc + llvm ]; - inputsFrom = builtins.attrValues self.packages.${system}; - doBenchmark = true; shellHook = '' @@ -95,6 +103,7 @@ echo "cc: $(${cc}/bin/cc --version)" echo "ghc: $(${ghc}/bin/ghc --version)" echo "cabal: $(${cabal}/bin/cabal --version)" + echo "llc: $(${llvm}/bin/llc --version | head -2 | tail -1)" ''; }; } diff --git a/ppad-bip39.cabal b/ppad-bip39.cabal @@ -26,6 +26,11 @@ description: [BIP39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) mnemonic codes for deterministic key generation. +flag llvm + description: Use GHC's LLVM backend. + default: False + manual: True + source-repository head type: git location: git.ppad.tech/bip39.git @@ -35,6 +40,8 @@ library hs-source-dirs: lib ghc-options: -Wall + if flag(llvm) + ghc-options: -fllvm -O2 exposed-modules: Crypto.KDF.BIP39 build-depends: