-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Generic cryptography cipher types -- -- Generic cryptography cipher types @package crypto-cipher-types @version 0.0.3 -- | symmetric cipher basic types module Crypto.Cipher.Types -- | Symmetric cipher class. class Cipher cipher cipherInit :: Cipher cipher => Key cipher -> cipher cipherName :: Cipher cipher => cipher -> String cipherKeySize :: Cipher cipher => cipher -> KeySizeSpecifier -- | Symmetric block cipher class class Cipher cipher => BlockCipher cipher where cbcEncrypt = cbcEncryptGeneric cbcDecrypt = cbcDecryptGeneric ctrCombine = ctrCombineGeneric xtsEncrypt = xtsEncryptGeneric xtsDecrypt = xtsDecryptGeneric aeadInit _ _ _ = Nothing blockSize :: BlockCipher cipher => cipher -> Int ecbEncrypt :: BlockCipher cipher => cipher -> ByteString -> ByteString ecbDecrypt :: BlockCipher cipher => cipher -> ByteString -> ByteString cbcEncrypt :: BlockCipher cipher => cipher -> IV cipher -> ByteString -> ByteString cbcDecrypt :: BlockCipher cipher => cipher -> IV cipher -> ByteString -> ByteString ctrCombine :: BlockCipher cipher => cipher -> IV cipher -> ByteString -> ByteString xtsEncrypt :: BlockCipher cipher => (cipher, cipher) -> IV cipher -> DataUnitOffset -> ByteString -> ByteString xtsDecrypt :: BlockCipher cipher => (cipher, cipher) -> IV cipher -> DataUnitOffset -> ByteString -> ByteString aeadInit :: (BlockCipher cipher, Byteable iv) => AEADMode -> cipher -> iv -> Maybe (AEAD cipher) -- | Symmetric stream cipher class class Cipher cipher => StreamCipher cipher streamEncrypt :: StreamCipher cipher => cipher -> ByteString -> (ByteString, cipher) streamDecrypt :: StreamCipher cipher => cipher -> ByteString -> (ByteString, cipher) -- | Offset inside an XTS data unit, measured in block size. type DataUnitOffset = Word32 -- | Different specifier for key size in bytes data KeySizeSpecifier -- | in the range [min,max] KeySizeRange :: Int -> Int -> KeySizeSpecifier -- | one of the specified values KeySizeEnum :: [Int] -> KeySizeSpecifier -- | a specific size KeySizeFixed :: Int -> KeySizeSpecifier -- | Possible Error that can be reported when initializating a key data KeyError KeyErrorTooSmall :: KeyError KeyErrorTooBig :: KeyError KeyErrorInvalid :: String -> KeyError -- | Authenticated Encryption with Associated Data algorithms data AEAD cipher AEAD :: cipher -> (AEADState cipher) -> AEAD cipher -- | Wrapper for any AEADState data AEADState cipher AEADState :: st -> AEADState cipher -- | AEAD Mode data AEADMode AEAD_OCB :: AEADMode AEAD_CCM :: AEADMode AEAD_EAX :: AEADMode AEAD_CWC :: AEADMode AEAD_GCM :: AEADMode -- | Class of AEAD Mode implementation class BlockCipher cipher => AEADModeImpl cipher state aeadStateAppendHeader :: AEADModeImpl cipher state => cipher -> state -> ByteString -> state aeadStateEncrypt :: AEADModeImpl cipher state => cipher -> state -> ByteString -> (ByteString, state) aeadStateDecrypt :: AEADModeImpl cipher state => cipher -> state -> ByteString -> (ByteString, state) aeadStateFinalize :: AEADModeImpl cipher state => cipher -> state -> Int -> AuthTag -- | Append associated data into the AEAD state aeadAppendHeader :: BlockCipher a => AEAD a -> ByteString -> AEAD a -- | Encrypt input and append into the AEAD state aeadEncrypt :: BlockCipher a => AEAD a -> ByteString -> (ByteString, AEAD a) -- | Decrypt input and append into the AEAD state aeadDecrypt :: BlockCipher a => AEAD a -> ByteString -> (ByteString, AEAD a) -- | Finalize the AEAD state and create an authentification tag aeadFinalize :: BlockCipher a => AEAD a -> Int -> AuthTag -- | Simple AEAD encryption aeadSimpleEncrypt :: BlockCipher a => AEAD a -> ByteString -> ByteString -> Int -> (AuthTag, ByteString) -- | Simple AEAD decryption aeadSimpleDecrypt :: BlockCipher a => AEAD a -> ByteString -> ByteString -> AuthTag -> Maybe ByteString -- | a Key parametrized by the cipher data Key c -- | Create a Key for a specified cipher makeKey :: (ToSecureMem b, Cipher c) => b -> Either KeyError (Key c) -- | an IV parametrized by the cipher data IV c -- | Create an IV for a specified block cipher makeIV :: (Byteable b, BlockCipher c) => b -> Maybe (IV c) -- | Create an IV that is effectively representing the number 0 nullIV :: BlockCipher c => IV c -- | Increment an IV by a number. -- -- Assume the IV is in Big Endian format. ivAdd :: BlockCipher c => IV c -> Int -> IV c -- | Authentification Tag for AE cipher mode newtype AuthTag AuthTag :: ByteString -> AuthTag instance Show KeyError instance Eq KeyError instance Show KeySizeSpecifier instance Eq KeySizeSpecifier instance Show AEADMode instance Eq AEADMode instance Eq (Key c) instance Eq (IV c) instance Show AuthTag instance Byteable AuthTag instance Eq AuthTag instance Byteable (IV c) instance Byteable (Key c) instance ToSecureMem (Key c)