module Codec.Encryption.RSA.MGF (
mgf) where
import Codec.Utils (Octet, i2osp)
mgf :: ([Octet] -> [Octet]) -> [Octet] -> Int -> [Octet]
mgf :: ([Octet] -> [Octet]) -> [Octet] -> Int -> [Octet]
mgf [Octet] -> [Octet]
hash [Octet]
z Int
l =
forall a. Int -> [a] -> [a]
take Int
l forall a b. (a -> b) -> a -> b
$ forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat forall a b. (a -> b) -> a -> b
$ [[Octet]]
hashes
where
hashes :: [[Octet]]
hashes = forall a b. (a -> b) -> [a] -> [b]
map Int -> [Octet]
f [Int
0..(Int
l forall a. Integral a => a -> a -> a
`div` Int
hLen)]
hLen :: Int
hLen = forall (t :: * -> *) a. Foldable t => t a -> Int
length forall a b. (a -> b) -> a -> b
$ Int -> [Octet]
f Int
0
f :: Int -> [Octet]
f = [Octet] -> [Octet]
hash forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Octet]
zforall a. [a] -> [a] -> [a]
++) forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall a. Integral a => Int -> a -> [Octet]
i2osp Int
4)