-- 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