bip32

Pure Haskell BIP32 hierarchical deterministic wallets (docs.ppad.tech/bip32).
git clone git://git.ppad.tech/bip32.git
Log | Files | Refs | README | LICENSE

commit 948c5e477175306875a5227cfde64bdc0365c739
parent 53bfbd8e4aef90d4a36838de4d05e034c9bff539
Author: Jared Tobin <jared@jtobin.io>
Date:   Mon, 22 Dec 2025 17:40:40 -0330

meta: add llvm flag

Diffstat:
MREADME.md | 34+++++++++++++++++++---------------
Mflake.lock | 80+++++++++++++++++++++++--------------------------------------------------------
Mflake.nix | 16++++++++++++++--
3 files changed, 56 insertions(+), 74 deletions(-)

diff --git a/README.md b/README.md @@ -54,36 +54,40 @@ Current benchmark figures on an M4 Silicon MacBook Air look like (use ``` benchmarking ppad-bip32 (wNAF)/derive_child_pub' - time 184.0 μs (183.9 μs .. 184.2 μs) + time 180.7 μs (180.6 μs .. 180.9 μs) 1.000 R² (1.000 R² .. 1.000 R²) - mean 184.2 μs (184.1 μs .. 184.4 μs) - std dev 502.2 ns (282.7 ns .. 986.8 ns) + mean 180.8 μs (180.6 μs .. 180.9 μs) + std dev 493.6 ns (382.1 ns .. 639.6 ns) benchmarking ppad-bip32 (wNAF)/derive_child_priv' - time 170.4 μs (170.3 μs .. 170.6 μs) + time 167.0 μs (166.8 μs .. 167.2 μs) 1.000 R² (1.000 R² .. 1.000 R²) - mean 170.6 μs (170.5 μs .. 170.7 μs) - std dev 430.8 ns (314.5 ns .. 600.4 ns) + mean 167.0 μs (166.8 μs .. 167.2 μs) + std dev 667.4 ns (488.1 ns .. 925.3 ns) benchmarking ppad-bip32/xpub - time 151.4 μs (151.2 μs .. 151.6 μs) + time 149.6 μs (149.1 μs .. 150.2 μs) 1.000 R² (1.000 R² .. 1.000 R²) - mean 151.1 μs (150.9 μs .. 151.3 μs) - std dev 608.5 ns (449.2 ns .. 919.9 ns) + mean 149.3 μs (149.0 μs .. 149.9 μs) + std dev 1.296 μs (653.2 ns .. 2.117 μs) benchmarking ppad-bip32/xprv - time 8.374 μs (8.363 μs .. 8.386 μs) + time 6.512 μs (6.506 μs .. 6.519 μs) 1.000 R² (1.000 R² .. 1.000 R²) - mean 8.390 μs (8.379 μs .. 8.409 μs) - std dev 47.10 ns (31.45 ns .. 76.90 ns) + mean 6.512 μs (6.507 μs .. 6.520 μs) + std dev 19.72 ns (12.91 ns .. 34.71 ns) benchmarking ppad-bip32/parse - time 8.576 μs (8.573 μs .. 8.580 μs) + time 6.905 μs (6.899 μs .. 6.913 μs) 1.000 R² (1.000 R² .. 1.000 R²) - mean 8.567 μs (8.559 μs .. 8.574 μs) - std dev 25.37 ns (21.07 ns .. 30.30 ns) + mean 6.926 μs (6.919 μs .. 6.933 μs) + std dev 23.14 ns (18.74 ns .. 28.17 ns) ``` +You should compile with the 'llvm' flag (and ensure [ppad-fixed][fixed], +[ppad-sha256][sha256], [ppad-sha512][sha512], and [ppad-secp256k1][secp] +are compiled with the 'llvm' flag) for maximum performance. + ## Security This library aims at the maximum security achievable in a diff --git a/flake.lock b/flake.lock @@ -65,43 +65,6 @@ "url": "git://git.ppad.tech/base16.git" } }, - "ppad-base16_2": { - "inputs": { - "flake-utils": [ - "ppad-secp256k1", - "ppad-hmac-drbg", - "ppad-base16", - "ppad-nixpkgs", - "flake-utils" - ], - "nixpkgs": [ - "ppad-secp256k1", - "ppad-hmac-drbg", - "ppad-base16", - "ppad-nixpkgs", - "nixpkgs" - ], - "ppad-nixpkgs": [ - "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-base58": { "inputs": { "flake-utils": [ @@ -156,11 +119,11 @@ ] }, "locked": { - "lastModified": 1766353466, + "lastModified": 1766362512, "narHash": "sha256-uQ2PW6AuO5ihjQuaedKUjpCzXBNd+yrZWxQl7kz6QwE=", "ref": "master", - "rev": "602f5fbd031106b89b31bea5eddf1c0dc3b07148", - "revCount": 253, + "rev": "703e7e3659198a1ead37cb4b3e6dbcd995b8dd45", + "revCount": 255, "type": "git", "url": "git://git.ppad.tech/fixed.git" }, @@ -184,7 +147,10 @@ "ppad-nixpkgs", "nixpkgs" ], - "ppad-base16": "ppad-base16_2", + "ppad-base16": [ + "ppad-secp256k1", + "ppad-base16" + ], "ppad-nixpkgs": [ "ppad-secp256k1", "ppad-nixpkgs" @@ -199,11 +165,11 @@ ] }, "locked": { - "lastModified": 1750582815, - "narHash": "sha256-m9Ynf6rCAGrGU8bPil2apUC5nwPNfJSkak4GOVPj9ok=", + "lastModified": 1766436802, + "narHash": "sha256-cZBaR5zBpguiusf3/BzjwrMY63FoXDVGuas+e8QyjTc=", "ref": "master", - "rev": "d49f5c7c03c82d4d8321f2932b19160822715ebc", - "revCount": 52, + "rev": "c23408f69f64d41c3d5478801bb16c0603b4e43b", + "revCount": 53, "type": "git", "url": "git://git.ppad.tech/hmac-drbg.git" }, @@ -297,11 +263,11 @@ ] }, "locked": { - "lastModified": 1766355085, - "narHash": "sha256-Kvl8C9GXN6BMgPpahfBF0Emq2BH318McldU1k2L/K0k=", + "lastModified": 1766437039, + "narHash": "sha256-kBWdl/ENxhOxExPIoV7Ie2E3g6NHTuKEsyaOpEPKVUA=", "ref": "master", - "rev": "50faf718771e0577b6ac13f5c7a0391abf1376f7", - "revCount": 215, + "rev": "07e360a0da43053bff65c81f5e992fb37fa4e996", + "revCount": 221, "type": "git", "url": "git://git.ppad.tech/secp256k1.git" }, @@ -331,11 +297,11 @@ ] }, "locked": { - "lastModified": 1750583530, - "narHash": "sha256-elc+wo2v26SW9WWqZ+36nlrEHTCIotUbbPU0eeMaKLc=", + "lastModified": 1766435555, + "narHash": "sha256-ysN0iRuBLSQrgWU3rCFUyq0NvRpug6DTBRZSlWbmI1A=", "ref": "master", - "rev": "282fa90825bbc04c324c58186da473cb380d0fc2", - "revCount": 95, + "rev": "a4c17689cd66e1ef35c667914765cb24c9a4b305", + "revCount": 96, "type": "git", "url": "git://git.ppad.tech/sha256.git" }, @@ -365,11 +331,11 @@ ] }, "locked": { - "lastModified": 1750736173, - "narHash": "sha256-7AGv9HktdslIaVDO8IQUMrcBewmFngHlwqEUaYsI6kw=", + "lastModified": 1766437426, + "narHash": "sha256-vn0nUVrMqux2PorMOZlx3RAqylf88BTw+jRMXC0gIz8=", "ref": "master", - "rev": "ba7757cf61132cf3c3d79960f51ddaf4801f7aec", - "revCount": 30, + "rev": "669c4ffd1cc7826876af2d67661738c2081ea6a9", + "revCount": 31, "type": "git", "url": "git://git.ppad.tech/sha512.git" }, diff --git a/flake.nix b/flake.nix @@ -81,6 +81,18 @@ (hlib.enableCabalFlag fixed "llvm") [ llvm ]; + sha256 = ppad-sha256.packages.${system}.default; + sha256-llvm = + hlib.addBuildTools + (hlib.enableCabalFlag sha256 "llvm") + [ llvm ]; + + sha512 = ppad-sha512.packages.${system}.default; + sha512-llvm = + hlib.addBuildTools + (hlib.enableCabalFlag sha512 "llvm") + [ llvm ]; + secp256k1 = ppad-secp256k1.packages.${system}.default; secp256k1-llvm = hlib.addBuildTools @@ -93,8 +105,8 @@ ppad-fixed = fixed-llvm; ppad-ripemd160 = ppad-ripemd160.packages.${system}.default; ppad-secp256k1 = secp256k1-llvm; - ppad-sha256 = ppad-sha256.packages.${system}.default; - ppad-sha512 = ppad-sha512.packages.${system}.default; + ppad-sha256 = sha256-llvm; + ppad-sha512 = sha512-llvm; ${lib} = new.callCabal2nix lib ./. { ppad-base16 = new.ppad-base16; ppad-base58 = new.ppad-base58;