raaz-0.3.0: tests/core/Tests/Core/Instances.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
-- | Some common instances that are required by the test cases.
module Tests.Core.Instances where
import Tests.Core.Imports
import Tests.Core.Utils
import Raaz.Primitive.Poly1305.Internal as Poly1305
import Raaz.Core.Types.Internal
import Raaz.Primitive.Keyed.Internal as Keyed
instance Arbitrary w => Arbitrary (LE w) where
arbitrary = littleEndian <$> arbitrary
instance Arbitrary w => Arbitrary (BE w) where
arbitrary = bigEndian <$> arbitrary
instance Arbitrary w => Arbitrary (BYTES w) where
arbitrary = BYTES <$> arbitrary
instance Arbitrary ByteString where
arbitrary = pack <$> arbitrary
--------------- Arbitrary instances for Hashes ----------------
instance Arbitrary Sha256 where
arbitrary = genEncodable
instance Arbitrary Sha512 where
arbitrary = genEncodable
instance Arbitrary Blake2b where
arbitrary = genEncodable
instance Arbitrary Blake2s where
arbitrary = genEncodable
---------------- Parameter block for Blake -------------
---------------- Arbitrary instaces of encoded data --------------
instance Arbitrary Base16 where
arbitrary = encodeByteString . pack <$> listOf arbitrary
instance Arbitrary Base64 where
arbitrary = encodeByteString . pack <$> listOf arbitrary
------------------ For ChaCha20 types -------------------------
instance Arbitrary (Key ChaCha20) where
arbitrary = genEncodable
instance Arbitrary (Nounce ChaCha20) where
arbitrary = genEncodable
instance Arbitrary (BlockCount ChaCha20) where
arbitrary = toEnum <$> arbitrary
------------------ For XChaCha20 types -------------------------
instance Arbitrary (Key XChaCha20) where
arbitrary = genEncodable
instance Arbitrary (Key (Keyed prim)) where
arbitrary = Keyed.Key . pack <$> listOf1 arbitrary
instance Arbitrary (Nounce XChaCha20) where
arbitrary = genEncodable
instance Arbitrary (BlockCount XChaCha20) where
arbitrary = toEnum <$> arbitrary
------------------ Arbitrary instances for Poly1305 -------------
instance Arbitrary Poly1305.R where
arbitrary = genEncodable
instance Arbitrary Poly1305.S where
arbitrary = genEncodable
instance Arbitrary Poly1305.Poly1305 where
arbitrary = genEncodable
instance Arbitrary (Key Poly1305) where
arbitrary = Poly1305.Key <$> arbitrary <*> arbitrary