-- | -- Module : Crypto.PubKey.MaskGenFunction -- License : BSD-style -- Maintainer : Vincent Hanquez -- Stability : experimental -- Portability : Good -- module Crypto.PubKey.MaskGenFunction ( MaskGenAlgorithm , mgf1 ) where import Data.ByteString (ByteString) import qualified Data.ByteString as B import Crypto.PubKey.HashDescr import Crypto.Number.Serialize (i2ospOf_) -- | Represent a mask generation algorithm type MaskGenAlgorithm = HashFunction -- ^ hash function to use -> ByteString -- ^ seed -> Int -- ^ length to generate -> ByteString -- | Mask generation algorithm MGF1 mgf1 :: MaskGenAlgorithm mgf1 hashF seed len = loop B.empty 0 where loop t counter | B.length t >= len = B.take len t | otherwise = let counterBS = i2ospOf_ 4 counter newT = t `B.append` hashF (seed `B.append` counterBS) in loop newT (counter+1)