hmac-drbg

Pure Haskell HMAC-DRBG (docs.ppad.tech/hmac-drbg).
git clone git://git.ppad.tech/hmac-drbg.git
Log | Files | Refs | README | LICENSE

commit 298a9e4eb8f2149c0e04d1b97ee1f4869be65651
parent 57d23beaa8c350af45ac44baf53466ecdc4ed30c
Author: Jared Tobin <jared@jtobin.io>
Date:   Sun,  1 Feb 2026 15:14:33 +0400

lib: update to new sha256, sha512 versions

Diffstat:
Mflake.lock | 24++++++++++++++----------
Mflake.nix | 8+++-----
Mlib/Crypto/DRBG/HMAC/SHA256.hs | 10+++++-----
Mppad-hmac-drbg.cabal | 4++--
4 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/flake.lock b/flake.lock @@ -105,14 +105,18 @@ ] }, "locked": { - "lastModified": 1769922202, - "narHash": "sha256-c4kWgel9W3BBv9R+fwgUGgtfXfE9fJaw9a51zOIOSNY=", - "path": "/Users/jtobin/src/ppad/sha256", - "type": "path" + "lastModified": 1769942235, + "narHash": "sha256-6NlOumhA4BD9Eihfb58mjfueHLM6t3wxpcHAYsntbMg=", + "ref": "master", + "rev": "40792bf33df4582897000fc331a75cc458db9463", + "revCount": 127, + "type": "git", + "url": "git://git.ppad.tech/sha256.git" }, "original": { - "path": "/Users/jtobin/src/ppad/sha256", - "type": "path" + "ref": "master", + "type": "git", + "url": "git://git.ppad.tech/sha256.git" } }, "ppad-sha512": { @@ -135,11 +139,11 @@ ] }, "locked": { - "lastModified": 1768122380, - "narHash": "sha256-edXb64mZPIIsmgZtX2d98QhR6FmXLDh4emThfoufgz0=", + "lastModified": 1769944296, + "narHash": "sha256-uw4EgnM5yQF6LmkkxHY0PJLNko8Wad9aq7GEtacEM3g=", "ref": "master", - "rev": "fd2a1341627c4eaf048613474d4f8e97477f6d09", - "revCount": 44, + "rev": "8fa68ca2fcfc589e7716be9162e2fef52293516a", + "revCount": 48, "type": "git", "url": "git://git.ppad.tech/sha512.git" }, diff --git a/flake.nix b/flake.nix @@ -14,11 +14,9 @@ inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; }; ppad-sha256 = { - # XX for development - url = "path:/Users/jtobin/src/ppad/sha256"; - # type = "git"; - # url = "git://git.ppad.tech/sha256.git"; - # ref = "master"; + type = "git"; + url = "git://git.ppad.tech/sha256.git"; + ref = "master"; inputs.ppad-base16.follows = "ppad-base16"; inputs.ppad-nixpkgs.follows = "ppad-nixpkgs"; }; diff --git a/lib/Crypto/DRBG/HMAC/SHA256.hs b/lib/Crypto/DRBG/HMAC/SHA256.hs @@ -220,7 +220,7 @@ gen_loop drbg k0 v0 bytes = loop mempty v0 0 where write_v drbg v pure acc | otherwise = do - Prim.unsafeIOToPrim $ SHA256.hmac_rr_unsafe vp sp k0 v + Prim.unsafeIOToPrim $ SHA256._hmac_rr vp sp k0 v !(GHC.Word.W32# nv0) <- PA.readPrimArray drbg 10 !(GHC.Word.W32# nv1) <- PA.readPrimArray drbg 11 !(GHC.Word.W32# nv2) <- PA.readPrimArray drbg 12 @@ -262,7 +262,7 @@ update drbg provided_data@(BI.PS _ _ l) = do !kp = PA.mutablePrimArrayContents drbg `FP.plusPtr` 08 -- 2 * 4 !vp = PA.mutablePrimArrayContents drbg `FP.plusPtr` 40 -- 10 * 4 !sp = PA.mutablePrimArrayContents drbg `FP.plusPtr` 72 -- 18 * 4 - Prim.unsafeIOToPrim $ SHA256.hmac_rsb_unsafe kp sp k0 v0 0x00 provided_data + Prim.unsafeIOToPrim $ SHA256._hmac_rsb kp sp k0 v0 0x00 provided_data !(GHC.Word.W32# k10) <- PA.readPrimArray drbg 02 !(GHC.Word.W32# k11) <- PA.readPrimArray drbg 03 !(GHC.Word.W32# k12) <- PA.readPrimArray drbg 04 @@ -272,7 +272,7 @@ update drbg provided_data@(BI.PS _ _ l) = do !(GHC.Word.W32# k16) <- PA.readPrimArray drbg 08 !(GHC.Word.W32# k17) <- PA.readPrimArray drbg 09 let !k1 = Registers (# k10, k11, k12, k13, k14, k15, k16, k17 #) - Prim.unsafeIOToPrim $ SHA256.hmac_rr_unsafe vp sp k1 v0 + Prim.unsafeIOToPrim $ SHA256._hmac_rr vp sp k1 v0 if l == 0 then pure () else do @@ -285,7 +285,7 @@ update drbg provided_data@(BI.PS _ _ l) = do !(GHC.Word.W32# v16) <- PA.readPrimArray drbg 16 !(GHC.Word.W32# v17) <- PA.readPrimArray drbg 17 let !v1 = Registers (# v10, v11, v12, v13, v14, v15, v16, v17 #) - Prim.unsafeIOToPrim $ SHA256.hmac_rsb_unsafe kp sp k1 v1 0x01 provided_data + Prim.unsafeIOToPrim $ SHA256._hmac_rsb kp sp k1 v1 0x01 provided_data !(GHC.Word.W32# k20) <- PA.readPrimArray drbg 02 !(GHC.Word.W32# k21) <- PA.readPrimArray drbg 03 !(GHC.Word.W32# k22) <- PA.readPrimArray drbg 04 @@ -295,7 +295,7 @@ update drbg provided_data@(BI.PS _ _ l) = do !(GHC.Word.W32# k26) <- PA.readPrimArray drbg 08 !(GHC.Word.W32# k27) <- PA.readPrimArray drbg 09 let !k2 = Registers (# k20, k21, k22, k23, k24, k25, k26, k27 #) - Prim.unsafeIOToPrim $ SHA256.hmac_rr_unsafe vp sp k2 v1 + Prim.unsafeIOToPrim $ SHA256._hmac_rr vp sp k2 v1 {-# INLINABLE update #-} init_counter diff --git a/ppad-hmac-drbg.cabal b/ppad-hmac-drbg.cabal @@ -36,8 +36,8 @@ library build-depends: base >= 4.9 && < 5 , bytestring >= 0.9 && < 0.13 - , ppad-sha256 >= 0.3 && < 0.4 - , ppad-sha512 >= 0.2 && < 0.4 + , ppad-sha256 >= 0.3.2 && < 0.4 + , ppad-sha512 >= 0.2.2 && < 0.4 , primitive >= 0.8 && < 0.10 test-suite hmac-drbg-tests