commit de2e199b2f48e3e10fb804a89fabde63163bd12c
parent 41529155f1d85720234136978ab4e5313b472bcc
Author: Jared Tobin <jared@jtobin.io>
Date: Sun, 1 Feb 2026 15:41:18 +0400
lib: add internal module
Diffstat:
4 files changed, 39 insertions(+), 25 deletions(-)
diff --git a/lib/Crypto/DRBG/HMAC/Internal.hs b/lib/Crypto/DRBG/HMAC/Internal.hs
@@ -0,0 +1,33 @@
+{-# OPTIONS_HADDOCK hide #-}
+
+-- |
+-- Module: Crypto.DRBG.HMAC.Internal
+-- Copyright: (c) 2024 Jared Tobin
+-- License: MIT
+-- Maintainer: Jared Tobin <jared@ppad.tech>
+--
+-- Internal HMAC-DRBG definitions.
+
+module Crypto.DRBG.HMAC.Internal (
+ Error(..)
+ , _RESEED_COUNTER
+ , _MAX_BYTES
+ ) where
+
+import Data.Word (Word64)
+
+-- | A DRBG error.
+data Error =
+ MaxBytesExceeded -- ^ More than 65536 bytes have been requested.
+ | ReseedRequired -- ^ The DRBG must be reseeded (via 'reseed').
+ deriving (Eq, Show)
+
+-- see SP 800-90A table 2
+_RESEED_COUNTER :: Word64
+_RESEED_COUNTER = (2 :: Word64) ^ (48 :: Word64)
+{-# INLINE _RESEED_COUNTER #-}
+
+-- see SP 800-90A table 2
+_MAX_BYTES :: Word64
+_MAX_BYTES = 0x10000
+{-# INLINE _MAX_BYTES #-}
diff --git a/lib/Crypto/DRBG/HMAC/SHA256.hs b/lib/Crypto/DRBG/HMAC/SHA256.hs
@@ -28,6 +28,7 @@ module Crypto.DRBG.HMAC.SHA256 (
, _read_k
) where
+import Crypto.DRBG.HMAC.Internal (Error(..), _RESEED_COUNTER, _MAX_BYTES)
import qualified Crypto.Hash.SHA256 as SHA256
import Crypto.Hash.SHA256.Internal (Registers(..))
import qualified Crypto.Hash.SHA256.Internal as SHA256 (cat)
@@ -44,17 +45,6 @@ import qualified Foreign.Ptr as FP
-- api ------------------------------------------------------------------------
--- | A DRBG error.
-data Error =
- MaxBytesExceeded -- ^ More than 65536 bytes have been requested.
- | ReseedRequired -- ^ The DRBG must be reseeded (via 'reseed').
- deriving (Eq, Show)
-
--- see SP 800-90A table 2
-_RESEED_COUNTER :: Word64
-_RESEED_COUNTER = (2 :: Word64) ^ (48 :: Word64)
-{-# NOINLINE _RESEED_COUNTER #-}
-
-- | A deterministic random bit generator (DRBG).
--
-- Create a DRBG with 'new', and then use and reuse it to generate
@@ -147,7 +137,7 @@ gen
-> Word64
-> m (Either Error BS.ByteString)
gen (DRBG drbg) addl@(BI.PS _ _ l) bytes
- | bytes > 0x10000 = pure $! Left MaxBytesExceeded
+ | bytes > _MAX_BYTES = pure $! Left MaxBytesExceeded
| otherwise = do
ctr <- read_counter drbg
if ctr > _RESEED_COUNTER
diff --git a/lib/Crypto/DRBG/HMAC/SHA512.hs b/lib/Crypto/DRBG/HMAC/SHA512.hs
@@ -28,6 +28,7 @@ module Crypto.DRBG.HMAC.SHA512 (
, _read_k
) where
+import Crypto.DRBG.HMAC.Internal (Error(..), _RESEED_COUNTER, _MAX_BYTES)
import qualified Crypto.Hash.SHA512 as SHA512
import Crypto.Hash.SHA512.Internal (Registers(..))
import qualified Crypto.Hash.SHA512.Internal as SHA512 (cat)
@@ -43,17 +44,6 @@ import qualified Foreign.Ptr as FP
-- api ------------------------------------------------------------------------
--- | A DRBG error.
-data Error =
- MaxBytesExceeded -- ^ More than 65536 bytes have been requested.
- | ReseedRequired -- ^ The DRBG must be reseeded (via 'reseed').
- deriving (Eq, Show)
-
--- see SP 800-90A table 2
-_RESEED_COUNTER :: Word64
-_RESEED_COUNTER = (2 :: Word64) ^ (48 :: Word64)
-{-# NOINLINE _RESEED_COUNTER #-}
-
-- | A deterministic random bit generator (DRBG).
--
-- Create a DRBG with 'new', and then use and reuse it to generate
@@ -147,7 +137,7 @@ gen
-> Word64
-> m (Either Error BS.ByteString)
gen (DRBG drbg) addl@(BI.PS _ _ l) bytes
- | bytes > 0x10000 = pure $! Left MaxBytesExceeded
+ | bytes > _MAX_BYTES = pure $! Left MaxBytesExceeded
| otherwise = do
ctr <- read_counter drbg
if ctr > _RESEED_COUNTER
diff --git a/ppad-hmac-drbg.cabal b/ppad-hmac-drbg.cabal
@@ -31,7 +31,8 @@ library
if flag(llvm)
ghc-options: -fllvm -O2
exposed-modules:
- Crypto.DRBG.HMAC.SHA256
+ Crypto.DRBG.HMAC.Internal
+ , Crypto.DRBG.HMAC.SHA256
, Crypto.DRBG.HMAC.SHA512
build-depends:
base >= 4.9 && < 5