-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Validation SHA Implementations -- -- NIST Secure Hash Algorithm Validation Tests @package sha-validation @version 0.1.0.1 module Test.Hash.Internal data MsgFile MsgFile :: !Text -> !Natural -> !Vector MsgVector -> MsgFile [_msgDescription] :: MsgFile -> !Text [_msgL] :: MsgFile -> !Natural [_msgVectors] :: MsgFile -> !Vector MsgVector data MsgVector MsgVector :: !Natural -> !ByteString -> !ByteString -> MsgVector [_msgLen] :: MsgVector -> !Natural [_msgMsg] :: MsgVector -> !ByteString [_msgMd] :: MsgVector -> !ByteString readMsgFile :: FilePath -> IO MsgFile embedMsgFile :: FilePath -> Code Q MsgFile data MonteFile MonteFile :: !Text -> !Natural -> !ByteString -> !Vector MonteVector -> MonteFile [_monteDescription] :: MonteFile -> !Text [_monteL] :: MonteFile -> !Natural [_monteSeed] :: MonteFile -> !ByteString [_monteVectors] :: MonteFile -> !Vector MonteVector data MonteVector MonteVector :: !Natural -> !ByteString -> MonteVector [_monteCount] :: MonteVector -> !Natural [_monteMd] :: MonteVector -> !ByteString readMonteFile :: FilePath -> IO MonteFile embedMonteFile :: FilePath -> Code Q MonteFile data ShakeMsgFile ShakeMsgFile :: !Text -> !Natural -> !Vector MsgVector -> ShakeMsgFile [_shakeMsgDescription] :: ShakeMsgFile -> !Text [_shakeMsgOutputLen] :: ShakeMsgFile -> !Natural [_shakeMsgVectors] :: ShakeMsgFile -> !Vector MsgVector data ShakeMsgVector ShakeMsgVector :: !Natural -> !ByteString -> !ByteString -> ShakeMsgVector [_shakeMsgLen] :: ShakeMsgVector -> !Natural [_shakeMsgMsg] :: ShakeMsgVector -> !ByteString [_shakeMsgOutput] :: ShakeMsgVector -> !ByteString readShakeMsgFile :: FilePath -> IO ShakeMsgFile embedShakeMsgFile :: FilePath -> Code Q ShakeMsgFile data ShakeMonteFile ShakeMonteFile :: !Text -> !Natural -> !Natural -> !ByteString -> !Vector ShakeMonteVector -> ShakeMonteFile [_shakeMonteDescription] :: ShakeMonteFile -> !Text [_shakeMonteMinOutputBits] :: ShakeMonteFile -> !Natural [_shakeMonteMaxOutputBits] :: ShakeMonteFile -> !Natural [_shakeMonteMsg] :: ShakeMonteFile -> !ByteString [_shakeMonteVectors] :: ShakeMonteFile -> !Vector ShakeMonteVector data ShakeMonteVector ShakeMonteVector :: !Natural -> !Natural -> !ByteString -> ShakeMonteVector [_shakeMonteCount] :: ShakeMonteVector -> !Natural [_shakeMonteOutputLen] :: ShakeMonteVector -> !Natural [_shakeMonteOutput] :: ShakeMonteVector -> !ByteString readShakeMonteFile :: FilePath -> IO ShakeMonteFile embedShakeMonteFile :: FilePath -> Code Q ShakeMonteFile data ShakeVarOutFile ShakeVarOutFile :: !Text -> !Natural -> !Natural -> !Natural -> !Vector ShakeVarOutVector -> ShakeVarOutFile [_shakeVarOutDescription] :: ShakeVarOutFile -> !Text [_shakeVarOutInputLength] :: ShakeVarOutFile -> !Natural [_shakeVarOutMinOutputBits] :: ShakeVarOutFile -> !Natural [_shakeVarOutMaxOutputBits] :: ShakeVarOutFile -> !Natural [_shakeVarOutVectors] :: ShakeVarOutFile -> !Vector ShakeVarOutVector data ShakeVarOutVector ShakeVarOutVector :: !Natural -> !Natural -> !ByteString -> !ByteString -> ShakeVarOutVector [_shakeVarOutCount] :: ShakeVarOutVector -> !Natural [_shakeVarOutOutputLen] :: ShakeVarOutVector -> !Natural [_shakeVarOutMsg] :: ShakeVarOutVector -> !ByteString [_shakeVarOutOutput] :: ShakeVarOutVector -> !ByteString readShakeVarOutFile :: FilePath -> IO ShakeVarOutFile embedShakeVarOutFile :: FilePath -> Code Q ShakeVarOutFile -- | Check that all test vectors in a File are satisfied by a given hash -- implementation. msgTest :: (ByteString -> ByteString) -> MsgFile -> Bool -- | For a given hash implementation, assert the correct result for each -- test vector in a MsgFile. -- -- The function to assert equality is usually provided by some testing -- framework. msgAssert :: Monad m => (String -> ByteString -> ByteString -> m ()) -> (ByteString -> ByteString) -> MsgFile -> m () monteTestInternal :: Natural -> (ByteString -> ByteString) -> MonteFile -> Bool monteAssertInternal :: Monad m => Natural -> (String -> ByteString -> ByteString -> m ()) -> (ByteString -> ByteString) -> MonteFile -> m () embedIO :: Lift a => IO a -> Code Q a instance Language.Haskell.TH.Syntax.Lift Test.Hash.Internal.MsgVector instance GHC.Classes.Ord Test.Hash.Internal.MsgVector instance GHC.Classes.Eq Test.Hash.Internal.MsgVector instance GHC.Show.Show Test.Hash.Internal.MsgVector instance Language.Haskell.TH.Syntax.Lift Test.Hash.Internal.MsgFile instance GHC.Classes.Ord Test.Hash.Internal.MsgFile instance GHC.Classes.Eq Test.Hash.Internal.MsgFile instance GHC.Show.Show Test.Hash.Internal.MsgFile instance Language.Haskell.TH.Syntax.Lift Test.Hash.Internal.MonteVector instance GHC.Classes.Ord Test.Hash.Internal.MonteVector instance GHC.Classes.Eq Test.Hash.Internal.MonteVector instance GHC.Show.Show Test.Hash.Internal.MonteVector instance Language.Haskell.TH.Syntax.Lift Test.Hash.Internal.MonteFile instance GHC.Classes.Ord Test.Hash.Internal.MonteFile instance GHC.Classes.Eq Test.Hash.Internal.MonteFile instance GHC.Show.Show Test.Hash.Internal.MonteFile instance Language.Haskell.TH.Syntax.Lift Test.Hash.Internal.ShakeMsgFile instance GHC.Classes.Ord Test.Hash.Internal.ShakeMsgFile instance GHC.Classes.Eq Test.Hash.Internal.ShakeMsgFile instance GHC.Show.Show Test.Hash.Internal.ShakeMsgFile instance Language.Haskell.TH.Syntax.Lift Test.Hash.Internal.ShakeMsgVector instance GHC.Classes.Ord Test.Hash.Internal.ShakeMsgVector instance GHC.Classes.Eq Test.Hash.Internal.ShakeMsgVector instance GHC.Show.Show Test.Hash.Internal.ShakeMsgVector instance Language.Haskell.TH.Syntax.Lift Test.Hash.Internal.ShakeMonteVector instance GHC.Classes.Ord Test.Hash.Internal.ShakeMonteVector instance GHC.Classes.Eq Test.Hash.Internal.ShakeMonteVector instance GHC.Show.Show Test.Hash.Internal.ShakeMonteVector instance Language.Haskell.TH.Syntax.Lift Test.Hash.Internal.ShakeMonteFile instance GHC.Classes.Ord Test.Hash.Internal.ShakeMonteFile instance GHC.Classes.Eq Test.Hash.Internal.ShakeMonteFile instance GHC.Show.Show Test.Hash.Internal.ShakeMonteFile instance Language.Haskell.TH.Syntax.Lift Test.Hash.Internal.ShakeVarOutVector instance GHC.Classes.Ord Test.Hash.Internal.ShakeVarOutVector instance GHC.Classes.Eq Test.Hash.Internal.ShakeVarOutVector instance GHC.Show.Show Test.Hash.Internal.ShakeVarOutVector instance Language.Haskell.TH.Syntax.Lift Test.Hash.Internal.ShakeVarOutFile instance GHC.Classes.Ord Test.Hash.Internal.ShakeVarOutFile instance GHC.Classes.Eq Test.Hash.Internal.ShakeVarOutFile instance GHC.Show.Show Test.Hash.Internal.ShakeVarOutFile instance Language.Haskell.TH.Syntax.Lift a => Language.Haskell.TH.Syntax.Lift (Data.Vector.Vector a) -- | Details can be found here: -- -- -- https://csrc.nist.gov/csrc/media/projects/cryptographic-algorithm-validation-program/documents/shs/shavs.pdf. -- -- Response files are available here: -- -- -- https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/shs/shabytetestvectors.zip module Test.Hash.SHA data MsgFile MsgFile :: !Text -> !Natural -> !Vector MsgVector -> MsgFile [_msgDescription] :: MsgFile -> !Text [_msgL] :: MsgFile -> !Natural [_msgVectors] :: MsgFile -> !Vector MsgVector data MsgVector MsgVector :: !Natural -> !ByteString -> !ByteString -> MsgVector [_msgLen] :: MsgVector -> !Natural [_msgMsg] :: MsgVector -> !ByteString [_msgMd] :: MsgVector -> !ByteString -- | SHA1LongMsg.rsp sha1LongMsg :: MsgFile -- | SHA224LongMsg.rsp sha224LongMsg :: MsgFile -- | SHA256LongMsg.rsp sha256LongMsg :: MsgFile -- | SHA384LongMsg.rsp sha384LongMsg :: MsgFile -- | SHA512LongMsg.rsp sha512LongMsg :: MsgFile -- | SHA512_224LongMsg.rsp sha512_224LongMsg :: MsgFile -- | SHA512_256LongMsg.rsp sha512_256LongMsg :: MsgFile -- | SHA1ShortMsg.rsp sha1ShortMsg :: MsgFile -- | SHA224ShortMsg.rsp sha224ShortMsg :: MsgFile -- | SHA256ShortMsg.rsp sha256ShortMsg :: MsgFile -- | SHA384ShortMsg.rsp sha384ShortMsg :: MsgFile -- | SHA512ShortMsg.rsp sha512ShortMsg :: MsgFile -- | SHA512_224ShortMsg.rsp sha512_224ShortMsg :: MsgFile -- | SHA512_256ShortMsg.rsp sha512_256ShortMsg :: MsgFile data MonteFile MonteFile :: !Text -> !Natural -> !ByteString -> !Vector MonteVector -> MonteFile [_monteDescription] :: MonteFile -> !Text [_monteL] :: MonteFile -> !Natural [_monteSeed] :: MonteFile -> !ByteString [_monteVectors] :: MonteFile -> !Vector MonteVector data MonteVector MonteVector :: !Natural -> !ByteString -> MonteVector [_monteCount] :: MonteVector -> !Natural [_monteMd] :: MonteVector -> !ByteString -- | SHA1Monte.rsp sha1Monte :: MonteFile -- | SHA224Monte.rsp sha224Monte :: MonteFile -- | SHA256Monte.rsp sha256Monte :: MonteFile -- | SHA384Monte.rsp sha384Monte :: MonteFile -- | SHA512Monte.rsp sha512Monte :: MonteFile -- | SHA512_224Monte.rsp sha512_224Monte :: MonteFile -- | SHA512_256Monte.rsp sha512_256Monte :: MonteFile -- | Check that all test vectors in a File are satisfied by a given hash -- implementation. msgTest :: (ByteString -> ByteString) -> MsgFile -> Bool -- | For a given hash implementation, assert the correct result for each -- test vector in a MsgFile. -- -- The function to assert equality is usually provided by some testing -- framework. msgAssert :: Monad m => (String -> ByteString -> ByteString -> m ()) -> (ByteString -> ByteString) -> MsgFile -> m () -- | Test a given SHA1 or SHA2 implementation for the test vectors in a -- monte file. See monteAssert for details. monteTest :: (ByteString -> ByteString) -> MonteFile -> Bool -- | For a given SHA1 or SHA2 implementation, assert the correct result for -- each test vector in a MonteFile. -- -- The function to assert equality is usually provided by some testing -- framework. -- -- NOTE that the test algorithms for SHA (SHA1 and SHA2) and SHA3 are -- different. -- -- The test algorithm is describe in cf. -- https://csrc.nist.gov/csrc/media/projects/cryptographic-algorithm-validation-program/documents/shs/shavs.pdf. -- The pseudo code is as follows: -- --
-- INPUT: Seed - A random seed n bits long
-- {
-- for (j=0; j<100; j++) {
-- MD0 = MD1 = MD2 = Seed;
-- for (i=3; i<1003; i++) {
-- Mi = MDi-3 || MDi-2 || MDi-1;
-- MDi = SHA(Mi);
-- }
-- MDj = Seed = MD1002;
-- OUTPUT: MDj
-- }
-- }
--
monteAssert :: Monad m => (String -> ByteString -> ByteString -> m ()) -> (ByteString -> ByteString) -> MonteFile -> m ()
-- | Details can be found here:
--
--
-- https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha3vs.pdf
--
-- Response files are available here:
--
--
-- https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha-3bytetestvectors.zip
module Test.Hash.SHA3
data MsgFile
MsgFile :: !Text -> !Natural -> !Vector MsgVector -> MsgFile
[_msgDescription] :: MsgFile -> !Text
[_msgL] :: MsgFile -> !Natural
[_msgVectors] :: MsgFile -> !Vector MsgVector
data MsgVector
MsgVector :: !Natural -> !ByteString -> !ByteString -> MsgVector
[_msgLen] :: MsgVector -> !Natural
[_msgMsg] :: MsgVector -> !ByteString
[_msgMd] :: MsgVector -> !ByteString
-- | SHA3_224LongMsg.rsp
sha3_224LongMsg :: MsgFile
-- | SHA3_256LongMsg.rsp
sha3_256LongMsg :: MsgFile
-- | SHA3_384LongMsg.rsp
sha3_384LongMsg :: MsgFile
-- | SHA3_512LongMsg.rsp
sha3_512LongMsg :: MsgFile
-- | SHA3_224ShortMsg.rsp
sha3_224ShortMsg :: MsgFile
-- | SHA3_256ShortMsg.rsp
sha3_256ShortMsg :: MsgFile
-- | SHA3_384ShortMsg.rsp
sha3_384ShortMsg :: MsgFile
-- | SHA3_512ShortMsg.rsp
sha3_512ShortMsg :: MsgFile
data MonteFile
MonteFile :: !Text -> !Natural -> !ByteString -> !Vector MonteVector -> MonteFile
[_monteDescription] :: MonteFile -> !Text
[_monteL] :: MonteFile -> !Natural
[_monteSeed] :: MonteFile -> !ByteString
[_monteVectors] :: MonteFile -> !Vector MonteVector
data MonteVector
MonteVector :: !Natural -> !ByteString -> MonteVector
[_monteCount] :: MonteVector -> !Natural
[_monteMd] :: MonteVector -> !ByteString
-- | Monte Carlo SHA-3 Hash Function Tests for Hashing Byte-Oriented
-- Messages
--
-- SHA3_224Monte.rsp
sha3_224Monte :: MonteFile
-- | SHA3_256Monte.rsp
sha3_256Monte :: MonteFile
-- | SHA3_384Monte.rsp
sha3_384Monte :: MonteFile
-- | SHA3_512Monte.rsp
sha3_512Monte :: MonteFile
-- | Check that all test vectors in a File are satisfied by a given hash
-- implementation.
msgTest :: (ByteString -> ByteString) -> MsgFile -> Bool
-- | For a given hash implementation, assert the correct result for each
-- test vector in a MsgFile.
--
-- The function to assert equality is usually provided by some testing
-- framework.
msgAssert :: Monad m => (String -> ByteString -> ByteString -> m ()) -> (ByteString -> ByteString) -> MsgFile -> m ()
-- | Test a given SHA3 implementation for the test vectors in a monte file.
-- See monteAssert for details.
monteTest :: (ByteString -> ByteString) -> MonteFile -> Bool
-- | For a given SHA3 implementation, assert the correct result for each
-- test vector in a MonteFile.
--
-- The function to assert equality is usually provided by some testing
-- framework.
--
-- The test algorithm is describe in cf.
-- https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha3vs.pdf
-- The pseudo code is as follows:
--
--
-- INPUT: A random Seed n bits long
-- {
-- MD0 = Seed;
-- for (j=0; j<100; j++) {
-- for (i=1; i<1001; i++) {
-- Msgi = MDi-1;
-- MDi = SHA3(Msgi);
-- }
-- MD0 = MD1000;
-- OUTPUT: MD0
-- }
-- }
--
--
-- NOTE that the test algorithms for SHA (SHA1 and SHA2) and SHA3 are
-- different.
monteAssert :: Monad m => (String -> ByteString -> ByteString -> m ()) -> (ByteString -> ByteString) -> MonteFile -> m ()
-- | Details can be found here:
--
--
-- https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha3vs.pdf
--
-- Response files are available here:
--
--
-- https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/shakebytetestvectors.zip
module Test.Hash.SHAKE
data ShakeMsgFile
ShakeMsgFile :: !Text -> !Natural -> !Vector MsgVector -> ShakeMsgFile
[_shakeMsgDescription] :: ShakeMsgFile -> !Text
[_shakeMsgOutputLen] :: ShakeMsgFile -> !Natural
[_shakeMsgVectors] :: ShakeMsgFile -> !Vector MsgVector
data ShakeMsgVector
ShakeMsgVector :: !Natural -> !ByteString -> !ByteString -> ShakeMsgVector
[_shakeMsgLen] :: ShakeMsgVector -> !Natural
[_shakeMsgMsg] :: ShakeMsgVector -> !ByteString
[_shakeMsgOutput] :: ShakeMsgVector -> !ByteString
-- | SHAKE128ShortMsg.rsp
shake128ShortMsg :: ShakeMsgFile
-- | SHAKE256ShortMsg.rsp
shake256ShortMsg :: ShakeMsgFile
-- | SHAKE128LongMsg.rsp
shake128LongMsg :: ShakeMsgFile
-- | SHAKE256LongMsg.rsp
shake256LongMsg :: ShakeMsgFile
data ShakeMonteFile
ShakeMonteFile :: !Text -> !Natural -> !Natural -> !ByteString -> !Vector ShakeMonteVector -> ShakeMonteFile
[_shakeMonteDescription] :: ShakeMonteFile -> !Text
[_shakeMonteMinOutputBits] :: ShakeMonteFile -> !Natural
[_shakeMonteMaxOutputBits] :: ShakeMonteFile -> !Natural
[_shakeMonteMsg] :: ShakeMonteFile -> !ByteString
[_shakeMonteVectors] :: ShakeMonteFile -> !Vector ShakeMonteVector
data ShakeMonteVector
ShakeMonteVector :: !Natural -> !Natural -> !ByteString -> ShakeMonteVector
[_shakeMonteCount] :: ShakeMonteVector -> !Natural
[_shakeMonteOutputLen] :: ShakeMonteVector -> !Natural
[_shakeMonteOutput] :: ShakeMonteVector -> !ByteString
-- | SHAKE128Monte.rsp
shake128Monte :: ShakeMonteFile
-- | SHAKE256Monte.rsp
shake256Monte :: ShakeMonteFile
data ShakeVarOutFile
ShakeVarOutFile :: !Text -> !Natural -> !Natural -> !Natural -> !Vector ShakeVarOutVector -> ShakeVarOutFile
[_shakeVarOutDescription] :: ShakeVarOutFile -> !Text
[_shakeVarOutInputLength] :: ShakeVarOutFile -> !Natural
[_shakeVarOutMinOutputBits] :: ShakeVarOutFile -> !Natural
[_shakeVarOutMaxOutputBits] :: ShakeVarOutFile -> !Natural
[_shakeVarOutVectors] :: ShakeVarOutFile -> !Vector ShakeVarOutVector
data ShakeVarOutVector
ShakeVarOutVector :: !Natural -> !Natural -> !ByteString -> !ByteString -> ShakeVarOutVector
[_shakeVarOutCount] :: ShakeVarOutVector -> !Natural
[_shakeVarOutOutputLen] :: ShakeVarOutVector -> !Natural
[_shakeVarOutMsg] :: ShakeVarOutVector -> !ByteString
[_shakeVarOutOutput] :: ShakeVarOutVector -> !ByteString
-- | SHAKE128VarOut.rsp
shake128VarOut :: ShakeVarOutFile
-- | SHAKE256VarOut.rsp
shake256VarOut :: ShakeVarOutFile