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 2e8bd8cb41ba2dc7911527676cab7ce58788022f
parent 8b33cd3db75273720aaf02adc66cf3f98ca66c33
Author: Jared Tobin <jared@jtobin.io>
Date:   Wed, 25 Feb 2026 12:08:31 +0400

lib: refactor ser32

Diffstat:
Mlib/Crypto/HDKey/BIP32.hs | 15+++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/lib/Crypto/HDKey/BIP32.hs b/lib/Crypto/HDKey/BIP32.hs @@ -72,7 +72,7 @@ import qualified Crypto.Hash.SHA256 as SHA256 import qualified Crypto.Hash.SHA512 as SHA512 import qualified Crypto.Hash.RIPEMD160 as RIPEMD160 import qualified Crypto.Curve.Secp256k1 as Secp256k1 -import Data.Bits ((.>>.), (.&.)) +import Data.Bits ((.>>.)) import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as B8 import qualified Data.ByteString.Base58Check as B58C @@ -236,13 +236,12 @@ unroll32 (Wider (# w0, w1, w2, w3 #)) = -- serialize a 32-bit word, MSB first ser32 :: Word32 -> BS.ByteString -ser32 w = - let !mask = 0b00000000_00000000_00000000_11111111 - !w0 = fi (w .>>. 24) .&. mask - !w1 = fi (w .>>. 16) .&. mask - !w2 = fi (w .>>. 08) .&. mask - !w3 = fi w .&. mask - in BS.cons w0 (BS.cons w1 (BS.cons w2 (BS.singleton w3))) +ser32 w = BI.unsafeCreate 4 $ \ptr -> do + Storable.pokeByteOff ptr 0 (fi (w .>>. 24) :: Word8) + Storable.pokeByteOff ptr 1 (fi (w .>>. 16) :: Word8) + Storable.pokeByteOff ptr 2 (fi (w .>>. 08) :: Word8) + Storable.pokeByteOff ptr 3 (fi w :: Word8) +{-# INLINABLE ser32 #-} -- extended keys --------------------------------------------------------------