-- | This module exposes all the ciphers provided by raaz. The
-- interface here is pretty low level and it is usually the case that
-- you would not need to work at this level of detail.
module Raaz.Cipher
       ( -- * Ciphers
         -- $cipherdoc$
         StreamCipher
       , transform, chacha20
       , Cipher
       , aes128cbc, aes192cbc, aes256cbc
       ) where


import Raaz.Cipher.AES      ( aes128cbc, aes192cbc, aes256cbc)
import Raaz.Cipher.ChaCha20
import Raaz.Cipher.Internal (transform, Cipher, StreamCipher)

-- $cipherdoc$
--
-- The raaz library exposes symmetric key encryption using instances
-- of the class `Cipher`. For a cipher @c@, the type family @`Key` c@
-- gives the type of its key. As of now, we only support the safe
-- usage of stream ciphers. Encryption and Decryption are the same for
-- stream ciphers and we call this combinator `transform`. Block
-- ciphers do not have a natural way to handle streams that are of
-- size less than their block size. A future release will handle these
-- issues.
--
-- If you are thinking of encryption using private keys consider
-- encrypted-authenticated modes. Currently we do not have support for
-- this either but hopefully this will also be fixed soon.
--
-- TODO: Fix the above documentation when it is done.